PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT5SZXRyaWV2aW5nIEF0dHJpYnV0ZXM8L3RpdGxlPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNTAuMCI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InByZXZpb3VzIiBocmVmPSJhcjAxczA2Lmh0bWwiIHRpdGxlPSJXcml0aW5nIEF0dHJpYnV0ZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcjAxczA4Lmh0bWwiIHRpdGxlPSJFbmNvZGluZyBDb252ZXJzaW9uIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9Im5hdmhlYWRlciI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciI+PHRyPjx0aCBjb2xzcGFuPSIzIiBhbGlnbj0iY2VudGVyIj5SZXRyaWV2aW5nIEF0dHJpYnV0ZXM8L3RoPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczA2Lmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRoIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50ZXIiPqA8L3RoPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFyMDFzMDguaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDEiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InhtbHR1dG9yaWFsYXR0cmlidXRlIj48L2E+UmV0cmlldmluZyBBdHRyaWJ1dGVzPC9oMj48L2Rpdj48L2Rpdj48cD5SZXRyaWV2aW5nIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMKICAgIGV4YW1wbGUgaW4gd2hpY2ggd2UgcmV0cmlldmVkIGEgbm9kZSdzIHRleHQgY29udGVudHMuIEluIHRoaXMgY2FzZSB3ZSdsbAogICAgICBleHRyYWN0IHRoZSB2YWx1ZSBvZiB0aGUgVVJJIHdlIGFkZGVkIGluIHRoZSBwcmV2aW91cwogICAgICBzZWN0aW9uLiBGdWxsIGNvZGU6IDxhIGhyZWY9ImFwZS5odG1sIiB0aXRsZT0iRS4gQ29kZSBmb3IgUmV0cmlldmluZyBBdHRyaWJ1dGUgVmFsdWUgRXhhbXBsZSI+QXBwZW5kaXggRTwvYT4uPC9wPjxwPgogICAgICBUaGUgaW5pdGlhbCBzdGVwcyBmb3IgdGhpcyBleGFtcGxlIGFyZSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBvbmVzOiBwYXJzZQogICAgICB0aGUgZG9jLCBmaW5kIHRoZSBlbGVtZW50IHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgdGhlbiBlbnRlciBhIGZ1bmN0aW9uIHRvCiAgICAgIGNhcnJ5IG91dCB0aGUgc3BlY2lmaWMgdGFzayByZXF1aXJlZC4gSW4gdGhpcyBjYXNlLCB3ZSBjYWxsCiAgICAgIDx0dD5nZXRSZWZlcmVuY2U8L3R0PjoKICAgICAgPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgp2b2lkCmdldFJlZmVyZW5jZSAoeG1sRG9jUHRyIGRvYywgeG1sTm9kZVB0ciBjdXIpIHsKCgl4bWxDaGFyICp1cmk7CgljdXIgPSBjdXItJmd0O3htbENoaWxkcmVuTm9kZTsKCXdoaWxlIChjdXIgIT0gTlVMTCkgewoJICAgIGlmICgoIXhtbFN0cmNtcChjdXItJmd0O25hbWUsIChjb25zdCB4bWxDaGFyICopJnF1b3Q7cmVmZXJlbmNlJnF1b3Q7KSkpIHsKCQkgICA8YSBuYW1lPSJnZXRhdHRyaWJ1dGV2YWx1ZSI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj4gdXJpID0geG1sR2V0UHJvcChjdXIsICZxdW90O3VyaSZxdW90Oyk7CgkJICAgIHByaW50ZigmcXVvdDt1cmk6ICVzXG4mcXVvdDssIHVyaSk7CgkJICAgIHhtbEZyZWUodXJpKTsKCSAgICB9CgkgICAgY3VyID0gY3VyLSZndDtuZXh0OwoJfQoJcmV0dXJuOwp9CiAgICAgIDwvcHJlPgogICAgCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJjYWxsb3V0bGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iQ2FsbG91dCBsaXN0Ij48dHI+PHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSIjZ2V0YXR0cmlidXRldmFsdWUiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+CgkgICAgVGhlIGtleSBmdW5jdGlvbiBpcyA8dHQ+PGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXRyZWUuaHRtbCNYTUxHRVRQUk9QIiB0YXJnZXQ9Il90b3AiPnhtbEdldFByb3A8L2E+PC90dD4sIHdoaWNoIHJldHVybnMgYW4KICAgICAgPHR0PnhtbENoYXI8L3R0PiBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGUncyB2YWx1ZS4gSW4gdGhpcyBjYXNlLAoJCQkJCSAgIHdlIGp1c3QgcHJpbnQgaXQgb3V0LgogICAgICA8L3A+PGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjx0YWJsZSBib3JkZXI9IjAiPjx0cj48dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBzcmM9ImltYWdlcy9ub3RlLnBuZyI+PC90ZD48dGg+Tm90ZTwvdGg+PC90cj48dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CgkgIElmIHlvdSBhcmUgdXNpbmcgYSBEVEQgdGhhdCBkZWNsYXJlcyBhIGZpeGVkIG9yCgkgIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXRyaWV2ZSBpdC4KCTwvcD48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48cD4KCSAgPC9wPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjxwPgogICAgIAogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXIwMXMwNi5odG1sIj5QcmV2PC9hPqA8L3RkPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwiPlVwPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCI+oDxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXIwMXMwOC5odG1sIj5OZXh0PC9hPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+V3JpdGluZyBBdHRyaWJ1dGWgPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPqBFbmNvZGluZyBDb252ZXJzaW9uPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K