시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
7 초 128 MB 3120 542 279 15.049%

문제

Brainf**k 프로그램이 주어졌을 때, 이 프로그램이 끝나는지, 무한 루프에 빠지는지 알아내는 프로그램을 작성하시오.

Brainf**k 인터프리터는 정수를 담는 하나의 배열(unsigned 8-bit 정수)과, 그 배열의 칸 하나를 가리키는 포인터로 이루어져 있다. Brainf**k 프로그램은 다음과 같이 8개의 명령어로 이루어져 있다.

- 포인터가 가리키는 수를 1 감소시킨다. (modulo 28)
+ 포인터가 가리키는 수를 1 증가시킨다. (modulo 28)
< 포인터를 왼쪽으로 움직인다.(1 감소)
> 포인터를 오른쪽으로 움직인다.(1 증가)
[ 만약 포인터가 가리키는 수가 0과 같다면, [와 짝을 이루는 ]로 점프한다.
] 만약 포인터가 가리키는 수가 0이 아니라면, ]와 짝을 이루는 [로 점프한다.
. 포인터가 가리키는 수를 출력한다.
, 문자 하나를 읽고 포인터가 가리키는 곳에 저장한다. 입력의 마지막(EOF)인 경우에는 255를 저장한다.

인터프리터는 Brainf**k 프로그램의 첫 번째 명령부터 수행하고, 더이상 수행할 명령이 없다면, 프로그램을 종료한다. 각 명령을 수행하고 나면, 다음 명령을 수행한다. 물론 [이나 ]인 경우에는 다음 명령으로 이동하는 것이 아니라 점프를 한다.

데이터 배열의 크기는 문제에서 주어지는 값을 사용해야 한다. 또, 데이터 배열의 값이 underflow나 overflow를 일으켰을 때는 일반적인 방법을 따르면 된다. 프로그램을 수행하기 전에, 데이터 배열의 값은 0으로 초기화되어 있고, 포인터가 가리키는 칸은 0번 칸이다.

포인터를 왼쪽이나 오른쪽으로 움직일 때, 데이터 배열의 범위를 넘어간다면, 반대쪽으로 넘어가게 된다. 즉, 포인터가 0을 가리킬 때, 1을 감소시킨다면, 배열의 크기 - 1번째를 가리키게 된다.

[와 ]는 루프를 의미하며, 중첩될 수 있다. 입력으로 주어진 프로그램은 잘 짜여 있음이 보장된다. 즉 프로그램을 왼쪽에서 오른쪽으로 훑으면서 [의 개수에서 ]의 개수를 빼면 항상 0보다 크거나 같고, 맨 끝까지 훑으면 그 값은 0이 된다.

이 문제는 Brainf**k 프로그램이 무한 루프에 빠지는지 안 빠지는지를 검사하기만 하면 된다. 따라서, 출력은 무시한다.

입력

첫째 줄에 테스트 케이스의 개수 t (0 < t ≤ 20)가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 sm, sc, si가 주어진다. sm은 메모리(배열)의 크기이고, sc는 프로그램 코드의 크기, si는 입력의 크기이다. (0 < sm ≤ 100,000, 0 < sc, si < 4096)

둘째 줄에는 Brainf**k 프로그램이 주어진다. 프로그램은 sc개의 문자로 이루어져 있다.

셋째 줄에는 프로그램의 입력이 주어진다. (공백이 아니면서 출력할 수 있는 문자만 주어진다)

출력

각 테스트 케이스에 대해서, 프로그램이 종료된다면 "Terminates"를, 무한 루프에 빠지게 된다면 "Loops"를 출력한다. 무한 루프에 빠졌을 때는, 프로그램의 어느 부분이 무한 루프인지를 출력한다. ([와 ]의 위치) 프로그램이 명령어를 50,000,000번 이상 수행한 경우, 프로그램은 항상 종료되었거나 무한 루프에 빠져있다. 무한 루프일 경우, 해당 루프는 적어도 한 번 실행이 완료된 상태이며, 한 번의 무한 루프에서 실행되는 명령어의 개수는 50,000,000개 이하이다.

예제 입력 1

4
10 4 3
+-.,
qwe
1000 5 1
+[+-]
a
100 74 4
+++++[->++<]>[-<+++++++>]<[->+>+>+>+<<<<]>+++>--->++++++++++>---<<<.>.>.>.
xxyz
9999 52 14
+++++[>+++++++++<-],+[-[>--.++>+<<-]>+.->[<.>-]<<,+]
this_is_a_test

예제 출력 1

Terminates
Loops 1 4
Terminates
Terminates
W3sicHJvYmxlbV9pZCI6IjM5NTQiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJCcmFpbmYqKmsgXHVjNzc4XHVkMTMwXHVkNTA0XHViOWFjXHVkMTMwIiwiZGVzY3JpcHRpb24iOiI8cD5CcmFpbmYqKmsgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YzhmY1x1YzViNFx1Yzg0Y1x1Yzc0NCBcdWI1NGMsIFx1Yzc3NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHViMDVkXHViMDk4XHViMjk0XHVjOWMwLCBcdWJiMzRcdWQ1NWMgXHViOGU4XHVkNTA0XHVjNWQwIFx1YmU2MFx1YzljMFx1YjI5NFx1YzljMCBcdWM1NGNcdWM1NDRcdWIwYjRcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YzJkY1x1YzYyNC48XC9wPlxyXG5cclxuPHA+QnJhaW5mKiprIFx1Yzc3OFx1ZDEzMFx1ZDUwNFx1YjlhY1x1ZDEzMFx1YjI5NCBcdWM4MTVcdWMyMThcdWI5N2MgXHViMmY0XHViMjk0IFx1ZDU1OFx1YjA5OFx1Yzc1OCBcdWJjMzBcdWM1ZjQodW5zaWduZWQgOC1iaXQgXHVjODE1XHVjMjE4KVx1YWNmYywgXHVhZGY4IFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWNlNzggXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWQzZWNcdWM3NzhcdWQxMzBcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YjJlNC4gQnJhaW5mKiprIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0MCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzc0IDhcdWFjMWNcdWM3NTggXHViYTg1XHViODM5XHVjNWI0XHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XHJcblx0PHRib2R5PlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGggc3R5bGU9XCJ3aWR0aDoyMCVcIj4tPFwvdGg+XHJcblx0XHRcdDx0ZCBzdHlsZT1cIndpZHRoOjgwJVwiPlx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVjMjE4XHViOTdjIDEgXHVhYzEwXHVjMThjXHVjMmRjXHVkMGE4XHViMmU0LiAobW9kdWxvIDI8c3VwPjg8XC9zdXA+KTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4rPFwvdGg+XHJcblx0XHRcdDx0ZD5cdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YzIxOFx1Yjk3YyAxIFx1Yzk5ZFx1YWMwMFx1YzJkY1x1ZDBhOFx1YjJlNC4gKG1vZHVsbyAyPHN1cD44PFwvc3VwPik8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+Jmx0OzxcL3RoPlxyXG5cdFx0XHQ8dGQ+XHVkM2VjXHVjNzc4XHVkMTMwXHViOTdjIFx1YzY3Y1x1Y2FiZFx1YzczY1x1Yjg1YyBcdWM2YzBcdWM5YzFcdWM3NzhcdWIyZTQuKDEgXHVhYzEwXHVjMThjKTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4mZ3Q7PFwvdGg+XHJcblx0XHRcdDx0ZD5cdWQzZWNcdWM3NzhcdWQxMzBcdWI5N2MgXHVjNjI0XHViOTc4XHVjYWJkXHVjNzNjXHViODVjIFx1YzZjMFx1YzljMVx1Yzc3OFx1YjJlNC4oMSBcdWM5OWRcdWFjMDApPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPls8XC90aD5cclxuXHRcdFx0PHRkPlx1YjljY1x1YzU3ZCBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YzIxOFx1YWMwMCAwXHVhY2ZjIFx1YWMxOVx1YjJlNFx1YmE3NCwgW1x1YzY0MCBcdWM5ZGRcdWM3NDQgXHVjNzc0XHViOGU4XHViMjk0IF1cdWI4NWMgXHVjODEwXHVkNTA0XHVkNTVjXHViMmU0LjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD5dPFwvdGg+XHJcblx0XHRcdDx0ZD5cdWI5Y2NcdWM1N2QgXHVkM2VjXHVjNzc4XHVkMTMwXHVhYzAwIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWMyMThcdWFjMDAgMFx1Yzc3NCBcdWM1NDRcdWIyYzhcdWI3N2NcdWJhNzQsIF1cdWM2NDAgXHVjOWRkXHVjNzQ0IFx1Yzc3NFx1YjhlOFx1YjI5NCBbXHViODVjIFx1YzgxMFx1ZDUwNFx1ZDU1Y1x1YjJlNC48XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+LjxcL3RoPlxyXG5cdFx0XHQ8dGQ+XHVkM2VjXHVjNzc4XHVkMTMwXHVhYzAwIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWMyMThcdWI5N2MgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4sPFwvdGg+XHJcblx0XHRcdDx0ZD5cdWJiMzhcdWM3OTAgXHVkNTU4XHViMDk4XHViOTdjIFx1Yzc3ZFx1YWNlMCBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YWNmM1x1YzVkMCBcdWM4MDBcdWM3YTVcdWQ1NWNcdWIyZTQuIFx1Yzc4NVx1YjgyNVx1Yzc1OCBcdWI5YzhcdWM5YzBcdWI5YzkoRU9GKVx1Yzc3OCBcdWFjYmRcdWM2YjBcdWM1ZDBcdWIyOTQgMjU1XHViOTdjIFx1YzgwMFx1YzdhNVx1ZDU1Y1x1YjJlNC48XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdDxcL3Rib2R5PlxyXG48XC90YWJsZT5cclxuXHJcbjxwPlx1Yzc3OFx1ZDEzMFx1ZDUwNFx1YjlhY1x1ZDEzMFx1YjI5NCBCcmFpbmYqKmsgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzU4IFx1Y2NhYiBcdWJjODhcdWM5ZjggXHViYTg1XHViODM5XHViZDgwXHVkMTMwIFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YWNlMCwgXHViMzU0XHVjNzc0XHVjMGMxIFx1YzIxOFx1ZDU4OVx1ZDU2MCBcdWJhODVcdWI4MzlcdWM3NzQgXHVjNWM2XHViMmU0XHViYTc0LCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjODg1XHViOGNjXHVkNTVjXHViMmU0LiBcdWFjMDEgXHViYTg1XHViODM5XHVjNzQ0IFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YWNlMCBcdWIwOThcdWJhNzQsIFx1YjJlNFx1Yzc0YyBcdWJhODVcdWI4MzlcdWM3NDQgXHVjMjE4XHVkNTg5XHVkNTVjXHViMmU0LiZuYnNwO1x1YmIzY1x1Yjg2MCBbXHVjNzc0XHViMDk4IF1cdWM3NzggXHVhY2JkXHVjNmIwXHVjNWQwXHViMjk0IFx1YjJlNFx1Yzc0YyBcdWJhODVcdWI4MzlcdWM3M2NcdWI4NWMgXHVjNzc0XHViM2Q5XHVkNTU4XHViMjk0IFx1YWM4M1x1Yzc3NCBcdWM1NDRcdWIyYzhcdWI3N2MgXHVjODEwXHVkNTA0XHViOTdjIFx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViMzcwXHVjNzc0XHVkMTMwIFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWQwNmNcdWFlMzBcdWIyOTQgXHViYjM4XHVjODFjXHVjNWQwXHVjMTFjIFx1YzhmY1x1YzViNFx1YzljMFx1YjI5NCBcdWFjMTJcdWM3NDQgXHVjMGFjXHVjNmE5XHVkNTc0XHVjNTdjIFx1ZDU1Y1x1YjJlNC4gXHViNjEwLCBcdWIzNzBcdWM3NzRcdWQxMzAgXHViYzMwXHVjNWY0XHVjNzU4IFx1YWMxMlx1Yzc3NCB1bmRlcmZsb3dcdWIwOTggb3ZlcmZsb3dcdWI5N2MgXHVjNzdjXHVjNzNjXHVjZjMwXHVjNzQ0IFx1YjU0Y1x1YjI5NCBcdWM3N2NcdWJjMThcdWM4MDFcdWM3NzggXHViYzI5XHViYzk1XHVjNzQ0IFx1YjUzMFx1Yjk3NFx1YmE3NCBcdWI0MWNcdWIyZTQuIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0NCBcdWMyMThcdWQ1ODlcdWQ1NThcdWFlMzAgXHVjODA0XHVjNWQwLCBcdWIzNzBcdWM3NzRcdWQxMzAgXHViYzMwXHVjNWY0XHVjNzU4IFx1YWMxMlx1Yzc0MCAwXHVjNzNjXHViODVjIFx1Y2QwOFx1YWUzMFx1ZDY1NFx1YjQxOFx1YzViNCBcdWM3ODhcdWFjZTAsIFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVjZTc4XHVjNzQwIDBcdWJjODggXHVjZTc4XHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWQzZWNcdWM3NzhcdWQxMzBcdWI5N2MgXHVjNjdjXHVjYWJkXHVjNzc0XHViMDk4IFx1YzYyNFx1Yjk3OFx1Y2FiZFx1YzczY1x1Yjg1YyBcdWM2YzBcdWM5YzFcdWM3N2MgXHViNTRjLCBcdWIzNzBcdWM3NzRcdWQxMzAgXHViYzMwXHVjNWY0XHVjNzU4IFx1YmM5NFx1YzcwNFx1Yjk3YyBcdWIxMThcdWM1YjRcdWFjMDRcdWIyZTRcdWJhNzQsIFx1YmMxOFx1YjMwMFx1Y2FiZFx1YzczY1x1Yjg1YyBcdWIxMThcdWM1YjRcdWFjMDBcdWFjOGMgXHViNDFjXHViMmU0LiBcdWM5ODksIFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCAwXHVjNzQ0IFx1YWMwMFx1YjlhY1x1ZDBhYyBcdWI1NGMsIDFcdWM3NDQgXHVhYzEwXHVjMThjXHVjMmRjXHVkMGE4XHViMmU0XHViYTc0LCBcdWJjMzBcdWM1ZjRcdWM3NTggXHVkMDZjXHVhZTMwIC0gMVx1YmM4OFx1YzlmOFx1Yjk3YyBcdWFjMDBcdWI5YWNcdWQwYTRcdWFjOGMgXHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cD5bXHVjNjQwIF1cdWIyOTQgXHViOGU4XHVkNTA0XHViOTdjIFx1Yzc1OFx1YmJmOFx1ZDU1OFx1YmE3MCwgXHVjOTExXHVjY2E5XHViNDIwIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1Yzc4NVx1YjgyNVx1YzczY1x1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQwIFx1Yzc5OCBcdWM5ZGNcdWM1ZWMgXHVjNzg4XHVjNzRjXHVjNzc0IFx1YmNmNFx1YzdhNVx1YjQxY1x1YjJlNC4gXHVjOTg5IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0NCBcdWM2N2NcdWNhYmRcdWM1ZDBcdWMxMWMgXHVjNjI0XHViOTc4XHVjYWJkXHVjNzNjXHViODVjIFx1ZDZkMVx1YzczY1x1YmE3NFx1YzExYyBbXHVjNzU4IFx1YWMxY1x1YzIxOFx1YzVkMFx1YzExYyBdXHVjNzU4IFx1YWMxY1x1YzIxOFx1Yjk3YyBcdWJlN2NcdWJhNzQgXHVkNTZkXHVjMGMxIDBcdWJjZjRcdWIyZTQgXHVkMDZjXHVhYzcwXHViMDk4IFx1YWMxOVx1YWNlMCwgXHViOWU4IFx1YjA1ZFx1YWU0Y1x1YzljMCBcdWQ2ZDFcdWM3M2NcdWJhNzQgXHVhZGY4IFx1YWMxMlx1Yzc0MCAwXHVjNzc0IFx1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNzc0IFx1YmIzOFx1YzgxY1x1YjI5NCBCcmFpbmYqKmsgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YmIzNFx1ZDU1YyBcdWI4ZThcdWQ1MDRcdWM1ZDAgXHViZTYwXHVjOWMwXHViMjk0XHVjOWMwIFx1YzU0OCBcdWJlNjBcdWM5YzBcdWIyOTRcdWM5YzBcdWI5N2MgXHVhYzgwXHVjMGFjXHVkNTU4XHVhZTMwXHViOWNjIFx1ZDU1OFx1YmE3NCBcdWI0MWNcdWIyZTQuIFx1YjUzMFx1Yjc3Y1x1YzExYywgXHVjZDljXHViODI1XHVjNzQwIFx1YmIzNFx1YzJkY1x1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Y2NhYlx1YzlmOCBcdWM5MDRcdWM1ZDAgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yzc1OCBcdWFjMWNcdWMyMTggdCAoMCAmbHQ7IHQgJmxlOyAyMClcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWFjMDEgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1YjI5NCBcdWMxMzggXHVjOTA0XHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuIFx1Y2NhYlx1YzlmOCBcdWM5MDRcdWM1ZDBcdWIyOTQgczxzdWI+bTxcL3N1Yj4sIHM8c3ViPmM8XC9zdWI+LCBzPHN1Yj5pPFwvc3ViPlx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIHM8c3ViPm08XC9zdWI+XHVjNzQwIFx1YmE1NFx1YmFhOFx1YjlhYyhcdWJjMzBcdWM1ZjQpXHVjNzU4IFx1ZDA2Y1x1YWUzMFx1Yzc3NFx1YWNlMCwgczxzdWI+YzxcL3N1Yj5cdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4IFx1Y2Y1NFx1YjRkY1x1Yzc1OCBcdWQwNmNcdWFlMzAsIHM8c3ViPmk8XC9zdWI+XHViMjk0IFx1Yzc4NVx1YjgyNVx1Yzc1OCBcdWQwNmNcdWFlMzBcdWM3NzRcdWIyZTQuICgwICZsdDsgczxzdWI+bTxcL3N1Yj4gJmxlOyAxMDAsMDAwLCAwICZsdDsgczxzdWI+YzxcL3N1Yj4sIHM8c3ViPmk8XC9zdWI+ICZsdDsgNDA5Nik8XC9wPlxyXG5cclxuPHA+XHViNDU4XHVjOWY4IFx1YzkwNFx1YzVkMFx1YjI5NCBCcmFpbmYqKmsgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQwIHM8c3ViPmM8XC9zdWI+XHVhYzFjXHVjNzU4IFx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWMxNGJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc1OCBcdWM3ODVcdWI4MjVcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiAoXHVhY2Y1XHViYzMxXHVjNzc0IFx1YzU0NFx1YjJjOFx1YmE3NFx1YzExYyBcdWNkOWNcdWI4MjVcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjI5NCBcdWJiMzhcdWM3OTBcdWI5Y2MgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0KTxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU3NFx1YzExYywgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1Yzg4NVx1YjhjY1x1YjQxY1x1YjJlNFx1YmE3NCAmcXVvdDtUZXJtaW5hdGVzJnF1b3Q7XHViOTdjLCBcdWJiMzRcdWQ1NWMgXHViOGU4XHVkNTA0XHVjNWQwIFx1YmU2MFx1YzljMFx1YWM4YyBcdWI0MWNcdWIyZTRcdWJhNzQgJnF1b3Q7TG9vcHMmcXVvdDtcdWI5N2MgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LiBcdWJiMzRcdWQ1NWMgXHViOGU4XHVkNTA0XHVjNWQwIFx1YmU2MFx1Yzg0Y1x1Yzc0NCBcdWI1NGNcdWIyOTQsIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc1OCBcdWM1YjRcdWIyOTAgXHViZDgwXHViZDg0XHVjNzc0IFx1YmIzNFx1ZDU1YyBcdWI4ZThcdWQ1MDRcdWM3NzhcdWM5YzBcdWI5N2MgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LiAoW1x1YzY0MCBdXHVjNzU4IFx1YzcwNFx1Y2U1OCkgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YmE4NVx1YjgzOVx1YzViNFx1Yjk3YyA1MCwwMDAsMDAwXHViYzg4IFx1Yzc3NFx1YzBjMSBcdWMyMThcdWQ1ODlcdWQ1NWMgXHVhY2JkXHVjNmIwLCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDAgXHVkNTZkXHVjMGMxIFx1Yzg4NVx1YjhjY1x1YjQxOFx1YzVjOFx1YWM3MFx1YjA5OCBcdWJiMzRcdWQ1NWMgXHViOGU4XHVkNTA0XHVjNWQwIFx1YmU2MFx1YzgzOFx1Yzc4OFx1YjJlNC4gXHViYjM0XHVkNTVjIFx1YjhlOFx1ZDUwNFx1Yzc3YyBcdWFjYmRcdWM2YjAsIFx1ZDU3NFx1YjJmOSBcdWI4ZThcdWQ1MDRcdWIyOTQgXHVjODAxXHVjNWI0XHViM2M0IFx1ZDU1YyBcdWJjODggXHVjMmU0XHVkNTg5XHVjNzc0IFx1YzY0NFx1YjhjY1x1YjQxYyBcdWMwYzFcdWQwZGNcdWM3NzRcdWJhNzAsIFx1ZDU1YyBcdWJjODhcdWM3NTggXHViYjM0XHVkNTVjIFx1YjhlOFx1ZDUwNFx1YzVkMFx1YzExYyBcdWMyZTRcdWQ1ODlcdWI0MThcdWIyOTQgXHViYTg1XHViODM5XHVjNWI0XHVjNzU4IFx1YWMxY1x1YzIxOFx1YjI5NCA1MCwwMDAsMDAwXHVhYzFjIFx1Yzc3NFx1ZDU1OFx1Yzc3NFx1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWQ1NWNcdWFkNmRcdWM1YjQifSx7InByb2JsZW1faWQiOiIzOTU0IiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiQnJhaW5GKiprVk0iLCJkZXNjcmlwdGlvbiI6IjxwPkdpdmVuIGEgYnJhaW5mKiprIHByb2dyYW0sIGRldGVybWluZSB3aGV0aGVyIGl0IHRlcm1pbmF0ZXMgb3IgZW50ZXJzIGFuIGVuZGxlc3MgbG9vcC48XC9wPlxyXG5cclxuPHA+QSBicmFpbmYqKmsgaW50ZXJwcmV0ZXIgaGFzIGEgZGF0YSBhcnJheSAoY29uc2lzdGluZyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2Vycykgd2l0aCBhbiBpbmRleCwgdGhlIHNvIGNhbGxlZCAmcXVvdDtkYXRhIGluZGV4JnF1b3Q7OyB0aGUgZW50cnkgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgdGhlIGRhdGEgaW5kZXggaXMgdGhlIHNvIGNhbGxlZCAmcXVvdDtjdXJyZW50IGVudHJ5JnF1b3Q7LiBBIGJyYWluZioqayBwcm9ncmFtIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIGZvbGxvd2luZyBlaWdodCBpbnN0cnVjdGlvbnM6PFwvcD5cclxuXHJcbjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XHJcblx0PHRib2R5PlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGggc3R5bGU9XCJ3aWR0aDoyMCVcIj4tPFwvdGg+XHJcblx0XHRcdDx0ZCBzdHlsZT1cIndpZHRoOjgwJVwiPmRlY3JlYXNlIGN1cnJlbnQgZW50cnkgYnkgMSAobW9kdWxvIDI8c3VwPjg8XC9zdXA+KTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4rPFwvdGg+XHJcblx0XHRcdDx0ZD5pbmNyZWFzZSBjdXJyZW50IGVudHJ5IGJ5IDEgKG1vZHVsbyAyPHN1cD44PFwvc3VwPik8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+Jmx0OzxcL3RoPlxyXG5cdFx0XHQ8dGQ+ZGVjcmVhc2UgZGF0YSBpbmRleCBieSAxPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPiZndDs8XC90aD5cclxuXHRcdFx0PHRkPmluY3JlYXNlIGRhdGEgaW5kZXggYnkgMTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD5bPFwvdGg+XHJcblx0XHRcdDx0ZD5qdW1wIGJlaGluZCB0aGUgbWF0Y2hpbmcgXSwgaWYgdGhlIGN1cnJlbnQgZW50cnkgaXMgZXF1YWwgdG8gMDxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD5dPFwvdGg+XHJcblx0XHRcdDx0ZD5qdW1wIGJlaGluZCB0aGUgbWF0Y2hpbmcgWyBpZiB0aGUgY3VycmVudCBlbnRyeSBpcyBub3QgZXF1YWwgdG8gMDxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4uPFwvdGg+XHJcblx0XHRcdDx0ZD5wcmludCB0aGUgY3VycmVudCBlbnRyeSBhcyBjaGFyYWN0ZXI8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+LDxcL3RoPlxyXG5cdFx0XHQ8dGQ+cmVhZCBhIGNoYXJhY3RlciBhbmQgc2F2ZSBpdCBpbnRvIHRoZSBjdXJyZW50IGVudHJ5LiBPbiBlbmQgb2YgaW5wdXQgc2F2ZSAyNTUuPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHQ8XC90Ym9keT5cclxuPFwvdGFibGU+XHJcblxyXG48cD5JbnRlcnByZXRhdGlvbiBvZiBhIGJyYWluZioqayBwcm9ncmFtIHN0YXJ0cyBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24sIGFuZCB0ZXJtaW5hdGVzIGlmIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGxlYXZlcyB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtLiBBZnRlciBhbiBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCwgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgYWR2YW5jZXMgdG8gdGhlIGluc3RydWN0aW9uIHRvIHRoZSByaWdodCAoZXhjZXB0LCBvZiBjb3Vyc2UsIGlmIHRoZSBsb29wIGluc3RydWN0aW9ucyBbIG9yIF0gY2F1c2UgYSBqdW1wKS48XC9wPlxyXG5cclxuPHA+SW4gYWRkaXRpb24gdG8gdGhlIHByb2dyYW0sIHlvdSB3aWxsIGJlIGdpdmVuIHRoZSBzaXplIG9mIHRoZSBkYXRhIGFycmF5LiBUaGUgZW50cmllcyBvZiB0aGUgZGF0YSBhcnJheSBzaGFsbCBiZSB1bnNpZ25lZCA4LWJpdCBpbnRlZ2Vycywgd2l0aCB1c3VhbCBvdmVyLSBvciB1bmRlcmZsb3cgYmVoYXZpb3VyLiBBdCB0aGUgc3RhcnQgb2YgdGhlPFwvcD5cclxuXHJcbjxwPnByb2dyYW0sIHRoZSBkYXRhIGFycmF5IGVudHJpZXMgYW5kIHRoZSBkYXRhIGluZGV4IHNoYWxsIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIEluY3JlbWVudGluZyBvciBkZWNyZW1lbnRpbmcgdGhlIGRhdGEgaW5kZXggYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBkYXRhIGFycmF5IHNoYWxsIG1ha2UgaXQgcmUtZW50ZXIgdGhlIGRhdGEgYXJyYXkgYXQgdGhlIG90aGVyIGJvdW5kYXJ5OyBlLmcuIGRlY3JlbWVudGluZyB0aGUgZGF0YSBpbmRleCB3aGVuIGl0IGlzIHplcm8gc2hhbGwgc2V0IGl0IHRvIHRoZSBzaXplIG9mIHRoZSBkYXRhIGFycmF5IG1pbnVzIG9uZS48XC9wPlxyXG5cclxuPHA+VGhlIFsgYW5kIF0gaW5zdHJ1Y3Rpb25zIGRlZmluZSBsb29wcyBhbmQgYXJlIGFsbG93ZWQgdG8gbmVzdC4gRXZlcnkgZ2l2ZW4gcHJvZ3JhbSB3aWxsIGJlIHdlbGxmb3JtZWQsIGkuZS4gd2hlbiB0cmF2ZXJzaW5nIHRoZSBwcm9ncmFtIGZyb20gbGVmdCB0byByaWdodCwgdGhlIG51bWJlciBvZiBbIGluc3RydWN0aW9ucyBtaW51cyB0aGUgbnVtYmVyIG9mIF0gaW5zdHJ1Y3Rpb25zIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgb3IgZXF1YWwgemVybywgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gaXQgd2lsbCBiZSBlcXVhbCB0byB6ZXJvLjxcL3A+XHJcblxyXG48cD5Gb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBwcm9ibGVtLCBkaXNjYXJkIHRoZSBvdXRwdXQgb2YgdGhlIGludGVycHJldGVkIHByb2dyYW0uJm5ic3A7PFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGUgaW5wdXQgc3RhcnRzIHdpdGggYSBsaW5lIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzIHQgKDAgJmx0OyB0ICZsZTsgMjApLiBFYWNoIHRlc3QgY2FzZSBjb25zaXN0cyBvZiB0aHJlZSBsaW5lcy4gVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdGhyZWUgaW50ZWdlcnMgczxzdWI+bTxcL3N1Yj4sIHM8c3ViPmM8XC9zdWI+LCBzPHN1Yj5pPFwvc3ViPiwgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LCB0aGUgc2l6ZSBvZiB0aGUgcHJvZ3JhbSBjb2RlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgKDAgJmx0OyBzPHN1Yj5tPFwvc3ViPiAmbGU7IDEwMCAwMDA7IDAgJmx0OyBzPHN1Yj5jPFwvc3ViPiwgczxzdWI+aTxcL3N1Yj4gJmx0OyA0IDA5NikuIFRoZSBzZWNvbmQgbGluZSBjb250YWlucyB0aGUgYnJhaW5mKiprIHByb2dyYW0gY29kZSB0byBiZSBleGVjdXRlZDsgaXQgY29uc2lzdHMgb2YgczxzdWI+YzxcL3N1Yj4gY2hhcmFjdGVycy4gVGhlIHRoaXJkIGxpbmUgY29udGFpbnMgdGhlIGlucHV0IG9mIHRoZSBwcm9ncmFtLCBhcyB0ZXh0IChvbmx5IHByaW50YWJsZSwgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycykuPFwvcD5cclxuXHJcbjxwPk9uY2UgdGhlIHByb2dyYW0gaGFzIGNvbnN1bWVkIGFsbCBhdmFpbGFibGUgaW5wdXQsIHRoZSBpbnB1dCBpbnN0cnVjdGlvbiBzaGFsbCBzZXQgdGhlIGN1cnJlbnQgY2VsbCB0byAyNTUuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggdGVzdCBjYXNlLCBwcmludCBvbmUgbGluZSwgY29udGFpbmluZyBlaXRoZXIgJnF1b3Q7VGVybWluYXRlcyZxdW90OyBvciAmcXVvdDtMb29wcyZxdW90OywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHByb2dyYW0gZWl0aGVyIHRlcm1pbmF0ZXMgYWZ0ZXIgYSBmaW5pdGUgbnVtYmVyIG9mIHN0ZXBzLCBvciBlbnRlcnMgYW4gZW5kbGVzcyBsb29wLiBJZiB0aGUgcHJvZ3JhbSBsb29wcywgYWxzbyBwcmludCB0aGUgaW5kaWNlcyAoMC1iYXNlZCkgb2YgdGhlIHR3byBbIGFuZCB0aGUgXSBzeW1ib2xzIGluIHRoZSBjb2RlIGFycmF5IHRoYXQgY29ycmVzcG9uZCB0byB0aGUgZW5kbGVzcyBsb29wLiBZb3UgbWF5IHNhZmVseSBhc3N1bWUgdGhhdCBhZnRlciA1MCAwMDAgMDAwIGluc3RydWN0aW9ucywgYSBwcm9ncmFtIGVpdGhlciB0ZXJtaW5hdGVkIG9yIGhhbmdzIGluIGFuIGVuZGxlc3MgbG9vcCwgd2hpY2ggdGhlbiB3YXMgZXhlY3V0ZWQgYXQgbGVhc3Qgb25jZS4gRHVyaW5nIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBlbmRsZXNzIGxvb3AgYXQgbW9zdCA1MCAwMDAgMDAwIGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d