PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlRoZSBVVEYgdGVzdGluZyB0b29scyByZWZlcmVuY2U8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlL3N0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiPgo8bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bWwiIHRpdGxlPSJCb29zdCBUZXN0IExpYnJhcnkiPgo8bGluayByZWw9InVwIiBocmVmPSIuLi90ZXN0aW5nLXRvb2xzLmh0bWwiIHRpdGxlPSJUaGUgVVRGIHRlc3RpbmcgdG9vbHMgb3IgdGVzdGVyJ3MgdG9vbGJveCBmb3IgYWxsIG9jY2FzaW9ucyI+CjxsaW5rIHJlbD0icHJldiIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIiB0aXRsZT0iRmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBhbGdvcml0aG1zIj4KPGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi91c2FnZS1yZWNvbW1lbmRhdGlvbnMuaHRtbCIgdGl0bGU9IlRoZSB1bml0IHRlc3QgZnJhbWV3b3JrIHVzYWdlIHJlY29tbWVuZGF0aW9ucyI+CjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQxLjIiIHNyYz0iLi4vLi4vLi4vanMvYm9vc3QtdGVzdC5qcyI+PC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgo8dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIHdpZHRoPSIxMCUiPjxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgYWx0PSJIb21lIiB3aWR0aD0iMjI5IiBoZWlnaHQ9IjYxIiBib3JkZXI9IjAiIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZXN0L2RvY2Jvb2svaW1nL2Jvb3N0LnRlc3QubG9nby5wbmciPjwvYT48L3RkPgo8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0Ij4gJmd0OyA8YSBocmVmPSIuLi8uLi91dGYuaHRtbCI+VGhlIFVuaXQgVGVzdCBGcmFtZXdvcms8L2E+ICZndDsgPGEgaHJlZj0iLi4vdGVzdGluZy10b29scy5odG1sIj5UZXN0aW5nIHRvb2xzPC9hPjxhIGhyZWY9Ii4uL3VzYWdlLXJlY29tbWVuZGF0aW9ucy5odG1sIj4KICAgICAgJmd0OwogICAgICA8L2E+PGI+UmVmZXJlbmNlPC9iPgo8L3RkPgo8dGQ+PGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGhyZWY9ImZsb2F0aW5nX3BvaW50X2NvbXBhcmlzb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgaHJlZj0iLi4vdXNhZ2UtcmVjb21tZW5kYXRpb25zLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlIj48L2E+VGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IHRlc3RpbmcgdG9vbHMgcmVmZXJlbmNlPC9oND48L2Rpdj48L2Rpdj48L2Rpdj4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiI+CiAgICAgdmFyIGlkMjk4OTA2OwogICA8L3NjcmlwdD48dGFibGUgY2xhc3M9ImlubGluZS1yZWZlcmVuY2UiPjx0cj4KPHRkIGNsYXNzPSJpbmRleCIgdmFsaWduPSJ0b3AiPjx1bD4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0JJVFdJU0VfRVFVQUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0JJVFdJU0VfRVFVQUw8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0UnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFX0ZSQUNUSU9OJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRV9GUkFDVElPTjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19FUVVBTCcsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUw8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUxfQ09MTEVDVElPTicsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUxfQ09MTEVDVElPTjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19FWENFUFRJT04nLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VYQ0VQVElPTjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfR0U8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfR1QnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0dUPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19MRTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19MVCcsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfTFQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTUVTU0FHRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfTUVTU0FHRTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19ORScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfTkU8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTk9fVEhST1cnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X05PX1RIUk9XPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1BSRURJQ0FURScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfUFJFRElDQVRFPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1NNQUxMJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19TTUFMTDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19USFJPVycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfVEhST1c8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUX0VSUk9SJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfRVJST1I8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUX0ZBSUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF9GQUlMPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF9JU19ERUZJTkVEJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfSVNfREVGSU5FRDwvYT48L2xpPgo8L3VsPjwvdGQ+Cjx0ZCBjbGFzcz0iY29udGVudCIgdmFsaWduPSJ0b3AiPgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOIj48L2E+Qk9PU1RfV0FSTig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLIj48L2E+Qk9PU1RfQ0hFQ0soPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cHJlZGljYXRlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9SRVFVSVJFIj48L2E+Qk9PU1RfUkVRVUlSRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGVzZSB0b29scyBhcmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJlZGljYXRlIHZhbHVlLiBUaGUgb25seSBwYXJhbWV0ZXIgZm9yIHRoZXNlIHRvb2xzIGlzIGEgYm9vbGVhbiBwcmVkaWNhdGUKICAgICB2YWx1ZSB0aGF0IGdldHMgdmFsaWRhdGVkLiBJdCBjb3VsZCBiZSBhbnkgZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIGV2YWx1YXRlZCBhbmQgY29udmVydGVkIHRvIGJvb2xlYW4gdmFsdWUuIFRoZQogICAgIGV4cHJlc3Npb24gZ2V0cyBldmFsdWF0ZWQgb25seSBvbmNlLCBzbyBpdCdzIHNhZmUgdG8gcGFzcyBjb21wbGV4IGV4cHJlc3Npb24gZm9yIHZhbGlkYXRpb24uCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTM0Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDM4LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7IHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGludCBpPTI7CiAgICBCT09TVF9XQVJOKCBzaXplb2YoaW50KSA9PSBzaXplb2Yoc2hvcnQpICk7CiAgICBCT09TVF9DSEVDSyggaSA9PSAxICk7CiAgICBCT09TVF9SRVFVSVJFKCBpICZndDsgNSApOwogICAgQk9PU1RfQ0hFQ0soIGkgPT0gNiApOyAvLyB3aWxsIG5ldmVyIHJlYWNoIHRoaXMgY2hlY2sKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlMzQuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY1OTc2NiIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlMzQtb3V0cHV0JywgJ2lkNjU5NzY2JywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGUzNC1vdXRwdXQiPiZndDsgZXhhbXBsZSAtLWxvZ19sZXZlbD13YXJuaW5nClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoOSk6IHdhcm5pbmcgaW4gInRlc3QiOiBjb25kaXRpb24gc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHNob3J0KSBpcyBub3Qgc2F0aXNmaWVkCnRlc3QuY3BwKDEwKTogZXJyb3IgaW4gInRlc3QiOiBjaGVjayBpID09IDEgZmFpbGVkCnRlc3QuY3BwKDExKTogZmF0YWwgZXJyb3IgaW4gInRlc3QiOiBjcml0aWNhbCBjaGVjayBpICZndDsgNSBmYWlsZWQKCioqKiAyIGZhaWx1cmVzIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHNwYW4gY2xhc3M9ImlubGluZS1yZWYtc2VlLWFsc28iPlNlZSBhbHNvOiA8L3NwYW4+CiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19NRVNTQUdFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19NRVNTQUdFPC9hPgogICAgPC9kaXY+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19CSVRXSVNFX0VRVUFMIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9CSVRXSVNFX0VRVUFMIj48L2E+Qk9PU1RfV0FSTl9CSVRXSVNFX0VRVUFMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19CSVRXSVNFX0VRVUFMIj48L2E+Qk9PU1RfQ0hFQ0tfQklUV0lTRV9FUVVBTCg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfUkVRVUlSRV9CSVRXSVNFX0VRVUFMIj48L2E+Qk9PU1RfUkVRVUlSRV9CSVRXSVNFX0VRVUFMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlc2UgdG9vbHMgYXJlIHVzZWQgdG8gcGVyZm9ybSBiaXR3aXNlIGNvbXBhcmlzb24gb2YgdHdvIHZhbHVlcy4gVGhlIGNoZWNrIHNob3dzIGFsbCBwb3NpdGlvbnMgd2hlcmUgbGVmdCBhbmQgCiAgICAgcmlnaHQgdmFsdWUncyBiaXRzIG1pc21hdGNoLgogICAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgbGVmdCBjb21wYXJlZCB2YWx1ZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHJpZ2h0IGNvbXBhcmVkIHZhbHVlLiBQYXJhbWV0ZXJzIGFyZQogICAgIG5vdCByZXF1aXJlZCB0byBiZSBvZiB0aGUgc2FtZSB0eXBlLCBidXQgd2FybmluZyBpcyBpc3N1ZWQgaWYgdGhlaXIgdHlwZSdzIHNpemUgZG9lcyBub3QgY29pbmNpZGUuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTMzIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDM5LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X0JJVFdJU0VfRVFVQUwgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgQk9PU1RfQ0hFQ0tfQklUV0lTRV9FUVVBTCggKGNoYXIpMHgyNiwgMHgwNCApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUzMy5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjU5OTQwIiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUzMy1vdXRwdXQnLCAnaWQ2NTk5NDAnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTMzLW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCnRlc3QuY3BwKDgpOiBlcnJvciBpbiAidGVzdCI6IGNoZWNrIChjaGFyKTB4MjYgPS49IDB4MDQgZmFpbGVkLiAgICAgICAgICAgICAgICAgCk1pc21hdGNoIGluIGEgcG9zaXRpb24gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCk1pc21hdGNoIGluIGEgcG9zaXRpb24gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCk9wZXJhbmRzIGJpdCBzaXplcyBtaXNtYXRjaDogOCAhPSAzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIgPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19FUVVBTDwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0UiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOX0NMT1NFIj48L2E+Qk9PU1RfV0FSTl9DTE9TRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG9sZXJhbmNlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19DTE9TRSI+PC9hPkJPT1NUX0NIRUNLX0NMT1NFKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50b2xlcmFuY2U8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfQ0xPU0UiPjwvYT5CT09TVF9SRVFVSVJFX0NMT1NFKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50b2xlcmFuY2U8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGVzZSB0b29scyBhcmUgdXNlZCB0byBjaGVjayBvbiBjbG9zZW5lc3MgdXNpbmcgc3Ryb25nIHJlbGF0aW9uc2hpcCBkZWZpbmVkIGJ5IHRoZSBwcmVkaWNhdGUgCiAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5jaGVja19pc19jbG9zZTwvY29kZT4oIGxlZnQsIHJpZ2h0LCB0b2xlcmFuY2UgKS4gVG8gY2hlY2sgZm9yIHRoZSB3ZWFrIHJlbGF0aW9uc2hpcCB1c2UgCiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19QUkVESUNBVEUnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1BSRURJQ0FURTwvYT4gZmFtaWx5IG9mIHRvb2xzIHdpdGggZXhwbGljaXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5jaGVja19pc19jbG9zZTwvY29kZT4KICAgICBpbnZvY2F0aW9uLgogICAgPC9wPgo8cD4KICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+IGNvbXBhcmVkIHZhbHVlLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgCiAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4gY29tcGFyZWQgdmFsdWUuIExhc3QgdGhpcmQgcGFyYW1ldGVyIGRlZmluZXMgdGhlIHRvbGVyYW5jZSBmb3IgdGhlIGNvbXBhcmlzb24gaW4gCiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImZsb2F0aW5nX3BvaW50X2NvbXBhcmlzb24uaHRtbCN1dGYudGVzdGluZy10b29scy5mcHYtY29tcGFyaXNvbi50b2xlcmFuY2Utc2VsZWN0aW9uIiB0aXRsZT0iVG9sZXJhbmNlIHNlbGVjdGlvbiBjb25zaWRlcmF0aW9ucyI+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cGVyY2VudGFnZSB1bml0czwvc3Ryb25nPjwvc3Bhbj48L2E+LgogICAgPC9wPgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgICAgSXQgaXMgcmVxdWlyZWQgZm9yIGxlZnQgYW5kIHJpZ2h0IHBhcmFtZXRlcnMgdG8gYmUgb2YgdGhlIHNhbWUgZmxvYXRpbmcgcG9pbnQgdHlwZS4gWW91IHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IAogICAgICByZXNvbHZlIGFueSB0eXBlIG1pc21hdGNoIHRvIHNlbGVjdCB3aGljaCB0eXBlIHRvIHVzZSBmb3IgY29tcGFyaXNvbi4KICAgICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgICAgTm90ZSB0aGF0IHRvIHVzZSB0aGVzZSB0b29scyB5b3UgbmVlZCB0byBpbmNsdWRlIGFkZGl0aW9uYWwgaGVhZGVyIGZsb2F0aW5nX3BvaW50X2NvbXBhcmlzb24uaHBwLiAKICAgICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGU0MiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA0MC6gQk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRSB1c2FnZSB3aXRoIHZlcnkgc21hbGwgdmFsdWVzPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBkb3VibGUgdjEgPSAxLjIzNDU2ZS0xMDsKICAgIGRvdWJsZSB2MiA9IDEuMjM0NTdlLTEwOwoKICAgIEJPT1NUX0NIRUNLX0NMT1NFKCB2MSwgdjIsIDAuMDAwMSApOwogICAgLy8gQWJzb2x1dGUgdmFsdWUgb2YgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byB2YWx1ZXMgaXMgMWUtMTUuIFRoZXkgc2VlbXMgCiAgICAvLyB0byBiZSB2ZXJ5IGNsb3NlLiBCdXQgd2Ugd2FudCB0byBjaGVja3MgdGhhdCB0aGVzZSB2YWx1ZXMgZGlmZmVyIG5vIG1vcmUgdGhlbiAwLjAwMDElCiAgICAvLyBvZiB0aGVpciB2YWx1ZS4gQW5kIHRoaXMgdGVzdCB3aWxsIGZhaWwgYXQgdG9sZXJhbmNlIHN1cHBsaWVkLgp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU0Mi5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYwMTg4IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU0Mi1vdXRwdXQnLCAnaWQ2NjAxODgnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTQyLW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTIpOiBlcnJvciBpbiAidGVzdCI6IGRpZmZlcmVuY2UgYmV0d2VlbiB2MXsxLjIzNDU2ZS0wMTB9IGFuZCB2MnsxLjIzNDU3ZS0wMTB9IGV4Y2VlZHMgMC4wMDAxJQoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTQzIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDQxLqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFIHVzYWdlIHdpdGggdmVyeSBiaWcgdmFsdWVzPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBkb3VibGUgdjEgPSAxLjIzNDU2ZTI4OwogICAgZG91YmxlIHYyID0gMS4yMzQ1N2UyODsKCiAgICBCT09TVF9SRVFVSVJFX0NMT1NFKCB2MSwgdjIsIDAuMDAxICk7CiAgICAvLyBBYnNvbHV0ZSB2YWx1ZSBvZiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIHZhbHVlcyBpcyAxZSsyMy4KICAgIC8vIEJ1dCB3ZSBhcmUgaW50ZXJlc3RlZCBvbmx5IHRoYXQgaXQgZG9lcyBub3QgZXhlZWQgMC4wMDElIG9mIGEgdmFsdWVzIGNvbXBhcmVkCiAgICAvLyBBbmQgdGhpcyB0ZXN0IHdpbGwgcGFzcy4KfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlNDMuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY2MDI3MSIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlNDMtb3V0cHV0JywgJ2lkNjYwMjcxJywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGU0My1vdXRwdXQiPiZndDsgZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCgoqKiogTm8gZXJyb3JzIGRldGVjdGVkCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHNwYW4gY2xhc3M9ImlubGluZS1yZWYtc2VlLWFsc28iPlNlZSBhbHNvOiA8L3NwYW4+CiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRV9GUkFDVElPTicsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0VfRlJBQ1RJT048L2E+LCA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1NNQUxMJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19TTUFMTDwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMPC9hPiwKICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIiB0aXRsZT0iRmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBhbGdvcml0aG1zIj5GbG9hdGluZyBwb2ludCBjb21wYXJpc29uIGFsZ29yaXRobXM8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFX0ZSQUNUSU9OIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9DTE9TRV9GUkFDVElPTiI+PC9hPkJPT1NUX1dBUk5fQ0xPU0VfRlJBQ1RJT04oPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnRvbGVyYW5jZTwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfQ0hFQ0tfQ0xPU0VfRlJBQ1RJT04iPjwvYT5CT09TVF9DSEVDS19DTE9TRV9GUkFDVElPTig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG9sZXJhbmNlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9SRVFVSVJFX0NMT1NFX0ZSQUNUSU9OIj48L2E+Qk9PU1RfUkVRVUlSRV9DTE9TRV9GUkFDVElPTig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG9sZXJhbmNlPC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlc2UgdG9vbHMgYXJlIHVzZWQgdG8gY2hlY2sgb24gY2xvc2VuZXNzIHVzaW5nIHN0cm9uZyByZWxhdGlvbnNoaXAgZGVmaW5lZCBieSB0aGUgcHJlZGljYXRlIAogICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Y2hlY2tfaXNfY2xvc2U8L2NvZGU+KCBsZWZ0LCByaWdodCwgdG9sZXJhbmNlICkuIFRvIGNoZWNrIGZvciB0aGUgd2VhayByZWxhdGlvbnNoaXAgdXNlIAogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfUFJFRElDQVRFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19QUkVESUNBVEU8L2E+IGZhbWlseSBvZiB0b29scyB3aXRoIGV4cGxpY2l0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Y2hlY2tfaXNfY2xvc2U8L2NvZGU+CiAgICAgaW52b2NhdGlvbi4KICAgIDwvcD4KPHA+CiAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiBjb21wYXJlZCB2YWx1ZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIAogICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+IGNvbXBhcmVkIHZhbHVlLiBMYXN0IHRoaXJkIHBhcmFtZXRlciBkZWZpbmVzIHRoZSB0b2xlcmFuY2UgZm9yIHRoZSBjb21wYXJpc29uIGluIAogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJmbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmh0bWwjdXRmLnRlc3RpbmctdG9vbHMuZnB2LWNvbXBhcmlzb24udG9sZXJhbmNlLXNlbGVjdGlvbiIgdGl0bGU9IlRvbGVyYW5jZSBzZWxlY3Rpb24gY29uc2lkZXJhdGlvbnMiPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnBlcmNlbnRhZ2UgdW5pdHM8L3N0cm9uZz48L3NwYW4+PC9hPi4KICAgIDwvcD4KPGRpdiBjbGFzcz0ibm90ZSI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+Cjx0cj4KPHRkIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUiPjxpbWcgYWx0PSJbTm90ZV0iIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25vdGUucG5nIj48L3RkPgo8dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CiAgICAgIEl0IGlzIHJlcXVpcmVkIGZvciBsZWZ0IGFuZCByaWdodCBwYXJhbWV0ZXJzIHRvIGJlIG9mIHRoZSBzYW1lIGZsb2F0aW5nIHBvaW50IHR5cGUuIFlvdSB3aWxsIG5lZWQgdG8gZXhwbGljaXRseSAKICAgICAgcmVzb2x2ZSBhbnkgdHlwZSBtaXNtYXRjaCB0byBzZWxlY3Qgd2hpY2ggdHlwZSB0byB1c2UgZm9yIGNvbXBhcmlzb24uCiAgICAgPC9wPjwvdGQ+PC90cj4KPC90YWJsZT48L2Rpdj4KPGRpdiBjbGFzcz0ibm90ZSI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+Cjx0cj4KPHRkIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUiPjxpbWcgYWx0PSJbTm90ZV0iIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25vdGUucG5nIj48L3RkPgo8dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CiAgICAgIE5vdGUgdGhhdCB0byB1c2UgdGhlc2UgdG9vbHMgeW91IG5lZWQgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGhlYWRlciBmbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmhwcC4gCiAgICAgPC9wPjwvdGQ+PC90cj4KPC90YWJsZT48L2Rpdj4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlNDQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNDIuoEJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0VfRlJBQ1RJT04gdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9mbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGRvdWJsZSB2MSA9IDEuMTExZS0xMDsKICAgIGRvdWJsZSB2MiA9IDEuMTEyZS0xMDsKCiAgICBCT09TVF9DSEVDS19DTE9TRV9GUkFDVElPTiggdjEsIHYyLCAwLjAwMDg5OTkgKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlNDQuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY2MDUzNyIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlNDQtb3V0cHV0JywgJ2lkNjYwNTM3JywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGU0NC1vdXRwdXQiPiZndDsgZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEyKTogZXJyb3IgaW4gInRlc3QiOiBkaWZmZXJlbmNlIGJldHdlZW4gdjF7MS4xMTFlLTAxMH0gYW5kIHYyezEuMTEyZS0wMTB9IGV4Y2VlZHMgMC4wMDA4OTk5CgoqKiogMSBmYWlsdXJlIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHNwYW4gY2xhc3M9ImlubGluZS1yZWYtc2VlLWFsc28iPlNlZSBhbHNvOiA8L3NwYW4+CiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0U8L2E+LCA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1NNQUxMJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19TTUFMTDwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMPC9hPiwKICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIiB0aXRsZT0iRmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBhbGdvcml0aG1zIj5GbG9hdGluZyBwb2ludCBjb21wYXJpc29uIGFsZ29yaXRobXM8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9FUVVBTCI+PC9hPkJPT1NUX1dBUk5fRVFVQUwoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLX0VRVUFMIj48L2E+Qk9PU1RfQ0hFQ0tfRVFVQUwoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfRVFVQUwiPjwvYT5CT09TVF9SRVFVSVJFX0VRVUFMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgQ2hlY2sgcGVyZm9ybWVkIGJ5IHRoZXNlIHRvb2xzIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgcGVyZm9ybWVkIGJ5IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPiggbGVmdCA9PSByaWdodCApLgogICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIG1pc21hdGNoZWQgdmFsdWVzIGFyZSByZXBvcnRlZCBhcyB3ZWxsLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgICAgSXQgaXMgYmFkIGlkZWEgdG8gdXNlIHRoZXNlIHRvb2xzIHRvIGNvbXBhcmUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLiBVc2UgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0U8L2E+IG9yIAogICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFX0ZSQUNUSU9OJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRV9GUkFDVElPTjwvYT4gdG9vbHMgaW5zdGVhZC4KICAgICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGUzNSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA0My6gQk9PU1RfJmx0O2xldmVsJmd0O19FUVVBTCB1c2FnZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBpbnQgaSA9IDI7CiAgICBpbnQgaiA9IDE7CiAgICBCT09TVF9SRVFVSVJFX0VRVUFMKCBpLCBqICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTM1LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjA3NDEiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTM1LW91dHB1dCcsICdpZDY2MDc0MScsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMzUtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUKUnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgxMCk6IGZhdGFsIGVycm9yIGluICJ0ZXN0IjogY3JpdGljYWwgY2hlY2sgaSA9PSBqIGZhaWxlZCBbMiAhPSAxXQoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPiwgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0U8L2E+LCA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X05FJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19ORTwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUxfQ09MTEVDVElPTiI+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX1dBUk5fRVFVQUxfQ09MTEVDVElPTiI+PC9hPkJPT1NUX1dBUk5fRVFVQUxfQ09MTEVDVElPTig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0X2JlZ2luPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0X2VuZDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHRfYmVnaW48L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0X2VuZDwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfQ0hFQ0tfRVFVQUxfQ09MTEVDVElPTiI+PC9hPkJPT1NUX0NIRUNLX0VRVUFMX0NPTExFQ1RJT04oPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdF9iZWdpbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdF9lbmQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0X2JlZ2luPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodF9lbmQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfRVFVQUxfQ09MTEVDVElPTiI+PC9hPkJPT1NUX1JFUVVJUkVfRVFVQUxfQ09MTEVDVElPTig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0X2JlZ2luPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0X2VuZDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHRfYmVnaW48L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0X2VuZDwvZW0+PC9zcGFuPik8L3ByZT4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICAgIFRoZXNlIHRvb2xzIGFyZSB1c2VkIHRvIHBlcmZvcm0gYW4gZWxlbWVudCBieSBlbGVtZW50IGNvbXBhcmlzb24gb2YgdHdvIGNvbGxlY3Rpb25zLiBUaGV5IHByaW50IGFsbCBtaXNtYXRjaGVkIAogICAgIHBvc2l0aW9ucywgY29sbGVjdGlvbiBlbGVtZW50cyBhdCB0aGVzZSBwb3NpdGlvbnMgYW5kIGNoZWNrIHRoYXQgdGhlIGNvbGxlY3Rpb25zIGhhdmUgdGhlIHNhbWUgc2l6ZS4gVGhlIGZpcnN0IHR3byAKICAgICBwYXJhbWV0ZXJzIGRlc2lnbmF0ZSBiZWdpbiBhbmQgZW5kIG9mIHRoZSBmaXJzdCBjb2xsZWN0aW9uLiBUaGUgdHdvIHBhcmFtZXRlcnMgZGVzaWduYXRlIGJlZ2luIGFuZCBlbmQgb2YgdGhlIAogICAgIHNlY29uZCBjb2xsZWN0aW9uLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGUzNiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA0NC6gQk9PU1RfJmx0O2xldmVsJmd0O19FUVVBTF9DT0xMRUNUSU9OIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGludCBjb2wxIFtdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CiAgICBpbnQgY29sMiBbXSA9IHsgMSwgMiwgNCwgNCwgNSwgNywgNyB9OwoKICAgIEJPT1NUX0NIRUNLX0VRVUFMX0NPTExFQ1RJT05TKCBjb2wxLCBjb2wxKzcsIGNvbDIsIGNvbDIrNyApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUzNi5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYwOTQyIiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUzNi1vdXRwdXQnLCAnaWQ2NjA5NDInLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTM2LW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTEpOiBlcnJvciBpbiAidGVzdCI6IGNoZWNrIHsgY29sMSwgY29sMSs3IH0gPT0geyBjb2wyLCBjb2wyKzcgfSBmYWlsZWQuIApNaXNtYXRjaCBpbiBhIHBvc2l0aW9uIDI6IDMgIT0gNApNaXNtYXRjaCBpbiBhIHBvc2l0aW9uIDU6IDYgIT0gNwoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMPC9hPgogICAgPC9kaXY+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19FWENFUFRJT04iPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOX0VYQ0VQVElPTiI+PC9hPkJPT1NUX1dBUk5fRVhDRVBUSU9OKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4cHJlc3Npb248L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4Y2VwdGlvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cHJlZGljYXRlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19FWENFUFRJT04iPjwvYT5CT09TVF9DSEVDS19FWENFUFRJT04oPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhjZXB0aW9uPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfRVhDRVBUSU9OIj48L2E+Qk9PU1RfUkVRVUlSRV9FWENFUFRJT04oPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhjZXB0aW9uPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGVzZSB0b29scyBhcmUgdXNlZCB0byBwZXJmb3JtIGFuIGV4Y2VwdGlvbiBkZXRlY3Rpb24gYW5kIHZhbGlkYXRpb24gY2hlY2suIFRvb2xzIGV4ZWN1dGUgdGhlIHN1cHBsaWVkIGV4cHJlc3Npb24gCiAgICAgYW5kIHZhbGlkYXRlIHRoYXQgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiBzdXBwbGllZCBjbGFzcyAob3IgdGhlIG9uZSBkZXJpdmVkIGZyb20gaXQpIHRoYXQgY29tcGxpZXMgd2l0aCB0aGUgCiAgICAgc3VwcGxpZWQgcHJlZGljYXRlLiBJZiB0aGUgZXhwcmVzc2lvbiB0aHJvd3MgYW55IG90aGVyIHVucmVsYXRlZCBleGNlcHRpb24sIGRvZXNuJ3QgdGhyb3cgYXQgYWxsIG9yIAogICAgIHByZWRpY2F0ZSBldmFsdWF0ZXMgdG8gZmFsc2UsIGNoZWNrIGZhaWxzLiBJbiBjb21wYXJpc29uIHdpdGggPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19USFJPVycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfVEhST1c8L2E+IHRvb2xzIHRoZXNlCiAgICAgYWxsb3cgcGVyZm9ybWluZyBtb3JlIGZpbmUtZ3JhaW5lZCBjaGVja3MuIEZvciBleGFtcGxlOiBtYWtlIHN1cmUgdGhhdCBhbiBleHBlY3RlZCBleGNlcHRpb24gaGFzIHNwZWNpZmljIAogICAgIGVycm9yIG1lc3NhZ2UuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTM3Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDQ1LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VYQ0VQVElPTiB1c2FnZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKc3RydWN0IG15X2V4Y2VwdGlvbiB7CiAgICBleHBsaWNpdCBteV9leGNlcHRpb24oIGludCBlYyA9IDAgKSA6IG1fZXJyb3JfY29kZSggZWMgKSB7fQoKICAgIGludCBtX2Vycm9yX2NvZGU7Cn07Cgpib29sIGlzX2NyaXRpY2FsKCBteV9leGNlcHRpb24gY29uc3QmYW1wOyBleCApIHsgcmV0dXJuIGV4Lm1fZXJyb3JfY29kZSAmbHQ7IDA7IH0KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgQk9PU1RfQ0hFQ0tfRVhDRVBUSU9OKCB0aHJvdyBteV9leGNlcHRpb24oIDEgKSwgbXlfZXhjZXB0aW9uLCBpc19jcml0aWNhbCApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUzNy5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYxMTMwIiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUzNy1vdXRwdXQnLCAnaWQ2NjExMzAnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTM3LW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTYpOiBlcnJvciBpbiAidGVzdCI6IGluY29ycmVjdCBleGNlcHRpb24gbXlfZXhjZXB0aW9uIGlzIGNhdWdodAoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfVEhST1cnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1RIUk9XPC9hPgogICAgPC9kaXY+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HRSI+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX1dBUk5fR0UiPjwvYT5CT09TVF9XQVJOX0dFKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19HRSI+PC9hPkJPT1NUX0NIRUNLX0dFKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9SRVFVSVJFX0dFIj48L2E+Qk9PU1RfUkVRVUlSRV9HRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPik8L3ByZT4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICAgIENoZWNrIHBlcmZvcm1lZCBieSB0aGVzZSB0b29scyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHBlcmZvcm1lZCBieSA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7JywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0OzwvYT4oIGxlZnQgJmd0Oz0gcmlnaHQgKS4KICAgICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBhcmd1bWVudCB2YWx1ZXMgYXJlIHJlcG9ydGVkIGFzIHdlbGwuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTU3Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDQ2LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X0dFIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGludCBpID0gMTsKICAgIGludCBqID0gNDsKICAgIEJPT1NUX0NIRUNLX0dFKCBpLCBqICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTU3LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjEyOTgiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTU3LW91dHB1dCcsICdpZDY2MTI5OCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlNTctb3V0cHV0Ij4mZ3Q7ZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEwKTogZXJyb3IgaW4gInRlc3QiOiBjaGVjayBpICZndDs9IGogZmFpbGVkIFsxICZsdDsgNF0KCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19MRTwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTFQnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xUPC9hPiwgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HVCcsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfR1Q8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0dUIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9HVCI+PC9hPkJPT1NUX1dBUk5fR1QoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLX0dUIj48L2E+Qk9PU1RfQ0hFQ0tfR1QoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfR1QiPjwvYT5CT09TVF9SRVFVSVJFX0dUKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgQ2hlY2sgcGVyZm9ybWVkIGJ5IHRoZXNlIHRvb2xzIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgcGVyZm9ybWVkIGJ5IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPiggbGVmdCAmZ3Q7PSByaWdodCApLgogICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhcmUgcmVwb3J0ZWQgYXMgd2VsbC4KICAgIDwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlNTgiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNDcuoEJPT1NUXyZsdDtsZXZlbCZndDtfR1QgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgaW50IGkgPSAyOwogICAgaW50IGogPSAxNDsKICAgIEJPT1NUX0NIRUNLX0dUKCBpLCBqICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTU4LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjE0NzQiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTU4LW91dHB1dCcsICdpZDY2MTQ3NCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlNTgtb3V0cHV0Ij4mZ3Q7ZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEwKTogZXJyb3IgaW4gInRlc3QiOiBjaGVjayBpICZndDsgaiBmYWlsZWQgWzIgJmx0OyAxNF0KCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19MRTwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTFQnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xUPC9hPiwgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfR0U8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xFIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9MRSI+PC9hPkJPT1NUX1dBUk5fTEUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLX0xFIj48L2E+Qk9PU1RfQ0hFQ0tfTEUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfTEUiPjwvYT5CT09TVF9SRVFVSVJFX0xFKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgQ2hlY2sgcGVyZm9ybWVkIGJ5IHRoZXNlIHRvb2xzIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgcGVyZm9ybWVkIGJ5IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPiggbGVmdCAmbHQ7PSByaWdodCApLgogICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhcmUgcmVwb3J0ZWQgYXMgd2VsbC4KICAgIDwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlNTUiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNDguoEJPT1NUXyZsdDtsZXZlbCZndDtfTEUgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgaW50IGkgPSA5OwogICAgaW50IGogPSA2OwogICAgQk9PU1RfQ0hFQ0tfTEUoIGksIGogKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlNTUuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY2MTY1MSIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlNTUtb3V0cHV0JywgJ2lkNjYxNjUxJywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGU1NS1vdXRwdXQiPiZndDtleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTApOiBlcnJvciBpbiAidGVzdCI6IGNoZWNrIGkgJmx0Oz0gaiBmYWlsZWQgWzkgJmd0OyA2XQoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTFQnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xUPC9hPiwgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HRScsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfR0U8L2E+LCA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0dUJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19HVDwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfTFQiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOX0xUIj48L2E+Qk9PU1RfV0FSTl9MVCg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfQ0hFQ0tfTFQiPjwvYT5CT09TVF9DSEVDS19MVCg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5sZWZ0PC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yaWdodDwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfUkVRVUlSRV9MVCI+PC9hPkJPT1NUX1JFUVVJUkVfTFQoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBDaGVjayBwZXJmb3JtZWQgYnkgdGhlc2UgdG9vbHMgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBwZXJmb3JtZWQgYnkgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0OycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDs8L2E+KCBsZWZ0ICZsdDsgcmlnaHQgKS4KICAgICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBhcmd1bWVudCB2YWx1ZXMgYXJlIHJlcG9ydGVkIGFzIHdlbGwuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTU2Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDQ5LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xUIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGludCBpID0gNzsKICAgIGludCBqID0gNzsKICAgIEJPT1NUX0NIRUNLX0xUKCBpLCBqICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTU2LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjE4MjciIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTU2LW91dHB1dCcsICdpZDY2MTgyNycsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlNTYtb3V0cHV0Ij4mZ3Q7ZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEwKTogZXJyb3IgaW4gInRlc3QiOiBjaGVjayBpICZsdDsgaiBmYWlsZWQgWzcgJmd0Oz0gN10KCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0xFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19MRTwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfR0UnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0dFPC9hPiwgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19HVCcsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtfR1Q8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X01FU1NBR0UiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOX01FU1NBR0UiPjwvYT5CT09TVF9XQVJOX01FU1NBR0UoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cHJlZGljYXRlPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tZXNzYWdlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19NRVNTQUdFIj48L2E+Qk9PU1RfQ0hFQ0tfTUVTU0FHRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1lc3NhZ2U8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfTUVTU0FHRSI+PC9hPkJPT1NUX1JFUVVJUkVfTUVTU0FHRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1lc3NhZ2U8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGVzZSB0b29scyBwZXJmb3JtIGV4YWN0bHkgdGhlIHNhbWUgY2hlY2sgYXMgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0OycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDs8L2E+IHRvb2xzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgCiAgICAgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIGVycm9yL2NvbmZpcm0gbWVzc2FnZSB0aGVzZSB1c2UgdGhlIHN1cHBsaWVkIG9uZS4KICAgIDwvcD4KPHA+CiAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgYm9vbGVhbiBleHByZXNzaW9uLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgbWVzc2FnZSByZXBvcnRlZCBpbiBjYXNlIG9mIGNoZWNrIAogICAgIGZhaWx1cmUuIFRoZSBtZXNzYWdlIGFyZ3VtZW50IGNhbiBiZSBjb25zdHJ1Y3RlZCBvZiBjb21wb25lbnRzIG9mIGFueSB0eXBlIHN1cHBvcnRpbmcgdGhlIAogICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RkOjpvc3RyZWFtJmFtcDsgb3BlcmF0b3ImbHQ7Jmx0OyhzdGQ6Om9zdHJlYW0mYW1wOyk8L2NvZGU+LgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGUzOCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA1MC6gQk9PU1RfJmx0O2xldmVsJmd0O19NRVNTQUdFIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgojaW5jbHVkZSAmbHQ7Y21hdGgmZ3Q7CgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGRvdWJsZSByZXMgPSBzdGQ6OnNpbiggNDUuICk7CgogICAgQk9PU1RfV0FSTl9NRVNTQUdFKCByZXMgJmd0OyAxLCAic2luKDQ1KXsiICZsdDsmbHQ7IHJlcyAmbHQ7Jmx0OyAifSBpcyAmbHQ7PSAxLiBIbW0uLiBTdHJhbmdlLiAiICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTM4LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjIwMjAiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTM4LW91dHB1dCcsICdpZDY2MjAyMCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMzgtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUgLS1sb2dfbGV2ZWw9d2FybmluZwpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEyKTogd2FybmluZyBpbiAidGVzdCI6IHNpbig0NSl7MC44NTA5MDR9IGlzICZsdDs9IDEuIEhtbS4uIFN0cmFuZ2UuIAoKKioqIE5vIGVycm9ycyBkZXRlY3RlZDwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHNwYW4gY2xhc3M9ImlubGluZS1yZWYtc2VlLWFsc28iPlNlZSBhbHNvOiA8L3NwYW4+CiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0OycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDs8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X05FIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9ORSI+PC9hPkJPT1NUX1dBUk5fTkUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLX05FIj48L2E+Qk9PU1RfQ0hFQ0tfTkUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bGVmdDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmlnaHQ8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfTkUiPjwvYT5CT09TVF9SRVFVSVJFX05FKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxlZnQ8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJpZ2h0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgQ2hlY2sgcGVyZm9ybWVkIGJ5IHRoZXNlIHRvb2xzIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgcGVyZm9ybWVkIGJ5IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPiggbGVmdCAhPSByaWdodCApLgogICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIG1hdGNoZWQgdmFsdWVzIGFyZSByZXBvcnRlZCBhcyB3ZWxsLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGU1NCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA1MS6gQk9PU1RfJmx0O2xldmVsJmd0O19ORSB1c2FnZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBpbnQgaSA9IDM7CiAgICBpbnQgaiA9IDM7CiAgICBCT09TVF9DSEVDS19ORSggaSwgaiApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU1NC5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYyMTg1IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU1NC1vdXRwdXQnLCAnaWQ2NjIxODUnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTU0LW91dHB1dCI+Jmd0O2V4YW1wbGUKUnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgxMCk6IGVycm9yIGluICJ0ZXN0IjogY2hlY2sgaSAhPSBqIGZhaWxlZCBbMyA9PSAzXQoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfRVFVQUwnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0VRVUFMPC9hPgogICAgPC9kaXY+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0O19OT19USFJPVyI+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX1dBUk5fTk9fVEhST1ciPjwvYT5CT09TVF9XQVJOX05PX1RIUk9XKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4cHJlc3Npb248L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX0NIRUNLX05PX1RIUk9XIj48L2E+Qk9PU1RfQ0hFQ0tfTk9fVEhST1coPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfUkVRVUlSRV9OT19USFJPVyI+PC9hPkJPT1NUX1JFUVVJUkVfTk9fVEhST1coPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPik8L3ByZT4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICAgIFRoZXNlIHRvb2xzIGFyZSB1c2VkIHRvIHBlcmZvcm0gYSAibm8gdGhyb3ciIGNoZWNrLiBUb29scyBleGVjdXRlIHRoZSBzdXBwbGllZCBleHByZXNzaW9uIGFuZCB2YWxpZGF0ZSB0aGF0IGl0IGRvZXMKICAgICBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnMuIEVycm9yIHdvdWxkIGJlIHJlcG9ydGVkIGJ5IHRoZSBmcmFtZXdvcmsgZXZlbiBpZiB0aGUgc3RhdGVtZW50IGFwcGVhciBkaXJlY3RseSBpbiB0ZXN0CiAgICAgY2FzZSBib2R5IGFuZCB0aHJvdyBhbnkgZXhjZXB0aW9uLiBCdXQgdGhlc2UgdG9vbHMgYWxsb3cgcHJvY2VlZGluZyBmdXJ0aGVyIHdpdGggdGVzdCBjYXNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIDwvcD4KPHA+CiAgICAgSWYgY2hlY2sgaXMgc3VjY2Vzc2Z1bCwgdG9vbHMgbWF5IHByb2R1Y2UgYSBjb25maXJtYXRpb24gbWVzc2FnZSwgaW4gb3RoZXIgY2FzZSB0aGV5IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSBpbiAKICAgICBhIGZvcm0gImVycm9yIGluICZsdDt0ZXN0IGNhc2UgbmFtZSZndDtleGNlcHRpb24gd2FzIHRocm93biBieSAmbHQ7ZXhwcmVzc2lvbiZndDsuCiAgICA8L3A+CjxwPgogICAgIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhbiBleHByZXNzaW9uIHRvIGV4ZWN1dGUuIFlvdSBjYW4gdXNlIGRvLXdoaWxlKDApIGJsb2NrIGlmIHlvdSB3YW50IHRvIGV4ZWN1dGUgbW9yZSB0aGFuIG9uZQogICAgIHN0YXRlbWVudC4KICAgIDwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlMzkiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNTIuoEJPT1NUXyZsdDtsZXZlbCZndDtfTk9fVEhST1cgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCmNsYXNzIG15X2V4Y2VwdGlvbnt9OwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBCT09TVF9DSEVDS19OT19USFJPVyggdGhyb3cgbXlfZXhjZXB0aW9uKCkgKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlMzkuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY2MjM1NCIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlMzktb3V0cHV0JywgJ2lkNjYyMzU0JywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGUzOS1vdXRwdXQiPiZndDsgZXhhbXBsZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCnRlc3QuY3BwKDEwKTogZXJyb3IgaW4gInRlc3QiOiBleGNlcHRpb24gdGhyb3duIGJ5IHRocm93IG15X2V4Y2VwdGlvbigpCgoqKiogMSBmYWlsdXJlIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1RIUk9XJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19USFJPVzwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfUFJFRElDQVRFIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9QUkVESUNBVEUiPjwvYT5CT09TVF9XQVJOX1BSRURJQ0FURSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50c19saXN0PC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19QUkVESUNBVEUiPjwvYT5CT09TVF9DSEVDS19QUkVESUNBVEUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cHJlZGljYXRlPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudHNfbGlzdDwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfUkVRVUlSRV9QUkVESUNBVEUiPjwvYT5CT09TVF9SRVFVSVJFX1BSRURJQ0FURSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wcmVkaWNhdGU8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50c19saXN0PC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlc2UgYXJlIGdlbmVyaWMgdG9vbHMgdXNlZCB0byB2YWxpZGF0ZSBhbiBhcmJpdHJhcnkgc3VwcGxpZWQgcHJlZGljYXRlIGZ1bmN0b3IgKHRoZXJlIGlzIGEgY29tcGlsZSB0aW1lIGxpbWl0IG9uCiAgICAgcHJlZGljYXRlIGFyaXR5IGRlZmluZWQgYnkgdGhlIGNvbmZpZ3VyYWJsZSBtYWNybyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJPT1NUX1RFU1RfTUFYX1BSRURJQ0FURV9BUklUWTwvY29kZT4pLiBUbyAKICAgICB2YWxpZGF0ZSB6ZXJvIGFyaXR5IHByZWRpY2F0ZSB1c2UgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0OycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDs8L2E+IHRvb2xzLiBJbiBvdGhlciBjYXNlcyBwcmVmZXIgdGhlc2VzIHRvb2xzLiBUaGUgCiAgICAgYWR2YW50YWdlIG9mIHRoZXNlIHRvb2xzIGlzIHRoYXQgdGhleSBzaG93IGFyZ3VtZW50cyB2YWx1ZXMgaW4gY2FzZSBvZiBwcmVkaWNhdGUgZmFpbHVyZS4KICAgIDwvcD4KPHA+CiAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgcHJlZGljYXRlIGl0c2VsZi4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGxpc3Qgb2YgcHJlZGljYXRlIGFyZ3VtZW50cyBlYWNoIHdyYXBwZWQKICAgICBpbiByb3VuZCBicmFja2V0cyAoQk9PU1RfUFAgc2VxdWVuY2UgZm9ybWF0KS4KICAgIDwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlNDAiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNTMuoEJPT1NUXyZsdDtsZXZlbCZndDtfUFJFRElDQVRFIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwPgogICAgICBOb3RlIGRpZmZlcmVuY2UgaW4gZXJyb3IgbG9nIGZyb20gCiAgICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CnVzaW5nIG5hbWVzcGFjZSBib29zdDo6dW5pdF90ZXN0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCmJvb2wgbW9vKCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBtb2QgKSB7IHJldHVybiAoKGFyZzErYXJnMikgJSBtb2QpID09IDA7IH0KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgaW50IGkgPSAxNzsKICAgIGludCBqID0gMTU7CiAgICB1bml0X3Rlc3RfbG9nLnNldF90aHJlc2hvbGRfbGV2ZWwoIGxvZ193YXJuaW5ncyApOwogICAgQk9PU1RfV0FSTiggbW9vKCAxMixpLGogKSApOwogICAgQk9PU1RfV0FSTl9QUkVESUNBVEUoIG1vbywgKDEyKShpKShqKSApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU0MC5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYyNTQ0IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU0MC1vdXRwdXQnLCAnaWQ2NjI1NDQnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTQwLW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTQpOiB3YXJuaW5nIGluICJ0ZXN0IjogY29uZGl0aW9uIG1vbyggMTIsaSxqICkgaXMgbm90IHNhdGlzZmllZAp0ZXN0LmNwcCgxNSk6IHdhcm5pbmcgaW4gInRlc3QiOiBjb25kaXRpb24gbW9vKCAxMiwgaSwgaiApIGlzIG5vdCBzYXRpc2ZpZWQgZm9yICggMTIsIDE3LCAxNSApCgoqKiogTm8gZXJyb3JzIGRldGVjdGVkPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7JywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0OzwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfU01BTEwiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9XQVJOX1NNQUxMIj48L2E+Qk9PU1RfV0FSTl9TTUFMTCg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT52YWx1ZTwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG9sZXJhbmNlPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19TTUFMTCI+PC9hPkJPT1NUX0NIRUNLX1NNQUxMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnZhbHVlPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50b2xlcmFuY2U8L2VtPjwvc3Bhbj4pCjxhIG5hbWU9IkJPT1NUX1JFUVVJUkVfU01BTEwiPjwvYT5CT09TVF9SRVFVSVJFX1NNQUxMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnZhbHVlPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50b2xlcmFuY2U8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGVzZSB0b29scyBhcmUgdXNlZCB0byBjaGVjayB0aGF0IHN1cHBsaWVkIHZhbHVlIGlzIHNtYWxsIGVub3VnaC4gVGhlICJzbWFsbG5lc3MiIGlzIGRlZmluZWQgYnkgYWJzb2x1dGUgdmFsdWUKICAgICBvZiB0aGUgdG9sZXJhbmNlIHN1cHBsaWVkIGFzIGEgc2Vjb25kIGFyZ3VtZW50LiBVc2UgdGhlc2UgdG9vbHMgd2l0aCBjYXV0aW9uLiBUbyBjb21wYXJlIHRvIHZhbHVlcyBvbiBjbG9zZW5lc3MgCiAgICAgaXQncyBwcmVmZXJhYmxlIHRvIHVzZSA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRTwvYT4gdG9vbHMgaW5zdGVhZC4gCiAgICA8L3A+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSB2YWx1ZSB0byBjaGVjay4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHRvbGVyYW5jZS4KICAgIDwvcD4KPGRpdiBjbGFzcz0ibm90ZSI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+Cjx0cj4KPHRkIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUiPjxpbWcgYWx0PSJbTm90ZV0iIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25vdGUucG5nIj48L3RkPgo8dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CiAgICAgIE5vdGUgdGhhdCB0byB1c2UgdGhlc2UgdG9vbHMgeW91IG5lZWQgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGhlYWRlciBmbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmhwcC4gCiAgICAgPC9wPjwvdGQ+PC90cj4KPC90YWJsZT48L2Rpdj4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9Ii5leGFtcGxlNDEiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNTQuoEJPT1NUXyZsdDtsZXZlbCZndDtfU01BTEwgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9mbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdCApCnsKICAgIGRvdWJsZSB2ID0gLTEuMjM0NTZlLTM7CgogICAgQk9PU1RfQ0hFQ0tfU01BTEwoIHYsIDAuMDAwMDAxICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTQxLmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjI3MzAiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTQxLW91dHB1dCcsICdpZDY2MjczMCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlNDEtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUKUnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgxMSk6IGVycm9yIGluICJ0ZXN0IjogYWJzb2x1dGUgdmFsdWUgb2YgdnstMC4wMDEyMzQ1Nn0gZXhjZWVkcyAxZS0wMDYKCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFJywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0O19DTE9TRTwvYT4sIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtfQ0xPU0VfRlJBQ1RJT04nLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X0NMT1NFX0ZSQUNUSU9OPC9hPiwKICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIiB0aXRsZT0iRmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBhbGdvcml0aG1zIj5GbG9hdGluZyBwb2ludCBjb21wYXJpc29uIGFsZ29yaXRobXM8L2E+CiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0iZW50cnkiIGlkPSJ1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7X1RIUk9XIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfV0FSTl9USFJPVyI+PC9hPkJPT1NUX1dBUk5fVEhST1coPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhjZXB0aW9uPC9lbT48L3NwYW4+KQo8YSBuYW1lPSJCT09TVF9DSEVDS19USFJPVyI+PC9hPkJPT1NUX0NIRUNLX1RIUk9XKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4cHJlc3Npb248L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4Y2VwdGlvbjwvZW0+PC9zcGFuPikKPGEgbmFtZT0iQk9PU1RfUkVRVUlSRV9USFJPVyI+PC9hPkJPT1NUX1JFUVVJUkVfVEhST1coPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhwcmVzc2lvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZXhjZXB0aW9uPC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlc2UgdG9vbHMgYXJlIHVzZWQgdG8gcGVyZm9ybSBhbiBleGNlcHRpb24gZGV0ZWN0aW9uIGNoZWNrLiBUb29scyBleGVjdXRlIHRoZSBzdXBwbGllZCBleHByZXNzaW9uIGFuZCB2YWxpZGF0ZSAKICAgICB0aGF0IGl0IHRocm93cyBhbiBleGNlcHRpb24gb2Ygc3VwcGxpZWQgY2xhc3MgKG9yIHRoZSBvbmUgZGVyaXZlZCBmcm9tIGl0KSBvciBpdCdzIGNoaWxkLiBJZiB0aGUgc3RhdGVtZW50IAogICAgIHRocm93cyBhbnkgb3RoZXIgdW5yZWxhdGVkIGV4Y2VwdGlvbiBvciBkb2Vzbid0IHRocm93IGF0IGFsbCwgY2hlY2sgZmFpbHMuCiAgICA8L3A+CjxwPgogICAgIElmIGNoZWNrIGlzIHN1Y2Nlc3NmdWwsIHRoZSB0b29sIHByb2R1Y2VzIGEgY29uZmlybWF0aW9uIG1lc3NhZ2UsIGluIG90aGVyIGNhc2UgaXQgcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBpbiBhCiAgICAgZm9ybSAiZXJyb3IgaW4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+dGVzdCBjYXNlIG5hbWU8L2NvZGU+PC9lbT46IGV4Y2VwdGlvbiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5leGNlcHRpb248L2NvZGU+PC9lbT4gZXhwZWN0ZWQuCiAgICA8L3A+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBleHByZXNzaW9uIHRvIGV4ZWN1dGUuIFVzZSBkby13aGlsZSgwKSBibG9jayBpZiB5b3Ugd2FudCB0byBleGVjdXRlIG1vcmUgdGhhbiBvbmUgCiAgICAgc3RhdGVtZW50LiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhbiBleHBlY3RlZCBleGNlcHRpb24uCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSIuZXhhbXBsZTQ1Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDU1LqBCT09TVF8mbHQ7bGV2ZWwmZ3Q7X1RIUk9XIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpjbGFzcyBteV9leGNlcHRpb257fTsKCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgaW50IGkgPSAgMDsKICAgIEJPT1NUX0NIRUNLX1RIUk9XKCBpKyssIG15X2V4Y2VwdGlvbiApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU0NS5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYyOTM1IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU0NS1vdXRwdXQnLCAnaWQ2NjI5MzUnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTQ1LW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoMTEpOiBlcnJvciBpbiAidGVzdCI6IGV4Y2VwdGlvbiBteV9leGNlcHRpb24gaXMgZXhwZWN0ZWQKCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSI8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDtOT19USFJPVycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDtOT19USFJPVzwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUX0VSUk9SIj4KPHByZSBjbGFzcz0iaW5saW5lLXN5bm9wc2lzIj4KPGEgbmFtZT0iQk9PU1RfRVJST1IiPjwvYT5CT09TVF9FUlJPUig8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tZXNzYWdlPC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgQk9PU1RfRVJST1IgdG9vbCBiZWhhdmUgdGhlIHNhbWUgd2F5IGFzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Qk9PU1RfQ0hFQ0tfTUVTU0FHRSggZmFsc2UsIG1lc3NhZ2UgKTwvY29kZT4uIFRoaXMgdG9vbCBpcyB1c2VkIGZvcgogICAgIGFuIHVuY29uZGl0aW9uYWwgZXJyb3IgY291bnRlciBpbmNyZWFzaW5nIGFuZCBtZXNzYWdlIGxvZ2dpbmcuIAogICAgPC9wPgo8cD4KICAgICBUaGUgb25seSB0b29sJ3MgcGFyYW1ldGVyIGlzIGFuIGVycm9yIG1lc3NhZ2UgdG8gbG9nLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGU0NiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA1Ni6gQk9PU1RfRVJST1IgdXNhZ2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0ICkKewogICAgQk9PU1RfRVJST1IoICJOb3RoaW5nIHRvIHRlc3QiICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTQ2LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NjMwNzEiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTQ2LW91dHB1dCcsICdpZDY2MzA3MScsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlNDYtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUKUnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCg4KTogZXJyb3IgaW4gInRlc3QiOiBOb3RoaW5nIHRvIHRlc3QKCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSI8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxzcGFuIGNsYXNzPSJpbmxpbmUtcmVmLXNlZS1hbHNvIj5TZWUgYWxzbzogPC9zcGFuPgogICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlkMjk4OTA2ID0gc2VsZWN0X2Zvcm1fcGFnZSggJ3V0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUXyZsdDtsZXZlbCZndDsnLCBpZDI5ODkwNiApOyByZXR1cm4gZmFsc2U7Ij5CT09TVF8mbHQ7bGV2ZWwmZ3Q7PC9hPgogICAgPC9kaXY+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0idXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfRkFJTCI+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX0ZBSUwiPjwvYT5CT09TVF9GQUlMKDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1lc3NhZ2U8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBCT09TVF9GQUlMIGJlaGF2ZSB0aGUgc2FtZSB3YXkgYXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CT09TVF9SRVFVSVJFX01FU1NBR0UoIGZhbHNlLCBtZXNzYWdlICk8L2NvZGU+LiBUaGlzIHRvb2wgaXMgdXNlZCBmb3IgYW4KICAgICB1bmNvbmRpdGlvbmFsIGVycm9yIGNvdW50ZXIgaW5jcmVhc2luZywgbWVzc2FnZSBsb2dnaW5nIGFuZCB0aGUgY3VycmVudCB0ZXN0IGNhc2UgYWJvcnRpbmcuIAogICAgPC9wPgo8cD4KICAgICBUaGUgb25seSB0b29sJ3MgcGFyYW1ldGVyIGlzIGFuIGVycm9yIG1lc3NhZ2UgdG8gbG9nLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGU0NyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA1Ny6gQk9PU1RfRkFJTCB1c2FnZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBCT09TVF9GQUlMKCAiVGVzdCBpcyBub3QgcmVhZHkgeWV0IiApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU0Ny5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYzMjA5IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU0Ny1vdXRwdXQnLCAnaWQ2NjMyMDknLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTQ3LW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoOCk6IGZhdGFsIGVycm9yIGluICJ0ZXN0IjogVGVzdCBpcyBub3QgcmVhZHkgeWV0CgoqKiogMSBmYWlsdXJlIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48c3BhbiBjbGFzcz0iaW5saW5lLXJlZi1zZWUtYWxzbyI+U2VlIGFsc286IDwvc3Bhbj4KICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7JywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0OzwvYT4KICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJlbnRyeSIgaWQ9InV0Zi50ZXN0aW5nLXRvb2xzLnJlZmVyZW5jZS5ib2R5LkJPT1NUX0lTX0RFRklORUQiPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9JU19ERUZJTkVEIj48L2E+Qk9PU1RfSVNfREVGSU5FRCg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zeW1ib2w8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBVbmxpa2UgdGhlIHJlc3Qgb2YgdGhlIHRvb2xzIGluIHRoZSB0b29sYm94IHRoaXMgdG9vbCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBsb2dnaW5nIGl0c2VsZi4gSXRzIG9ubHkgcHVycG9zZQogICAgIGlzIHRvIGNoZWNrIGF0IHJ1bnRpbWUgd2hldGhlciBvciBub3QgdGhlIHN1cHBsaWVkIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVmaW5lZC4gVXNlIGl0IGluIGNvbWJpbmF0aW9uIHdpdGgKICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZDI5ODkwNiA9IHNlbGVjdF9mb3JtX3BhZ2UoICd1dGYudGVzdGluZy10b29scy5yZWZlcmVuY2UuYm9keS5CT09TVF8mbHQ7bGV2ZWwmZ3Q7JywgaWQyOTg5MDYgKTsgcmV0dXJuIGZhbHNlOyI+Qk9PU1RfJmx0O2xldmVsJmd0OzwvYT4gdG8gcGVyZm9ybSBhbmQgbG9nIHZhbGlkYXRpb24uIE1hY3JvcyBvZiBhbnkgYXJpdHkgY291bGQgYmUgY2hlY2tlZC4gVG8gY2hlY2sgdGhlCiAgICAgbWFjcm8gZGVmaW5pdGlvbiB3aXRoIG5vbi16ZXJvIGFyaXR5IHNwZWNpZnkgZHVtbXkgYXJndW1lbnRzIGZvciBpdC4gU2VlIGJlbG93IGZvciBleGFtcGxlLgogICAgPC9wPgo8cD4KICAgICBUaGUgb25seSB0b29sJ3MgcGFyYW1ldGVyIGlzIGEgcHJlcHJvY2Vzc29yIHN5bWJvbCB0aGF0IGdldHMgdmFsaWRhdGVkLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0iLmV4YW1wbGU0OCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaA1OC6gQk9PU1RfSVNfREVGSU5FRCB1c2FnZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3QgKQp7CiAgICBCT09TVF9DSEVDSyggQk9PU1RfSVNfREVGSU5FRChTWU1CT0wxKSApOwogICAgQk9PU1RfQ0hFQ0soIEJPT1NUX0lTX0RFRklORUQoU1lNQk9MMihhcmcpKSApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGU0OC5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjYzMzQ3IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGU0OC1vdXRwdXQnLCAnaWQ2NjMzNDcnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTQ4LW91dHB1dCI+Jmd0OyBleGFtcGxlClJ1bm5pbmcgMSB0ZXN0IGNhc2UuLi4KdGVzdC5jcHAoOCk6IGVycm9yIGluICJ0ZXN0IjogY2hlY2sgOjpib29zdDo6dGVzdF90b29sczo6dHRfZGV0YWlsOjppc19kZWZpbmVkX2ltcGwoICJTWU1CT0wxIiwgIj0gU1lNQk9MMSIgKSBmYWlsZWQKdGVzdC5jcHAoOSk6IGVycm9yIGluICJ0ZXN0IjogY2hlY2sgOjpib29zdDo6dGVzdF90b29sczo6dHRfZGV0YWlsOjppc19kZWZpbmVkX2ltcGwoICJTWU1CT0wyKGFyZykiLCAiPSBTWU1CT0wyKGFyZykiICkgZmFpbGVkCgoqKiogMiBmYWlsdXJlcyBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHNwYW4gY2xhc3M9ImlubGluZS1yZWYtc2VlLWFsc28iPlNlZSBhbHNvOiA8L3NwYW4+CiAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWQyOTg5MDYgPSBzZWxlY3RfZm9ybV9wYWdlKCAndXRmLnRlc3RpbmctdG9vbHMucmVmZXJlbmNlLmJvZHkuQk9PU1RfJmx0O2xldmVsJmd0OycsIGlkMjk4OTA2ICk7IHJldHVybiBmYWxzZTsiPkJPT1NUXyZsdDtsZXZlbCZndDs8L2E+CiAgICA8L2Rpdj4KPC90ZD4KPC90cj48L3RhYmxlPgo8L2Rpdj4KPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cjx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCCpIDIwMDEtMjAwNyBHZW5uYWRpeSBSb3plbnRhbDwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgYWNjZXNza2V5PSJwIiBocmVmPSJmbG9hdGluZ19wb2ludF9jb21wYXJpc29uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vdGVzdGluZy10b29scy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSIuLi91c2FnZS1yZWNvbW1lbmRhdGlvbnMuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K