PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPjxodG1sPjxoZWFkPjx0aXRsZT5BeGlzMi9DIC0gQXhpczIvQyBVc2VyJ3MgR3VpZGU8L3RpdGxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCI+CiAgICAgICAgICBAaW1wb3J0IHVybCgiLi4vc3R5bGUvbWF2ZW4tYmFzZS5jc3MiKTsKICAgICAgICAgIAoJCQkgICAgQGltcG9ydCB1cmwoIi4uL3N0eWxlL21hdmVuLWNsYXNzaWMuY3NzIik7PC9zdHlsZT48bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3N0eWxlL3ByaW50LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCI+PC9saW5rPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjwvbWV0YT48L2hlYWQ+PGJvZHkgY2xhc3M9ImNvbXBvc2l0ZSI+PGRpdiBpZD0iYmFubmVyIj48YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIiBpZD0ib3JnYW5pemF0aW9uTG9nbyI+PGltZyBhbHQ9IkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBzcmM9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9pbWFnZXMvYXNmLWxvZ28uZ2lmIj48L2ltZz48L2E+PGEgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvYyIgaWQ9InByb2plY3RMb2dvIj48aW1nIGFsdD0iQXBhY2hlIEF4aXMyIEMiIHNyYz0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvaW1hZ2VzL2F4aXMuanBnIj48L2ltZz48L2E+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImJyZWFkY3J1bWJzIj48ZGl2IGNsYXNzPSJ4bGVmdCI+CiAgICAgICAgICAgICAgICAJTGFzdCBwdWJsaXNoZWQ6IDIyIERlY2VtYmVyIDIwMDYKICAgICAgICAgICAgICAgICAgfCBEb2MgZm9yIDAuOTY8L2Rpdj48ZGl2IGNsYXNzPSJ4cmlnaHQiPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJsZWZ0Q29sdW1uIj48ZGl2IGlkPSJuYXZjb2x1bW4iPjxkaXYgaWQ9Im1lbnVBeGlzMl9DIj48aDU+QXhpczIvQzwvaDU+PHVsPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L2xpPjxsaSBjbGFzcz0iZXhwYW5kZWQiPjxhIGhyZWY9Ii4uL2Rvd25sb2FkLmNnaSI+RG93bmxvYWQgQXhpczIvQzwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9kb3dubG9hZC5jZ2kiPlJlbGVhc2VzPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2kvd2Vic2VydmljZXMvYXhpczIvdHJ1bmsvYy8iIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5WaWV3IFNvdXJjZSBDb2RlIE9ubGluZTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vc3ZuLmh0bWwiPkNoZWNrb3V0IFNvdXJjZSBDb2RlPC9hPjwvbGk+PC91bD48L2xpPjxsaSBjbGFzcz0iZXhwYW5kZWQiPjxhIGhyZWY9Ii4uL2RvY3MvaW5kZXguaHRtbCI+RG9jdW1lbnRhdGlvbjwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9kb2NzL2luc3RhbGxhdGlvbmd1aWRlLmh0bWwiPkluc3RhbGxhdGlvbiBHdWlkZTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vZG9jcy9kZXZlbG9wZXJndWlkZS5odG1sIj5EZXZlbG9wZXIgR3VpZGU8L2E+PC9saT48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9Ii4uL2RvY3MvdXNlcmd1aWRlLmh0bWwiPlVzZXIgR3VpZGU8L2E+PC9saT48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9Ii4uL2RvY3MvYXhpczJjX21hbnVhbC5odG1sIj5BeGlzMi9DIG1hbnVhbDwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImV4cGFuZGVkIj48YSBocmVmPSIuLi9tYWlsLWxpc3RzLmh0bWwiPkdldCBJbnZvbHZlZDwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9tYWlsLWxpc3RzLmh0bWwiPk1haWxpbmcgTGlzdHM8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0iLi4vdGVhbS1saXN0Lmh0bWwiPlByb2plY3QgSW5mb3JtYXRpb248L2E+PHVsPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vdGVhbS1saXN0Lmh0bWwiPlByb2plY3QgVGVhbTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vaXNzdWUtdHJhY2tpbmcuaHRtbCI+SXNzdWUgVHJhY2tpbmc8L2E+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgaWQ9InBvd2VyZWRCeSI+PGltZyBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4uL2ltYWdlcy9sb2dvcy9tYXZlbi1idXR0b24tMS5wbmciPjwvaW1nPjwvYT48L2Rpdj48L2Rpdj48ZGl2IGlkPSJib2R5Q29sdW1uIj48ZGl2IGNsYXNzPSJjb250ZW50Qm94Ij48ZGl2IGNsYXNzPSJzZWN0aW9uIj48YSBuYW1lPSJBcGFjaGVfQXhpczJfQ19Vc2VyX3NfR3VpZGUiPjwvYT48aDI+QXBhY2hlIEF4aXMyL0MgVXNlcidzIEd1aWRlPC9oMj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJDb250ZW50Ij48L2E+PGgzPkNvbnRlbnQ8L2gzPjx1bD4KICA8bGk+PHA+PGEgaHJlZj0iI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNXaGF0X2lzX0F4aXMyXyI+V2hhdCBpcyBBeGlzMi9DPzwvYT48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48YSBocmVmPSIjV2ViX1NlcnZpY2VzX1VzaW5nX0F4aXMyIj5XZWIgU2VydmljZXMgVXNpbmcgQXhpczIvQzwvYT4KICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNXcml0aW5nX1dlYl9TZXJ2aWNlc19Vc2luZ19BeGlzMl9DIj5Xcml0aW5nIFdlYiBTZXJ2aWNlcwogICAgICAgIFVzaW5nIEF4aXMyL0M8L2E+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNDcmVhdGluZ19XZWJfU2VydmljZV9fTXlTZXJ2aWNlXyI+Q3JlYXRpbmcgV2ViCiAgICAgICAgICAgIFNlcnZpY2UgKEVjaG8gc2VydmljZSk8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjSG93X3RvX3dyaXRlX3RoZV9XZWJfU2VydmljZV8iPkhvdyB0byB3cml0ZSB0aGUgV2ViCiAgICAgICAgICAgIFNlcnZpY2U/PC9hPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNTdGVwMSI+U3RlcDEgOldyaXRlIHRoZSBlY2hvX3NrZWxldG9uLmMgZmlsZQogICAgICAgICAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBheGlzMl9zdmNfc2tlbGV0b24uaDwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjU3RlcDIiPlN0ZXAyIDpOb3cgd2UgY2FuIHdyaXRlIHRoZSBlY2hvIHNlcnZpY2UKICAgICAgICAgICAgICAgIGluIGEgZmlsZSBlY2hvLmM8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI1N0ZXAzIj5TdGVwMyA6V3JpdGUgdGhlIHNlcnZpY2VzLnhtbCBmaWxlPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNTdGVwNCI+U3RlcDQgOkNyZWF0ZSB0aGUgV2ViIFNlcnZpY2UKICAgICAgICAgICAgICBGb2xkZXI8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI1N0ZXA1Ij5TdGVwNSA6QXJjaGl2ZSBiYXNlZCBkZXBsb3ltZW50CiAgICAgICAgICAgICAgbW9kZWw8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNXcml0aW5nX1dlYl9TZXJ2aWNlc19Vc2luZ19Db2RlX0dlbmVyYXRvciI+V3JpdGluZyBXZWIKICAgICAgICBTZXJ2aWNlcyBTa2VsZXRvbiBVc2luZyBDb2RlIEdlbmVyYXRvcjwvYT4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI1dTREwyQ190b29sIj5XU0RMMkMgdG9vbDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNJbXBsZW1lbnRfdGhlX0J1c2luZXNzX0xvZ2ljIj5JbXBsZW1lbnQgdGhlIEJ1c2luZXNzCiAgICAgICAgICAgIExvZ2ljPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI2VjaG9TdHJpbmciPmVjaG9TdHJpbmc8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjZWNob1N0cmluZ0FycmF5Ij5lY2hvU3RyaW5nQXJyYXk8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjZWNob1N0cnVjdCI+ZWNob1N0cnVjdDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNzZXJ2aWNlc194bWwiPnNlcnZpY2VzLnhtbDwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjZGVwbG95Ij5EZXBsb3kgdGhlIFdlYiBTZXJ2aWNlPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxwPjxhIGhyZWY9IiNXZWJfU2VydmljZV9DbGllbnRzX1VzaW5nX0F4aXMyIj5XZWIgU2VydmljZSBDbGllbnRzIFVzaW5nCiAgICBBeGlzMi9DPC9hPjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNXcml0aW5nX1dlYl9TZXJ2aWNlX0NsaWVudHNfdXNpbmdfQXhpczIlMjdzX1ByaW1hcnlfQVBJcyI+V3JpdGluZwogICAgICAgIFdlYiBTZXJ2aWNlIENsaWVudHMgVXNpbmcgQXhpczIncyBQcmltYXJ5IEFQSXM8L2E+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNFY2hvQmxvY2tpbmdDbGllbnQiPmVjaG9fYmxvY2tpbmcgQ2xpZW50PC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0VjaG9Ob25CbG9ja2luZ0NsaWVudCI+ZWNob19ub25fYmxvY2tpbmcKICAgICAgICAgIENsaWVudDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNFY2hvTm9uQmxvY2tpbmdEdWFsQ2xpZW50Ij5lY2hvX25vbl9ibG9ja2luZ19kdWFsCiAgICAgICAgICAgIENsaWVudDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNFY2hvQmxvY2tpbmdEdWFsQ2xpZW50Ij5lY2hvX2Jsb2NraW5nX2R1YWwKICAgICAgICAgIENsaWVudDwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjV3JpdGluZ19XZWJfQ2xpZW50c19Vc2luZ19Db2RlX0dlbmVyYXRvciI+V3JpdGluZyBXZWIKICAgICAgICBTZXJ2aWNlIENsaWVudHMgdXNpbmcgQ29kZSBHZW5lcmF0aW9uIHdpdGggRGF0YSBCaW5kaW5nIFN1cHBvcnQ8L2E+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNDb2RlZ2VuZXJhdG9yX0NsaWVudF9lY2hvU3RyaW5nIj5DbGllbnQgZm9yCiAgICAgICAgICAgIGVjaG9TdHJpbmcgb3BlcmF0aW9uPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0NvZGVnZW5lcmF0b3JfQ2xpZW50X2VjaG9TdHJpbmdBcnJheSI+Q2xpZW50IGZvcgogICAgICAgICAgICBlY2hvU3RyaW5nQXJyYXkgb3BlcmF0aW9uPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0NvZGVnZW5lcmF0b3JfQ2xpZW50X2VjaG9TdHJ1Y3QiPkNsaWVudCBmb3IKICAgICAgICAgICAgZWNob1N0cnVjdCBvcGVyYXRpb248L2E+PC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48cD48YSBocmVmPSIjUHJvdmlkaW5nX3NlY3VyaXR5X3VzaW5nX1JhbXBhcnQiPlByb3ZpZGluZyBzZWN1cml0eSB1c2luZwogICAgUmFtcGFydC9DPC9hPjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNFbmdhZ2luZ19yYW1wYXJ0X21vZHVsZSI+RW5nYWdpbmcgcmFtcGFydCBtb2R1bGU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNTZW1hbnRpY3Nfb2ZfcGFyYW1ldGVyc19zcGVjaWZpZWRfaW5fYXhpczJfeG1sIj5TZW1hbnRpY3MKICAgICAgICBvZiBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiBheGlzMi54bWw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNXcml0aW5nX293bl9wYXNzd29yZF9jYWxsYmFja19tb2R1bGUiPldyaXRpbmcgb3duCiAgICAgICAgcGFzc3dvcmQgY2FsbGJhY2sgbW9kdWxlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjQWRkaW5nX3NlY3VyaXR5X3BhcmFtZXRlcnNfZHluYW1pY2FsbHkiPkFkZGluZyBzZWN1cml0eQogICAgICAgIHBhcmFtZXRlcnMgZHluYW1pY2FsbHk8L2E+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD48cD48YSBpZD0iSW50cm9kdWN0aW9uIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkludHJvZHVjdGlvbiI+PC9hPjxoMz5JbnRyb2R1Y3Rpb248L2gzPjxwPldlbGNvbWUgdG8gQXhpczIvQywgdGhlIEFwYWNoZSBBeGlzMiBpbXBsZW1lbnRhdGlvbiBpbiBDLiBUaGlzIFVzZXIncyBHdWlkZQp3aWxsIGhlbHAgeW91IHVuZGVyc3RhbmQgd2hhdCBBeGlzMi9DIGhhcyB0byBvZmZlciBhbmQgaG93IHRvIGdldCBzdGFydGVkCndpdGggaXQuPC9wPjxwPjxhIGlkPSJXaGF0X2lzX0F4aXMyXyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXaGF0X2lzX0F4aXMyX0NfIj48L2E+PGgzPldoYXQgaXMgQXhpczIvQz88L2gzPjxwPkF4aXMyL0MgaXMgYW4gZWZmb3J0IHRvIGltcGxlbWVudCB0aGUgPGEgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvMV8wL0F4aXMyQXJjaGl0ZWN0dXJlR3VpZGUuaHRtbCIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkV4dGVybmFsIExpbmsiPkF4aXMyCmFyY2hpdGVjdHVyZTwvYT4gaW4gQyBwcm9ncmFtbWluZyBsYW5ndWFnZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCmFyY2hpdGVjdHVyZSA8YSBocmVmPSJhcmNoaXRlY3R1cmVfbm90ZXMuaHRtbCI+QyBTcGVjaWZpYyBBcmNoaXRlY3R1cmFsCk5vdGVzPC9hPiBhcmUgYWxzbyBhdmFpbGFibGUuPC9wPjxwPkFmdGVyIG1vbnRocyBvZiBjb250aW51ZWQgZGlzY3Vzc2lvbiBhbmQgY29kaW5nIGluIHRoaXMgZGlyZWN0aW9uLCBBeGlzMi9DCm5vdyBkZWxpdmVycyB0aGUgZm9sbG93aW5nIGtleSBmZWF0dXJlczo8L3A+PHVsPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PHN0cm9uZz5TcGVlZDwvc3Ryb25nPiAtIEF4aXMyL0MgdXNlcwogICAgaXRzIG93biBYTUwgb2JqZWN0IG1vZGVsIGFuZCBTdEFYIChTdHJlYW1pbmcgQVBJIGZvciBYTUwpIHBhcnNpbmcgdG8KICAgIGFjaGlldmUgc2lnbmlmaWNhbnQgc3BlZWQuIEluIGFkZGl0aW9uIHRvIHRoYXQsIEF4aXMyL0MgaXMgaW5oZXJlbnRseQogICAgYmVuZWZpdGVkIGJ5IHRoZSBzcGVlZCBvZiBpdHMgaW1wbGVtZW50YXRpb24gbGFuZ3VhZ2UsIG5hbWVseSBDLCBjb21wYXJlZAogICAgdG8gSmF2YSBpbXBsZW1lbnRhdGlvbi48L3A+CiAgPC9saT4KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxzdHJvbmc+TG93IG1lbW9yeSBmb290IHByaW50PC9zdHJvbmc+LQogICAgQXhpczIgYXJjaGl0ZWN0dXJlIHdhcyBkZXNpZ25lZCBncm91bmQtdXAga2VlcGluZyBpbiBtaW5kIHRoZSBsb3cgbWVtb3J5IGZvb3QKICAgIHByaW50LiBBeGlzMi9DIHN0cml2ZXMgdG8gYWNoaWV2ZSB0aGUgc2FtZSB3aXRoIGEgd2VsbCBkZXNpZ25lZAogICAgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPkFYSU9NL0M8L3N0cm9uZz4tIEF4aXMyL0MgY29tZXMKICAgIHdpdGggaXRzIG93biBsaWdodC13ZWlnaHQgb2JqZWN0IG1vZGVsIGZvciBYTUwsIEFYSU9NL0Mgd2hpY2ggaXMgdGhlIEMKICAgIGltcGxlbWVudGF0aW9uIG9mIDxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL2NvbW1vbnMvYXhpb20vT01UdXRvcmlhbC5odG1sIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+QVhJT008L2E+LjwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PHN0cm9uZz5NRVAgU3VwcG9ydDwvc3Ryb25nPiAtIFN1cHBvcnRzCiAgICBNZXNzYWdlIEV4Y2hhbmdlIFBhdHRlcm5zIChNRVBzKTwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PHN0cm9uZz5GbGV4aWJpbGl0eTwvc3Ryb25nPiAtIEF4aXMyL0MKICAgIGFyY2hpdGVjdHVyZSBnaXZlcyB0aGUgZGV2ZWxvcGVyIGNvbXBsZXRlIGZyZWVkb20gdG8gaW5zZXJ0CiAgICBleHRlbnNpb25zIGludG8gdGhlIGVuZ2luZSAodXNpbmcgbW9kdWxlcyBhbmQgaGFuZGxlcnMpIGZvciBjdXN0b20gU09BUAogICAgaGVhZGVyIHByb2Nlc3NpbmcuPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPlRyYW5zcG9ydCBGcmFtZXdvcms8L3N0cm9uZz4gLQogICAgV2UgaGF2ZSBhIGNsZWFuIGFuZCBzaW1wbGUgYWJzdHJhY3Rpb24gZm9yIGludGVncmF0aW5nIGFuZCB1c2luZwogICAgdHJhbnNwb3J0cywgYW5kIHRoZSBjb3JlIG9mIHRoZSBlbmdpbmUgaXMgY29tcGxldGVseQogICAgdHJhbnNwb3J0LWluZGVwZW5kZW50LjwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PHN0cm9uZz5Db21wb3NpdGlvbiBhbmQKICAgIEV4dGVuc2liaWxpdHk8L3N0cm9uZz4gLSBNb2R1bGVzIGFuZCBwaGFzZXMgaW1wcm92ZSBzdXBwb3J0IGZvcgogICAgY29tcG9zYWJpbGl0eSBhbmQgZXh0ZW5zaWJpbGl0eS4gTW9kdWxlcyBzdXBwb3J0IGNvbXBvc2FiaWxpdHkgYW5kIGFyZQogICAgYWJsZSB0byBhZGQgc3VwcG9ydCBmb3IgbmV3IFdTLSogc3BlY2lmaWNhdGlvbnMgaW4gYSBzaW1wbGUgYW5kIGNsZWFuCiAgICBtYW5uZXIuIFRoZXkgYXJlIGhvd2V2ZXIsIG5vdCBob3QgZGVwbG95YWJsZSBhcyB0aGV5IGNoYW5nZSB0aGUgb3ZlcmFsbAogICAgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS48L3A+CiAgPC9saT4KPC91bD48cD5BeGlzMi9DIHRlYW0gaXMgd29ya2luZyBoYXJkIHRvIGNvbnRpbnVvdXNseSBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbi4KUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIG9wZW4tc291cmNlIGVmZm9ydC4gSWYgeW91IGZlZWwgeW91IGhhdmUgc29tZQp0aW1lIHRvIHNwYXJlLCBwbGVhc2UgZ2V0IGludm9sdmVkIGFuZCBsZW5kIHVzIGEgaGFuZCEgVGhlIEF4aXMyL0MgZGV2ZWxvcGVyCmNvbW11bml0eSB3ZWxjb21lcyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGNvbnRyaWJ1dGlvbnMuPC9wPjxwPkxldCB1cyBrbm93IHdoYXQgeW91IHRoaW5rISBQbGVhc2Ugc2VuZCB5b3VyIGZlZWRiYWNrIG9uIEF4aXMyL0MgdG8gIjxhIGhyZWY9Im1haWx0bzpheGlzLXVzZXJAd3MuYXBhY2hlLm9yZyI+YXhpcy1jLXVzZXJAd3MuYXBhY2hlLm9yZzwvYT4iIGFuZApwbGVhc2UgcmVtZW1iZXIgdG8gcHJlZml4IHRoZSBzdWJqZWN0IG9mIHRoZSBtYWlsIHdpdGggW0F4aXMyXS48L3A+PHA+VGhlIGZvbGxvd2luZyBzZWN0aW9ucyB3aWxsIGd1aWRlIG9uIGhvdyB0byB3cml0ZSBXZWIgc2VydmljZQpjbGllbnRzIGFuZCBzZXJ2aWNlcy48L3A+PHA+PGEgbmFtZT0iV2ViX1NlcnZpY2VzX1VzaW5nX0F4aXMyIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IldlYl9TZXJ2aWNlc19Vc2luZ19BeGlzMl9DIj48L2E+PGgzPldlYiBTZXJ2aWNlcyBVc2luZyBBeGlzMi9DPC9oMz48cD5CZWZvcmUgc3RhcnRpbmcsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgQXhpczIvQwpjb3JyZWN0bHkgYW5kIHdoZXRoZXIgeW91IGNhbiBydW4gdGhlIGF4aXMyX2h0dHBfc2VydmVyIGxvY2F0ZWQgaW4KQVhJUzJDX0hPTUUvYmluIChTZWUgPGEgaHJlZj0iaW5zdGFsbGF0aW9uZ3VpZGUuaHRtbCI+SW5zdGFsbGF0aW9uIEd1aWRlPC9hPgpmb3IgZGV0YWlscykuPC9wPjxwPjxhIG5hbWU9IldyaXRpbmdfV2ViX1NlcnZpY2VzX1VzaW5nX0F4aXMyX0MiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV3JpdGluZ19XZWJfU2VydmljZXNfVXNpbmdfQXhpczJfQyI+PC9hPjxoMz5Xcml0aW5nIFdlYiBTZXJ2aWNlcyBVc2luZyBBeGlzMi9DPC9oMz48cD48YSBpZD0iQ3JlYXRpbmdfV2ViX1NlcnZpY2VfX015U2VydmljZV8iPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQ3JlYXRpbmdfV2ViX1NlcnZpY2VfX0VjaG9fc2VydmljZV8iPjwvYT48aDM+Q3JlYXRpbmcgV2ViIFNlcnZpY2UgKEVjaG8gc2VydmljZSk8L2gzPjxwPkZpcnN0IGxldCdzIHNlZSBob3cgd2UgY2FuIHdyaXRlIGEgc2ltcGxlIFdlYiBTZXJ2aWNlIChlY2hvIHNlcnZpY2UpIHVzaW5nCkF4aXMyL0MncyBwcmltYXJ5IGludGVyZmFjZXMgYW5kIGhvdyB0byBkZXBsb3kgaXQuIEZvciB0aGlzIHB1cnBvc2Ugd2Ugd2lsbApjcmVhdGUgYSBXZWIgU2VydmljZSB3aXRoIG9uZSBvcGVyYXRpb24gYXMgZm9sbG93cy48L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmF4aW9tX25vZGVfdCogYXhpczJfZWNob19lY2hvKGF4aW9tX25vZGVfdCAqZWNob19ub2RlKXt9Cgo8L3ByZT48L2Rpdj4KICA8cD5Zb3UgY2FuIGhhdmUgYSBwZWVrIGF0IHRoZSBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBleGFtcGxlIGVjaG8Kc2VydmljZSBsb2NhdGVkIGluIHRoZSAiQVhJUzJDX0hPTUUvc2FtcGxlcy9zZXJ2ZXIvZWNobyIgZGlyZWN0b3J5LjwvcD48cD48YSBpZD0iSG93X3RvX3dyaXRlX3RoZV9XZWJfU2VydmljZV8iPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iSG93X3RvX3dyaXRlX3RoZV9XZWJfU2VydmljZV8iPjwvYT48aDM+SG93IHRvIHdyaXRlIHRoZSBXZWIgU2VydmljZT88L2gzPjxwPldyaXRpbmcgYSBuZXcgV2ViIFNlcnZpY2Ugd2l0aCBBeGlzMi9DIGludm9sdmVzIGZvdXIgc3RlcHMuIExldCdzIHRha2UgZWNobwpzZXJ2aWNlIGFzIG91ciBleGFtcGxlLjwvcD48b2w+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5Xcml0ZSBhIGVjaG9fc2tlbGV0b24uYyBmaWxlIHdoaWNoCiAgICBpbXBsZW1lbnRzIHRoZSBBUEkgZ2l2ZW4gaW4gYXhpczJfc3ZjX3NrZWxldG9uLmggaGVhZGVyIGZpbGUuPC9wPgogIDwvbGk+CiAgPGxpPldyaXRlIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHNvdXJjZSBmaWxlIChpbiB0aGlzIGNhc2UgZWNoby5jCiAgICBzZXJ2aWNlKSB3aGljaCBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgYnVzaW5lc3MgbG9naWMuPC9saT4KICA8bGk+V3JpdGUgYSBzZXJ2aWNlcy54bWwgZmlsZSB0byBleHBsYWluIHRoZSBXZWIgc2VydmljZS48L2xpPgogIDxsaT5DcmVhdGUgYSBmb2xkZXIgd2l0aCB0aGUgc2VydmljZSBuYW1lIHVuZGVyIEFYSVMyQ19IT01FL3NlcnZpY2VzIGFuZAogICAgcHV0IHRoZSBjb21waWxlZCBzZXJ2aWNlICggLmRsbCBvciAuc28gZmlsZSkgZm9yIHRoZSBXZWIgc2VydmljZSBhbmQKICAgIHNlcnZpY2VzLnhtbCBmaWxlIGludG8gdGhhdCBmb2xkZXIuPC9saT4KPC9vbD48cD48YSBuYW1lPSJTdGVwMSI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTdGVwMV86V3JpdGVfdGhlX2VjaG9fc2tlbGV0b25fY19maWxlX2ltcGxlbWVudGluZ190aGVfYXhpczJfc3ZjX3NrZWxldG9uX2giPjwvYT48aDM+U3RlcDEgOldyaXRlIHRoZSBlY2hvX3NrZWxldG9uLmMgZmlsZSBpbXBsZW1lbnRpbmcgdGhlIGF4aXMyX3N2Y19za2VsZXRvbi5oPC9oMz48cD5heGlzMl9zdmNfc2tlbGV0b24uaCBoZWFkZXIgZmlsZSBoYXMgdGhlIGF4aXMyX3N2Y19za2VsZXRvbl9vcHNfdApvcGVyYXRpb25zIHN0cnVjdCB3aGljaCBkZWZpbmVzIGZvdXIgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYmUgaW1wbGVtZW50ZWQgYW5kCmFzc2lnbmVkIGJ5IGEgc2VydmljZSBza2VsZXRvbi48L3A+PHA+VGhleSBhcmU6PC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPgppbnQgKEFYSVMyX0NBTEwgKiBpbml0KSAoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2VsZXRvbiwKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYpOwoKYXhpb21fbm9kZV90ICogKEFYSVMyX0NBTEwqIGludm9rZSkoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2VsaSwgCiBjb25zdCBheGlzMl9lbnZfdCAqZW52LCBheGlvbV9ub2RlX3QgKm5vZGUpOwoKYXhpb21fbm9kZV90ICooQVhJUzJfQ0FMTCogb25fZmF1bHQpKGF4aXMyX3N2Y19za2VsZXRvbl90ICpzdmNfc2tlbGksCiBjb25zdCBheGlzMl9lbnZfdCAqZW52LCBheGlvbV9ub2RlX3QgKm5vZGUpOwoKaW50IChBWElTMl9DQUxMICpmcmVlKShheGlzMl9zdmNfc2tlbGV0b25fdCAqc3ZjX3NrZWxpLCAKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYpOwoKPC9wcmU+PC9kaXY+CiAgPHA+TGV0J3MgaW1wbGVtZW50IHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yIGVjaG8gc2VydmljZS48L3A+PHA+PGk+PGNvZGU+LyqgSW5pdGlhbGl6ZaB0aGWgc2VydmljZaAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPmludKBBWElTMl9DQUxMPC9jb2RlPjxicj48L2JyPgo8Y29kZT5lY2hvX2luaXQoYXhpczJfc3ZjX3NrZWxldG9uX3SgKnN2Y19za2VsZXRvbiw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoGNvbnN0IGF4aXMyX2Vudl90oCplbnYpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtmdW5jX2FycmF5oD2gYXhpczJfYXJyYXlfbGlzdF9jcmVhdGUoZW52LKAwKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgQWRkoHRoZaBpbXBsZW1lbnRlZKBvcGVyYXRpb26gbmFtZXOgb2agdGhloHNlcnZpY2WgdG+goDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqoHRoZaBhcnJheaBsaXN0oG9moGZ1bmN0aW9uc6A8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgQVhJUzJfQVJSQVlfTElTVF9BREQoc3ZjX3NrZWxldG9uLSZndDtmdW5jX2FycmF5LKBlbnYsoCJlY2hvU3RyaW5nIik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxpPjxjb2RlPi8qoEFueaBpbml0aWFsaXphdGlvbqBzdHVmZqBvZqBlY2hvoHNlcnZpY2Wgc2hvdWxkoGdvoGhlcmWgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oEFYSVMyX1NVQ0NFU1M7PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGk+PGNvZGU+Lyo8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqAqoFRoaXOgbWV0aG9koGludm9rZXOgdGhloHJpZ2h0oHNlcnZpY2WgbWV0aG9koDwvY29kZT48YnI+PC9icj4KPGNvZGU+oCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+YXhpb21fbm9kZV90KqBBWElTMl9DQUxMPC9jb2RlPjxicj48L2JyPgo8Y29kZT5lY2hvX2ludm9rZShheGlzMl9zdmNfc2tlbGV0b25fdKAqc3ZjX3NrZWxldG9uLDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgY29uc3QgYXhpczJfZW52X3SgKmVudiw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoGF4aW9tX25vZGVfdKAqbm9kZSk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgSW52b2tloHRoZaBidXNpbmVzc6Bsb2dpYy48L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKqBEZXBlbmRpbmegb26gdGhloGZ1bmN0aW9uoG5hbWWgaW52b2tloHRoZaBjb3JyZWN0oGltcGygbWV0aG9kLjwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqoFdloGhhdmWgb25seaBlY2hvoGluoHRoaXOgc2FtcGxlLKBoZW5jZaBpbnZva2WgZWNob6BtZXRob2QuPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgVG+gc2VloGhvd6B0b6BkZWFsoHdpdGigbXVsdGlwbGWgaW1wbKBtZXRob2RzLKBoYXZloGGgbG9va6BhdKB0aGU8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKqBtYXRooHNhbXBsZS48L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oGF4aXMyX2VjaG9fZWNobyhlbnYsoG5vZGUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+fTwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+CjxpPjxjb2RlPi8qoE9uoGZhdWx0LKBoYW5kbGWgdGhloGZhdWx0oCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+YXhpb21fbm9kZV90KqBBWElTMl9DQUxMPC9jb2RlPjxicj48L2JyPgo8Y29kZT5lY2hvX29uX2ZhdWx0KGF4aXMyX3N2Y19za2VsZXRvbl90oCpzdmNfc2tlbGksoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgoKBjb25zdCBheGlzMl9lbnZfdKAqZW52LKBheGlvbV9ub2RlX3SgKm5vZGUpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKA8L2NvZGU+PGk+PGNvZGU+LyqgSGVyZaB3ZaBhcmWganVzdKBzZXR0aW5noGGgc2ltcGxloGVycm9yoG1lc3NhZ2WgaW5zaWRloGFuoGVsZW1lbnSgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgKqBjYWxsZWSgJ0VjaG9TZXJ2aWNlRXJyb3InoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX25vZGVfdKAqZXJyb3Jfbm9kZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbm9kZV90KqB0ZXh0X25vZGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX2VsZW1lbnRfdKAqZXJyb3JfZWxloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBlcnJvcl9lbGWgPaBheGlvbV9lbGVtZW50X2NyZWF0ZShlbnYsoG5vZGUsoCJFY2hvU2VydmljZUVycm9yIiygTlVMTCygPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoCZhbXA7ZXJyb3Jfbm9kZSk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgQVhJT01fRUxFTUVOVF9TRVRfVEVYVChlcnJvcl9lbGUsoGVudiygIkVjaG+gc2VydmljZaBmYWlsZWSgIiygPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHRleHRfbm9kZSk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oGVycm9yX25vZGU7PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGk+PGNvZGU+LyqgRnJlZaB0aGWgcmVzb3VyY2VzoHVzZWSgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT5pbnSgQVhJUzJfQ0FMTDwvY29kZT48YnI+PC9icj4KPGNvZGU+ZWNob19mcmVlKGF4aXMyX3N2Y19za2VsZXRvbl90oCpzdmNfc2tlbGV0b24sPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoKCgoKBjb25zdCBheGlzMl9lbnZfdKAqZW52KTwvY29kZT48YnI+PC9icj4KPGNvZGU+ezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBGcmVloHRoZaBmdW5jdGlvbqBhcnJheaAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPihzdmNfc2tlbGV0b24tJmd0O2Z1bmNfYXJyYXkpPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9BUlJBWV9MSVNUX0ZSRUUoc3ZjX3NrZWxldG9uLSZndDtmdW5jX2FycmF5LKBlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBzdmNfc2tlbGV0b24tJmd0O2Z1bmNfYXJyYXmgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgRnJlZaB0aGWgZnVuY3Rpb26gYXJyYXmgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT4oc3ZjX3NrZWxldG9uLSZndDtvcHMpPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9GUkVFKGVudi0mZ3Q7YWxsb2NhdG9yLKBzdmNfc2tlbGV0b24tJmd0O29wcyk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHN2Y19za2VsZXRvbi0mZ3Q7b3BzoD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxpPjxjb2RlPi8qoEZyZWWgdGhloHNlcnZpY2Wgc2tlbGV0b26gKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT4oc3ZjX3NrZWxldG9uKTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgQVhJUzJfRlJFRShlbnYtJmd0O2FsbG9jYXRvciygc3ZjX3NrZWxldG9uKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgc3ZjX3NrZWxldG9uoD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBBWElTMl9TVUNDRVNTO6A8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PGJyPjwvYnI+CjwvcD48cD48L3A+PHA+Tm93IHdlIGNhbiB3cml0ZSB0aGUgPGNvZGU+Y3JlYXRlPC9jb2RlPiBmdW5jdGlvbiBvZiB0aGUKZWNob19zZXJ2aWNlX3NrZWxldG9uIGFzIGZvbGxvd3M6PC9wPjxwPjxpPjxjb2RlPi8qQ3JlYXRloGZ1bmN0aW9uoCovPC9jb2RlPjxicj48L2JyPgo8L2k+PGNvZGU+YXhpczJfc3ZjX3NrZWxldG9uX3SgKjwvY29kZT48YnI+PC9icj4KPGNvZGU+YXhpczJfZWNob19jcmVhdGUoY29uc3QgYXhpczJfZW52X3SgKmVudik8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlzMl9zdmNfc2tlbGV0b25fdKAqc3ZjX3NrZWxldG9uoD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgQWxsb2NhdGWgbWVtb3J5oGZvcqB0aGWgc3RydWN0c6AqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b26gPaBBWElTMl9NQUxMT0MoZW52LSZndDthbGxvY2F0b3IsoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKA8L2NvZGU+PGI+PGNvZGU+c2l6ZW9mPC9jb2RlPjwvYj48Y29kZT4oYXhpczJfc3ZjX3NrZWxldG9uX3QpKTs8L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtvcHOgPaBBWElTMl9NQUxMT0MoPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoGVudi0mZ3Q7YWxsb2NhdG9yLKA8L2NvZGU+PGI+PGNvZGU+c2l6ZW9mPC9jb2RlPjwvYj48Y29kZT4oYXhpczJfc3ZjX3NrZWxldG9uX29wc190KSk7PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBBc3NpZ26gZnVuY3Rpb26gcG9pbnRlcnOgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtvcHMtJmd0O2ZyZWWgPaBlY2hvX2ZyZWU7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtvcHMtJmd0O2luaXSgPaBlY2hvX2luaXQ7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtvcHMtJmd0O2ludm9rZaA9oGVjaG9faW52b2tlOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHN2Y19za2VsZXRvbi0mZ3Q7b3BzLSZndDtvbl9mYXVsdKA9oGVjaG9fb25fZmF1bHQ7PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBzdmNfc2tlbGV0b247PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjwvcD48cD5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgZnVuY3Rpb25zLCBldmVyeSBzZXJ2aWNlIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nCnR3byBmdW5jdGlvbnMgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBhcyBpbiB4eHhfc2tlbGV0b24uYwpmaWxlLjwvcD48cD48Y29kZT5BWElTMl9FWFBPUlSgaW50oDwvY29kZT48YnI+PC9icj4KPGNvZGU+YXhpczJfZ2V0X2luc3RhbmNlKGF4aXMyX3N2Y19za2VsZXRvbl90oCoqaW5zdCw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoKCgoKCgoKBjb25zdCBheGlzMl9lbnZfdKAqZW52KTwvY29kZT48YnI+PC9icj4KPGNvZGU+ezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoCppbnN0oD2gYXhpczJfZWNob19jcmVhdGUoZW52KTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPighKCppbnN0KSk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBBWElTMl9GQUlMVVJFOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gQVhJUzJfU1VDQ0VTUzs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT5BWElTMl9FWFBPUlSgaW50oDwvY29kZT48YnI+PC9icj4KPGNvZGU+YXhpczJfcmVtb3ZlX2luc3RhbmNlKGF4aXMyX3N2Y19za2VsZXRvbl90oCppbnN0LDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoGNvbnN0IGF4aXMyX2Vudl90oCplbnYpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpczJfc3RhdHVzX3Sgc3RhdHVzoD2gQVhJUzJfRkFJTFVSRTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPqAoaW5zdCk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHN0YXR1c6A9oEFYSVMyX1NWQ19TS0VMRVRPTl9GUkVFKGluc3QsoGVudik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBzdGF0dXM7PC9jb2RlPjxicj48L2JyPgp9PGJyPjwvYnI+CjwvcD48cD48L3A+PHA+QXhpczIvQyBlbmdpbmUgY2FuIGxvYWQgdGhlIHNlcnZpY2UgZGxsLiBIb3dldmVyLCBpdCBuZWVkcyB0byBrbm93IHdoaWNoCm1ldGhvZCB0byBjYWxsLiBTaW5jZSBDIGRvZXMgbm90IGhhdmUgcmVmbGVjdGlvbiwgd2UgbmVlZCB0byBoYXZlIHNvbWUgZGxsCmV4cG9zaW5nIGZ1bmN0aW9ucyBrbm93biB0byBBeGlzMi9DIGVuZ2luZS4KPGI+PGNvZGU+YXhpczJfZ2V0X2luc3RhbmNlPC9jb2RlPjwvYj4gYW5kCjxiPjxjb2RlPmF4aXMyX3JlbW92ZV9pbnN0YW5jZTwvY29kZT48L2I+IGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8KYmUgZXhwb3NlZCBmcm9tIGEgc2VydmljZSBkbGwgKG9yIGFueSBvdGhlciBkbGwgb2YgQXhpczIvQyBlbmdpbmUpLiBBeGlzMi9DCmVuZ2luZSBjYWxscyA8Y29kZT5heGlzMl9nZXRfaW5zdGFuY2U8L2NvZGU+IG1ldGhvZCwgd2hpY2ggY3JlYXRlcyBhIG5ldwpzZXJ2aWNlIGluc3RhbmNlLCBhbmQgY2FzdHMgdGhlIHJldHVybiBwb2ludGVyIHRvCjxjb2RlPmF4aXMyX3N2Y19za2VsZXRvbjwvY29kZT4gaW50ZXJmYWNlLiBUaGVuLCB0aGUgaW50ZXJmYWNlIG1ldGhvZHMgY2FuIGJlCmNhbGxlZCBieSBBeGlzMi9DIGVuZ2luZS48L3A+PHA+PGEgbmFtZT0iU3RlcDIiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iU3RlcDJfOl9Ob3dfd2VfY2FuX3dyaXRlX3RoZV9lY2hvX3NlcnZpY2VfaW5fYV9maWxlX2VjaG9fYyI+PC9hPjxoMz5TdGVwMiA6IE5vdyB3ZSBjYW4gd3JpdGUgdGhlIGVjaG8gc2VydmljZSBpbiBhIGZpbGUgZWNoby5jPC9oMz48cD48Y29kZT5heGlvbV9ub2RlX3SgKjwvY29kZT48YnI+PC9icj4KPGNvZGU+YXhpczJfZWNob19lY2hvoChjb25zdCBheGlzMl9lbnZfdKAqZW52LKBheGlvbV9ub2RlX3SgKm5vZGUpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbm9kZV90oCp0ZXh0X3BhcmVudF9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9ub2RlX3SgKnRleHRfbm9kZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbm9kZV90oCpyZXRfbm9kZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoEFYSVMyX0VOVl9DSEVDSyhlbnYsoE5VTEwpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxpPjxjb2RlPi8qoEV4cGVjdGVkoHJlcXVlc3SgZm9ybWF0oGlzoDotPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgJmx0O25zMTplY2hvU3RyaW5noHhtbG5zOm5zMT0iaHR0cDovL2xvY2FsaG9zdDo5MDkwL2F4aXMyL3NlcnZpY2VzL2VjaG8iJmd0OzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqoKCgoKCgJmx0O3RleHQmZ3Q7ZWNobzUmbHQ7L3RleHQmZ3Q7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgJmx0Oy9uczE6ZWNob1N0cmluZyZndDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT6gKCFub2RlKaA8L2NvZGU+PGk+PGNvZGU+LyqgJ2VjaG9TdHJpbmcnoG5vZGWgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9FUlJPUl9TRVQoZW52LSZndDtlcnJvciygQVhJUzJfRVJST1JfU1ZDX1NLRUxfSU5QVVRfT01fTk9ERV9OVUxMLKBBWElTMl9GQUlMVVJFKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgcHJpbnRmKCJFY2hvoGNsaWVudKBFUlJPUjqgaW5wdXSgcGFyYW1ldGVyoE5VTExcbiIpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoHRleHRfcGFyZW50X25vZGWgPaBBWElPTV9OT0RFX0dFVF9GSVJTVF9DSElMRChub2RlLKBlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+oCghdGV4dF9wYXJlbnRfbm9kZSmgPC9jb2RlPjxpPjxjb2RlPi8qoCd0ZXh0J6Bub2RloCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgQVhJUzJfRVJST1JfU0VUKGVudi0mZ3Q7ZXJyb3IsoEFYSVMyX0VSUk9SX1NWQ19TS0VMX0lOVkFMSURfWE1MX0ZPUk1BVF9JTl9SRVFVRVNULKBBWElTMl9GQUlMVVJFKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgcHJpbnRmKCJFY2hvoGNsaWVudKBFUlJPUjqgaW52YWxpZKBYTUygaW6gcmVxdWVzdFxuIik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB0ZXh0X25vZGWgPaBBWElPTV9OT0RFX0dFVF9GSVJTVF9DSElMRCh0ZXh0X3BhcmVudF9ub2RlLKBlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+oCghdGV4dF9ub2RlKaA8L2NvZGU+PGk+PGNvZGU+LyqgYWN0dWFsoHRleHSgdG+gZWNob6AqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoEFYSVMyX0VSUk9SX1NFVChlbnYtJmd0O2Vycm9yLKBBWElTMl9FUlJPUl9TVkNfU0tFTF9JTlZBTElEX1hNTF9GT1JNQVRfSU5fUkVRVUVTVCygQVhJUzJfRkFJTFVSRSk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHByaW50ZigiRWNob6BjbGllbnSgRVJST1I6oGludmFsaWSgWE1MoGluoHJlcXVlc3RcbiIpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT6gKEFYSU9NX05PREVfR0VUX05PREVfVFlQRSh0ZXh0X25vZGUsoGVudimgPT2gQVhJT01fVEVYVCk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoGF4aW9tX3RleHRfdKAqdGV4dKA9oChheGlvbV90ZXh0X3SgKilBWElPTV9OT0RFX0dFVF9EQVRBX0VMRU1FTlQodGV4dF9ub2RlLKBlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPiigdGV4dKAmYW1wOyZhbXA7oEFYSU9NX1RFWFRfR0VUX1ZBTFVFKHRleHSgLKBlbnYpKTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoKCgoKBheGlzMl9jaGFyX3SgKnRleHRfc3RyoD2gQVhJT01fVEVYVF9HRVRfVkFMVUUodGV4dCygZW52KTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoHByaW50ZigiRWNob2luZ6B0ZXh0oHZhbHVloKAlc6BcbiIsoHRleHRfc3RyKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoHJldF9ub2RloD2gYnVpbGRfb21fcHJvZ3JhbWF0aWNhbGx5KGVudiygdGV4dF9zdHIpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKB9PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5lbHNlPC9jb2RlPjwvYj48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgQVhJUzJfRVJST1JfU0VUKGVudi0mZ3Q7ZXJyb3IsoEFYSVMyX0VSUk9SX1NWQ19TS0VMX0lOVkFMSURfWE1MX0ZPUk1BVF9JTl9SRVFVRVNULKBBWElTMl9GQUlMVVJFKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgcHJpbnRmKCJFY2hvoGNsaWVudKBFUlJPUjqgaW52YWxpZKBYTUygaW6gcmVxdWVzdFxuIik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oHJldF9ub2RlOzwvY29kZT48YnI+PC9icj4KPGNvZGU+fTwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+CjxpPjxjb2RlPi8qoEJ1aWxkc6B0aGWgcmVzcG9uc2WgY29udGVudKAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPmF4aW9tX25vZGVfdKAqPC9jb2RlPjxicj48L2JyPgo8Y29kZT5idWlsZF9vbV9wcm9ncmFtYXRpY2FsbHkoY29uc3QKYXhpczJfZW52X3SgKmVudiygYXhpczJfY2hhcl90oCp0ZXh0KTwvY29kZT48YnI+PC9icj4KPGNvZGU+ezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX25vZGVfdKAqZWNob19vbV9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9lbGVtZW50X3QqoGVjaG9fb21fZWxloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9ub2RlX3QqoHRleHRfb21fbm9kZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fZWxlbWVudF90oCqgdGV4dF9vbV9lbGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX25hbWVzcGFjZV90oCpuczGgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoG5zMaA9oGF4aW9tX25hbWVzcGFjZV9jcmVhdGWgKGVudiygImh0dHA6Ly9sb2NhbGhvc3Q6OTA5MC9heGlzMi9zZXJ2aWNlcy9lY2hvIiygIm5zMSIpOzwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+Cjxjb2RlPqCgoKBlY2hvX29tX2VsZaA9oGF4aW9tX2VsZW1lbnRfY3JlYXRlKGVudiygTlVMTCygImVjaG9TdHJpbmciLKBuczEsoCZhbXA7ZWNob19vbV9ub2RlKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB0ZXh0X29tX2VsZaA9oGF4aW9tX2VsZW1lbnRfY3JlYXRlKGVudiygZWNob19vbV9ub2RlLKAidGV4dCIsoE5VTEwsoCZhbXA7dGV4dF9vbV9ub2RlKTs8L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgQVhJT01fRUxFTUVOVF9TRVRfVEVYVCh0ZXh0X29tX2VsZSygZW52LKB0ZXh0LKB0ZXh0X29tX25vZGUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBlY2hvX29tX25vZGU7PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjxicj48L2JyPgo8L3A+PHA+PGEgbmFtZT0iU3RlcDMiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iU3RlcDNfOldyaXRlX3RoZV9zZXJ2aWNlc194bWxfZmlsZSI+PC9hPjxoMz5TdGVwMyA6V3JpdGUgdGhlIHNlcnZpY2VzLnhtbCBmaWxlPC9oMz48cD5BeGlzMi9DIHVzZXMgInNlcnZpY2VzLnhtbCIgZmlsZSB0byBrZWVwIGNvbmZpZ3VyYXRpb25zIG9mIGEgV2ViIHNlcnZpY2UuCkVhY2ggV2ViIHNlcnZpY2UgZGVwbG95ZWQgaW4gQXhpczIvQyBuZWVkcyBhICJzZXJ2aWNlcy54bWwiIGZpbGUgY29udGFpbmluZwp0aGUgY29uZmlndXJhdGlvbnMuIE5vdGUgdGhhdCBzZXJ2aWNlcy54bWwgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyBBeGlzMgpKYXZhJ3Mgc2VydmljZXMueG1sIGZpbGUuIE9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGluc3RlYWQgb2YgZ2l2aW5nIHBhY2thZ2UKcXVhbGlmaWVkIGNsYXNzIG5hbWUsIHdlIHVzZSB0aGUgZGxsIG5hbWUgZm9yIGNsYXNzIGF0dHJpYnV0ZXMuPC9wPjxwPiJzZXJ2aWNlcy54bWwiIGZvciBlY2hvIHdpbGwgYmUgYXMgZm9sbG93czo8L3A+PGNvZGUgY2xhc3M9ImNvZGUiPiZsdDtzZXJ2aWNlIG5hbWU9ImVjaG8iJmd0Ozxicj48L2JyPiAmbHQ7cGFyYW1ldGVyIG5hbWU9IlNlcnZpY2VDbGFzcyIgbG9ja2VkPSJ4c2Q6ZmFsc2UiJmd0O2VjaG8mbHQ7L3BhcmFtZXRlciZndDs8YnI+PC9icj4gJmx0O2Rlc2NyaXB0aW9uJmd0Ozxicj48L2JyPiBUaGlzIGlzIGEgZWNobyBzZXJ2aWNlPGJyPjwvYnI+ICZsdDsvZGVzY3JpcHRpb24mZ3Q7PGJyPjwvYnI+PGJyPjwvYnI+ICZsdDtvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyImZ3Q7PGJyPjwvYnI+ICZsdDtwYXJhbWV0ZXIgbmFtZT0id3NhbWFwcGluZyImZ3Q7PGJyPjwvYnI+IGh0dHA6Ly9sb2NhbGhvc3Q6OTA5MC9heGlzMi9zZXJ2aWNlcy9lY2hvL2VjaG9TdHJpbmc8YnI+PC9icj4gJmx0Oy9wYXJhbWV0ZXImZ3Q7PGJyPjwvYnI+ICZsdDsvb3BlcmF0aW9uJmd0Ozxicj48L2JyPiZsdDsvc2VydmljZSZndDs8L2NvZGU+PHA+TmFtZSBvZiB0aGUgc2VydmljZSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgd2l0aCB0aGUgc2hhcmVkIGxpYnJhcnkKYW5kIHNlcnZpY2VzLnhtbC4gSW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgaGF2ZSBhIGZvbGRlciBuYW1lZAoiZWNobyIgaW4gd2hpY2ggd2UgaGF2ZSB0aGUgZWNoby5kbGwgKG9yIGxpYmVjaG8uc28gb24gTGludXggcGxhdGZvcm0pIGFuZApzZXJ2aWNlcy54bWwgZmlsZS48L3A+PHA+WW91IGNhbiB3cml0ZSBhIHNlcnZpY2VzLnhtbCBmaWxlIHRvIGluY2x1ZGUgYSBncm91cCBvZiBzZXJ2aWNlcyBpbnN0ZWFkCm9mIGEgc2luZ2xlIHNlcnZpY2UuIFRoaXMgbWFrZXMgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBvZiBhIHNldCBvZiByZWxhdGVkCnNlcnZpY2VzIHZlcnkgZWFzeS4gQXQgcnVudGltZSB5b3UgY2FuIHNoYXJlIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlc2UKc2VydmljZXMgd2l0aGluIGEgc2luZ2xlIGludGVyYWN0aW9uIHVzaW5nIHRoZSA8Y29kZT5heGlzMl9zdmNfZ3JwX2N0eDwvY29kZT4KKFNlcnZpY2UgR3JvdXAgQ29udGV4dCApLiBJZiB5b3UgaG9wZSB0byB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5LCB0aGUKc2VydmljZXMueG1sIGZpbGUgc2hvdWxkIGhhdmUgZm9sbG93aW5nIGZvcm1hdDo8YnI+PC9icj4KPC9wPjxjb2RlIGNsYXNzPSJjb2RlIj4mbHQ7c2VydmljZUdyb3VwJmd0Ozxicj48L2JyPiAmbHQ7c2VydmljZSBuYW1lPSJTZXJ2aWNlMSImZ3Q7PGJyPjwvYnI+ICZsdDshLS0gZGV0YWlscyBmb3IgU2VydmljZTEgLS0mZ3Q7PGJyPjwvYnI+ICZsdDsvc2VydmljZSZndDs8YnI+PC9icj4gJmx0O3NlcnZpY2UgbmFtZT0iU2VydmljZTIiJmd0Ozxicj48L2JyPiAmbHQ7IS0tIGRldGFpbHMgZm9yIFNlcnZpY2UyIC0tJmd0Ozxicj48L2JyPiAmbHQ7L3NlcnZpY2UmZ3Q7PGJyPjwvYnI+ICZsdDttb2R1bGUgcmVmPSJNb2R1bGVOYW1lIiAvJmd0Ozxicj48L2JyPiAmbHQ7cGFyYW1ldGVyIG5hbWU9InNlcnZpY2VHcm91cFBhcmFtMSIgbG9ja2VkPSJmYWxzZSImZ3Q7dmFsdWUgMSZsdDsvcGFyYW1ldGVyJmd0Ozxicj48L2JyPiZsdDsvc2VydmljZUdyb3VwJmd0OzwvY29kZT48cD48c3Ryb25nPk5vdGUgOjwvc3Ryb25nPiBOYW1lIG9mIHRoZSBzZXJ2aWNlIGlzIGEgY29tcHVsc29yeSBhdHRyaWJ1dGU8L3A+PHA+PGEgbmFtZT0iU3RlcDQiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iU3RlcDRfOkNyZWF0ZV90aGVfV2ViX3NlcnZpY2VfZm9sZGVyX2luX3NlcnZpY2VzX2ZvbGRlcl9vZl90aGVfcmVwb3NpdG9yeV8iPjwvYT48aDM+U3RlcDQgOkNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgZm9sZGVyIGluIHNlcnZpY2VzIGZvbGRlciBvZiB0aGUgcmVwb3NpdG9yeS48L2gzPjxwPkluIEF4aXMyL0MgLCBpdCBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBmb2xkZXIgd2l0aCB0aGUgY29ycmVzcG9uZGluZwpzZXJ2aWNlL3NlcnZpY2UgZ3JvdXAgbmFtZSB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIHNoYXJlZCBsaWJyYXJ5IChjb21waWxlZApzZXJ2aWNlKSBhbmQgdGhlIHNlcnZpY2VzLnhtbCBmaWxlIHdoaWNoIGRlc2NyaWJlcyB0aGUgV2ViIHNlcnZpY2UuIFNvIGZvcgp0aGlzIGV4YW1wbGUsIHdlIHdpbGwgaGF2ZSB0byBjcmVhdGUgYSBmb2xkZXIgbmFtZWQgImVjaG8iLCB3aGljaCBjb250YWlucwp0aGUgc2VydmljZXMueG1sIGZpbGUgYW5kIGVjaG8gZGxsLjwvcD48cD48YSBuYW1lPSJTdGVwNSI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTdGVwNV86QXJjaGl2ZV9CYXNlZF9EZXBsb3ltZW50X01vZGVsIj48L2E+PGgzPlN0ZXA1IDpBcmNoaXZlIEJhc2VkIERlcGxveW1lbnQgTW9kZWw8L2gzPjxwPkF4aXMyIHVzZXMgIi5hYXIiIChBeGlzIEFyY2hpdmUpIGZpbGUgYXMgdGhlIGRlcGxveW1lbnQgcGFja2FnZSBmb3IgdGhlCldlYiBzZXJ2aWNlcy4gVGhlcmVmb3JlLCBmb3IgZWNobyBzZXJ2aWNlIHdlIHdpbGwgdXNlICJlY2hvLmFhciIuIE5vdGUgdGhhdAp0aGUgbmFtZSBvZiB0aGUgc2VydmljZSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIGZpbGUuIFRvIGNyZWF0ZQoiZWNoby5hYXIiIHVzZXIgY2FuIGNyZWF0ZSBhIHppcCBmaWxlIGNvbnRhaW5pbmcgZWNoby5zbyBhbmQgc2VydmljZXMueG1sIGFuZApyZW5hbWUgdGhlIHppcCBleHRlbnNpb24gdG8gYWFyLiBUaGVuIEF4aXMyIHVuZGVyc3RhbmRzIGl0IGFzIGEgc2VydmljZQphcmNoaXZlLjwvcD48cD48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlc19Vc2luZ19Db2RlX0dlbmVyYXRvciI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlc19Ta2VsZXRvbl9Vc2luZ19Db2RlX0dlbmVyYXRvciI+PC9hPjxoMz5Xcml0aW5nIFdlYiBTZXJ2aWNlcyBTa2VsZXRvbiBVc2luZyBDb2RlIEdlbmVyYXRvcjwvaDM+PHA+PGEgaWQ9IldTREwyQ190b29sIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IldTREwyQ190b29sIj48L2E+PGgzPldTREwyQyB0b29sPC9oMz48cD5BeGlzMi9KYXZhIFdTREwyQyB0b29sIHN1cHBvcnRzIGdlbmVyYXRpb24gb2YgQXhpczIvQyBzdHViIGFuZApza2VsZXRvbi4gPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy93ZWJzZXJ2aWNlcy9heGlzMi90cnVuay9qYXZhIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+QXhpczIvSmF2YQpTVk48L2E+IHJldmlzaW9uIDQxNDI1MyBhbmQgbGF0ZXIgdmVyc2lvbnMgcHJvdmlkZSB0aGlzIGZhY2lsaXR5LiBBIGJhc2ljCmd1aWRlIGZvciB0aGUgdG9vbCBjYW4gYmUgZm91bmQgPGEgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvMV8wL3VzZXJndWlkZTIuaHRtbCNXcml0aW5nX1dlYl9TZXJ2aWNlc19ieV9Db2RlX0dlbmVyYXRpbmdfU2tlbGV0b24iIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5oZXJlLjwvYT48L3A+PHA+V2Ugd2lsbCBydW4gdGhlIHRvb2wgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYW5kIGdlbmVyYXRlIHRoZQpza2VsZXRvbiBhbmQgb3RoZXIgcmVxdWlyZWQgZmlsZXMgdG8gc3VwcG9ydCBBREIgKEF4aXMgRGF0YSBCaW5kaW5nKS4gSW4Kb3JkZXIgdG8gcnVuIHRoZSB0b29sLCA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5zZXQgYWxsIHRoZSAuamFyCmxpYnJhcnkgZmlsZXMgaW4gdGhlIEF4aXMyL0phdmEgdG8gdGhlIGNsYXNzcGF0aDwvc3Bhbj4uIFRvIGdlbmVyYXRlIGNvZGUKd2l0aCBubyBkYXRhIGJpbmRpbmcgc3VwcG9ydCwganVzdCByZXBsYWNlIC1kIGFkYiAtdSB3aXRoIC1kIG5vbmU8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmphdmEgb3JnLmFwYWNoZS5heGlzMi53c2RsLldTREwyQyAtdXJpIGludGVyb3B0ZXN0ZG9jbGl0cGFyYW1ldGVycy53c2RsIC1zcyAtc2QgLWQgYWRiIC11IAoKCjwvcHJlPjwvZGl2PgogIDxwPklmIHlvdSBuZWVkIGFuIFhNTCBpbi9vdXQgcHJvZ3JhbW1pbmcgbW9kZWwsIHlvdSBjYW4ganVzdCBpZ25vcmUgdGhlIGRhdGEKYmluZGluZyBzdXBwb3J0IGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgo8cHJlPmphdmEgb3JnLmFwYWNoZS5heGlzMi53c2RsLldTREwyQyAtdXJpIGludGVyb3B0ZXN0ZG9jbGl0cGFyYW1ldGVycy53c2RsIC1zcyAtc2QgLWQgbm9uZTwvcHJlPgoKPC9wPjxwPlRoZSBXU0RMIDxjb2RlPmludGVyb3B0ZXN0ZG9jbGl0cGFyYW1ldGVycy53c2RsPC9jb2RlPiBjYW4gYmUgZm91bmQgaW4KJmx0O2F4aXMyX3NyY19kaXImZ3Q7L3Rlc3QvcmVzb3VyY2VzIGRpcmVjdG9yeS4gVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHN0dWIKYW5kIHNrZWxldG9uIGNvZGUgdGhyb3VnaG91dCB0aGlzIFVzZXIncyBHdWlkZS48L3A+PHA+PGEgaWQ9IkltcGxlbWVudF90aGVfQnVzaW5lc3NfTG9naWMiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iSW1wbGVtZW50X3RoZV9CdXNpbmVzc19Mb2dpYyI+PC9hPjxoMz5JbXBsZW1lbnQgdGhlIEJ1c2luZXNzIExvZ2ljPC9oMz48cD4KTG9jYXRlIHRoZSBza2VsZXRvbiBzb3VyY2UgZmlsZSBmcm9tIHRoZSBnZW5lcmF0ZWQgZmlsZXM6CiI8Y29kZT5heGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlLmM8L2NvZGU+Ii4gWW91IGNhbiBnbyB0aHJvdWdoIHRoZQpyZXN0IG9mIHRoZSBndWlkZSB0byBhZGQgdGhlIGJ1c2luZXNzIGxvZ2ljIHRvIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBpbgp0aGUgV1NETC4KPHVsPgogIDxsaT5lY2hvU3RyaW5nIC0gT3BlcmF0aW9uIHRoYXQgZWNob2VzIGEgU3RyaW5nIHZhbHVlLjwvbGk+CiAgPGxpPmVjaG9TdHJpbmdBcnJheSAtIE9wZXJhdGlvbiB0aGF0IGFjY2VwdHMgYSBzdHJpbmcgYXJyYXkgYXMgdGhlIGlucHV0IGFuZAogICAgZWNob2VzIHRoZW0gYmFjay48L2xpPgogIDxsaT5lY2hvU3RydWN0IC0gT3BlcmF0aW9uIHRoYXQgYWNjZXB0cyBhIFN0cnVjdCBhcyB0aGUgaW5wdXQgYW5kIGVjaG9lcwogICAgdGhlbSBiYWNrLjwvbGk+CjwvdWw+PC9wPjxwPkNvbXBsZXRlIHNrZWxldG9uIHNvdXJjZSBmaWxlIGZvciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBjYW4gYmUgZm91bmQgdW5kZXIKJmx0O2F4aXMyX3NyY19kaXImZ3Q7L3NhbXBsZXMvY29kZWdlbi9zZXJ2ZXIvaW50ZXJvcF9kb2MyIGRpcmVjdG9yeSB3aXRoIHRoZQpuYW1lICI8Y29kZT5heGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlLmM8L2NvZGU+Ii48L3A+PHA+PGEgaWQ9ImVjaG9TdHJpbmciPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iZWNob1N0cmluZyI+PC9hPjxoMz5lY2hvU3RyaW5nPC9oMz48cD5JZiB5b3UgZ2VuZXJhdGUgdGhlIGNvZGUgd2l0aCBkYXRhIGJpbmRpbmcgc3VwcG9ydCwgeW91IHdpbGwgZmluZCB0aGUKZm9sbG93aW5nIGNvZGUgc2VnbWVudCBpbiB0aGUKIjxjb2RlPmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2UuYzwvY29kZT4iLiBGaWxsIHRoZSBidXNpbmVzcyBsb2dpYwppbnNpZGUgdGhpcyBmdW5jdGlvbiBhcyBzaG93biBiZWxvdzo8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmF4aXMyX2VjaG9TdHJpbmdSZXNwb25zZV90KgpheGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlX2VjaG9TdHJpbmcKIChjb25zdCBheGlzMl9lbnZfdCogZW52ICxheGlzMl9lY2hvU3RyaW5nX3QqIHBhcmFtNiApCnsKIC8qIFRvZG8gZmlsbCB0aGlzIHdpdGggdGhlIG5lY2Vzc2FyeSBidXNpbmVzcyBsb2dpYyAqfQoKCjwvcHJlPjwvZGl2PgogIDxwPk9uY2UgdGhlIGJ1c2luZXNzIGxvZ2ljIGlzIGZpbGxlZCwgaXQgd2lsbCBiZSBhcyBmb2xsb3dzLiBUaGUgY29kZSBpcwpzaW1wbGUgYW5kIHRoZSBpbmxpbmUgY29tbWVudHMgcHJvdmlkZSBleHBsYW5hdGlvbi48L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmF4aXMyX2VjaG9TdHJpbmdSZXNwb25zZV90KgpheGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlX2VjaG9TdHJpbmcKIChjb25zdCBheGlzMl9lbnZfdCogZW52ICxheGlzMl9lY2hvU3RyaW5nX3QqIHBhcmFtNiApCnsKIGF4aXMyX2VjaG9TdHJpbmdfdCogZWNob19pbiA9IHBhcmFtNjsKIGF4aXMyX2VjaG9TdHJpbmdSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CgogY2hhciogZWNob19zdHJpbmcgPSBOVUxMOwogCiAvKiByZXRyaWV2ZSB0aGUgc3RyaW5nIGlucHV0ICovCiBlY2hvX3N0cmluZyA9IEFYSVMyX0VDSE9TVFJJTkdfR0VUX1BBUkFNMCAoIGVjaG9faW4sIGVudiApOwoKIC8qIGNyZWF0ZSB0aGUgcmVzcG9uc2UgYW5kIHNldCB0aGUgb3V0cHV0IHN0cmluZyAqLwogZWNob19vdXQgPSBheGlzMl9lY2hvU3RyaW5nUmVzcG9uc2VfY3JlYXRlICggZW52ICk7CiBBWElTMl9FQ0hPU1RSVUNUUkVTUE9OU0VfU0VUX1JFVFVSTiAoIGVjaG9fb3V0LCBlbnYsIGVjaG9fc3RyaW5nICk7CgogcmV0dXJuIGVjaG9fb3V0Owp9Cgo8L3ByZT48L2Rpdj4KICA8L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvU3RyaW5nQXJyYXkiPjwvYT48aDM+ZWNob1N0cmluZ0FycmF5PC9oMz4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KYXhpczJfZWNob1N0cmluZ0FycmF5UmVzcG9uc2VfdCoKYXhpczJfV1NETEludGVyb3BUZXN0RG9jTGl0U2VydmljZV9lY2hvU3RyaW5nQXJyYXkKIChjb25zdCBheGlzMl9lbnZfdCogZW52ICxheGlzMl9lY2hvU3RyaW5nQXJyYXlfdCogcGFyYW0yICkKCnsKIGF4aXMyX2VjaG9TdHJpbmdBcnJheV90KiBlY2hvX2luID0gcGFyYW0yOwogYXhpczJfZWNob1N0cmluZ0FycmF5UmVzcG9uc2VfdCogZWNob19vdXQgPSBOVUxMOwogYXhpczJfQXJyYXlPZnN0cmluZ19saXRlcmFsX3QqIGFycmF5X2luID0gTlVMTDsKIGF4aXMyX0FycmF5T2ZzdHJpbmdfbGl0ZXJhbF90KiBhcnJheV9vdXQgPSBOVUxMOwogY2hhciAqKiBzdHJpbmdfYXJyYXkgPSBOVUxMOwogaW50IHN0cmluZ19hcnJheV9sZW5ndGggPSAwOwogCiAvKiByZXRyaWV2ZSB0aGUgYXJyYXkgZnJvbSBpbnB1dCovCiBhcnJheV9pbiA9IEFYSVMyX0VDSE9TVFJJTkdBUlJBWV9HRVRfUEFSQU0wKCBlY2hvX2luLCBlbnYpOwogLyogcmV0cmlldmUgdGhlIHN0cmluZ19hcnJheSBhbmQgYXJyYXkgbGVuZ3RoICovCiBzdHJpbmdfYXJyYXkgPQogQVhJUzJfQVJSQVlPRlNUUklOR19MSVRFUkFMX0dFVF9TVFJJTkcgCiAoYXJyYXlfaW4sIGVudiwmYW1wO3N0cmluZ19hcnJheV9sZW5ndGggKTsKIAogLyogY3JlYXRlIHRoZSBvdXRwdXQgYXJyYXkgYW5kIHNldCB0aGUgc3RyaW5nIGFycmF5IGFuZCBsZW5ndGggKi8KIGFycmF5X291dCA9IGF4aXMyX0FycmF5T2ZzdHJpbmdfbGl0ZXJhbF9jcmVhdGUgKCBlbnYgKTsKIEFYSVMyX0FSUkFZT0ZTVFJJTkdfTElURVJBTF9TRVRfU1RSSU5HKAogYXJyYXlfb3V0LCBlbnYsIHN0cmluZ19hcnJheSwgc3RyaW5nX2FycmF5X2xlbmd0aCApOwogCiAvKiBjcmVhdGUgdGhlIHJlc3BvbnNlIGFuZCBzZXQgdGhlIG91dHB1dCovCiBlY2hvX291dCA9IGF4aXMyX2VjaG9TdHJpbmdBcnJheVJlc3BvbnNlX2NyZWF0ZSAoIGVudiApOwogQVhJUzJfRUNIT1NUUklOR0FSUkFZUkVTUE9OU0VfU0VUX1JFVFVSTiAoIGVjaG9fb3V0LCBlbnYgLCBhcnJheV9vdXQKICk7CiAKIHJldHVybiBlY2hvX291dDsKCjwvcHJlPjwvZGl2PgogIDwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9ImVjaG9TdHJ1Y3QiPjwvYT48aDM+ZWNob1N0cnVjdDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmF4aXMyX2VjaG9TdHJ1Y3RSZXNwb25zZV90KgpheGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlX2VjaG9TdHJ1Y3QKIChjb25zdCBheGlzMl9lbnZfdCogZW52ICxheGlzMl9lY2hvU3RydWN0X3QqIHBhcmFtNCApCgp7CiBheGlzMl9lY2hvU3RydWN0X3QqIGVjaG9faW4gPSBwYXJhbTQ7CiBheGlzMl9lY2hvU3RydWN0UmVzcG9uc2VfdCogZWNob19vdXQgPSBOVUxMOwogYXhpczJfU09BUFN0cnVjdF90KiBzdHJ1Y3RfaW4gPSBOVUxMOwogYXhpczJfU09BUFN0cnVjdF90KiBzdHJ1Y3Rfb3V0ID0gTlVMTDsKIAogZmxvYXQgZmxvYXRfdmFsID0gMDsKIGludCBpbnRfdmFsID0gMDsKIGNoYXIqIHN0cmluZ192YWwgPSBOVUxMOwogCiAvKiByZXRyaWV2ZSB0aGUgc3RydWN0dXJlIGZyb20gaW5wdXQgKi8KIHN0cnVjdF9pbiA9IEFYSVMyX0VDSE9TVFJVQ1RfR0VUX1BBUkFNMCggZWNob19pbiwgZW52KTsKCiAvKiByZXRyaWV2ZSBlYWNoIHZhbHVlIGZyb20gdGhlIHN0cnVjdHVyZSAqLyAKIGZsb2F0X3ZhbCA9IEFYSVMyX1NPQVBTVFJVQ1RfR0VUX1ZBUkZMT0FUICggc3RydWN0X2luLCBlbnYpOwogaW50X3ZhbCA9IEFYSVMyX1NPQVBTVFJVQ1RfR0VUX1ZBUklOVCAoIHN0cnVjdF9pbiwgZW52KTsKIHN0cmluZ192YWwgPSBBWElTMl9TT0FQU1RSVUNUX0dFVF9WQVJTVFJJTkcgKCBzdHJ1Y3RfaW4sIGVudik7CiAKIC8qIGNyZWF0ZSB0aGUgb3V0cHV0IHN0cnVjdHVyZSBhbmQgc2V0IHZhbHVlcyAqLwogc3RydWN0X291dCA9IGF4aXMyX1NPQVBTdHJ1Y3RfY3JlYXRlKCBlbnYgKTsKIEFYSVMyX1NPQVBTVFJVQ1RfU0VUX1ZBUkZMT0FUICggc3RydWN0X291dCwgZW52LCBmbG9hdF92YWwgKTsKIEFYSVMyX1NPQVBTVFJVQ1RfU0VUX1ZBUklOVCAoIHN0cnVjdF9vdXQsIGVudiwgaW50X3ZhbCApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSU1RSSU5HICggc3RydWN0X291dCwgZW52LCBzdHJpbmdfdmFsICk7CiAKIC8qIGNyZWF0ZSB0aGUgcmVzcG9uc2UgYW5kIHNldCB0aGUgb3V0cHV0IHN0cnVjdHVyZSovCiBlY2hvX291dCA9IGF4aXMyX2VjaG9TdHJ1Y3RSZXNwb25zZV9jcmVhdGUgKCBlbnYgKTsKIEFYSVMyX0VDSE9TVFJVQ1RSRVNQT05TRV9TRVRfUkVUVVJOICggZWNob19vdXQsIGVudiwgc3RydWN0X291dCApOwogCiByZXR1cm4gZWNob19vdXQ7Cgo8L3ByZT48L2Rpdj4KICA8L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJzZXJ2aWNlc194bWwiPjwvYT48aDM+c2VydmljZXMueG1sPC9oMz48cD4KQXhpczIgdXNlcyAic2VydmljZXMueG1sIiB0byBob2xkIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIFdlYgpzZXJ2aWNlIGRlcGxveWVkIGluIHRoZSBBeGlzMiBlbmdpbmUuIFdoZW4gd2UgZ2VuZXJhdGUgdGhlIHNrZWxldG9uIHVzaW5nIHRoZQpXU0RMMkphdmEgdG9vbCwgaXQgd2lsbCBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgc2VydmljZXMueG1sIGZvciB0aGlzIFdlYgpzZXJ2aWNlIGFzIHdlbGwuIFRoaXMgaXMgZXNzZW50aWFsIHRvIDxhIGhyZWY9IiNkZXBsb3kiPmRlcGxveSB0aGUKc2VydmljZTwvYT4uIFBsZWFzZSByZWZlciB0byB0aGUgJzxhIGhyZWY9IiNTdGVwMyI+V3JpdGUgdGhlCnNlcnZpY2VzLnhtbDwvYT4nIHNlY3Rpb24gaW4gdGhpcyBndWlkZSB0byBsZWFybiBtb3JlIGFib3V0IHNlcnZpY2VzLnhtbC4KPGEgbmFtZT0iZGVwbG95Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkRlcGxveV90aGVfV2ViX1NlcnZpY2UiPjwvYT48aDM+RGVwbG95IHRoZSBXZWIgU2VydmljZTwvaDM+PHA+V2Ugc2ltcGx5IHB1dCBvdXIgc2VydmljZSBmb2xkZXIgb3IgdGhlICIuYWFyIiBmaWxlIHRvIHRoZSBzZXJ2aWNlcwpkaXJlY3RvcnkuIFlvdSBuZWVkIHJlc3RhcnQgdGhlIHNlcnZlciBmb3IgdGhlIGVuZ2luZSB0byBwaWNrIHRoaXMKc2VydmljZS48L3A+PHA+PGEgbmFtZT0iV2ViX1NlcnZpY2VfQ2xpZW50c19Vc2luZ19BeGlzMiI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXZWJfU2VydmljZV9DbGllbnRzX1VzaW5nX0F4aXMyX0MiPjwvYT48aDM+V2ViIFNlcnZpY2UgQ2xpZW50cyBVc2luZyBBeGlzMi9DPC9oMz48cD5Ob3cgbGV0J3Mgc2VlIGhvdyB3ZSBjYW4gd3JpdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdG8gY29uc3VtZSBhIFdlYgpzZXJ2aWNlLjwvcD48cD5XZWIgc2VydmljZXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSB3aWRlIHJhbmdlIG9mIGZ1bmN0aW9uYWxpdHkgdG8gdGhlCnVzZXJzIHJhbmdpbmcgZnJvbSBzaW1wbGUsIGxlc3MgdGltZSBjb25zdW1pbmegIG9wZXJhdGlvbnMgc3VjaCBhcwoiZ2V0U3RvY2tRdW90ZSKgIHRvIHRpbWUgY29uc3VtaW5nIGJ1c2luZXNzIHNlcnZpY2VzLiBXaGVuIHdlIHV0aWxpemUgKGludm9rZQp1c2luZyBjbGllbnQgYXBwbGljYXRpb25zKSB0aGVzZSBXZWIgc2VydmljZXMsIHdlIGNhbm5vdCB1c2Ugc29tZSBzaW1wbGUKZ2VuZXJpYyBpbnZvY2F0aW9uIHBhcmFkaWdtIHRoYXQgc3VpdHMgYWxsIHRoZSB0aW1pbmcgY29tcGxleGl0aWVzIGludm9sdmVkCmluIHRoZSBzZXJ2aWNlIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBpZiB3ZSB1c2UgYSBzaW5nbGUgdHJhbnNwb3J0IGNoYW5uZWwKKHN1Y2ggYXMgSFRUUCkgdG8gaW52b2tlIGEgV2ViIHNlcnZpY2Ugd2l0aCBhbiBJTi1PVVQgb3BlcmF0aW9uIHdoaWNoIHRha2VzCmEgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLCB0aGVuIG1vc3Qgb2YgdGhlIHRpbWUgd2UgbWF5IGVuZCB1cCB3aXRoICJjb25uZWN0aW9uCnRpbWUgb3V0cyIuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGVyZSBhcmUgc2ltdWx0YW5lb3VzIHNlcnZpY2UgaW52b2NhdGlvbnMKdGhhdKB3ZSBuZWVkIHRvIHBlcmZvcm0gZnJvbSBhIHNpbmdsZSBjbGllbnQgYXBwbGljYXRpb24sIHRoZW4gdGhlIHVzZSBvZiBhCiJibG9ja2luZyIgY2xpZW50IEFQSSB3aWxsIGRlZ3JhZGUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBjbGllbnQgYXBwbGljYXRpb24uClNpbWlsYXJseSwgdGhlcmUgYXJlIHZhcmlvdXMgb3RoZXIgY29uc2VxdWVuY2VzIHN1Y2ggYXMgT25lLVdheSB0cmFuc3BvcnRzCnRoYXQgY29tZSBpbnRvIHBsYXkgd2hlbiB3ZSBuZWVkIHRoZW0uIExldCdzIHRyeSB0byBhbmFseXplIHNvbWUgY29tbW9uCnNlcnZpY2UgaW52b2NhdGlvbiBwYXJhZGlnbXMuPC9wPjxwPk1hbnkgV2ViIHNlcnZpY2UgZW5naW5lcyBwcm92aWRlIHRoZSB1c2VycyB3aXRoIGEgQmxvY2tpbmcgYW5kCk5vbi1CbG9ja2luZyBjbGllbnQgQVBJcy48L3A+PHVsPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGI+QmxvY2tpbmcgQVBJPC9iPiAtT25jZSB0aGUgc2VydmljZQogICAgaW52b2NhdGlvbiBpcyBjYWxsZWQsIHRoZSBjbGllbnQgYXBwbGljYXRpb24gaGFuZ3MgYW5kIG9ubHkgZ2V0cyBjb250cm9sCiAgICBiYWNrIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGFmdGVyIHdoaWNoIGNsaWVudCByZWNlaXZlcyBhIHJlc3BvbnNlCiAgICBvciBhIGZhdWx0LiBUaGlzIGlzIHRoZSBzaW1wbGVzdCB3YXkgb2YgaW52b2tpbmcgV2ViIHNlcnZpY2VzIGFuZCBpdCBhbHNvCiAgICBzdWl0cyBtYW55IGJ1c2luZXNzIHNpdHVhdGlvbnMuPC9wPgogIDwvbGk+CiAgPGxpPjxiPk5vbi1CbG9ja2luZyBBUEk8L2I+LSBUaGlzIGlzIGEgY2FsbGJhY2sgb3IgcG9sbGluZyBiYXNlZCBBUEkuCiAgICBIZW5jZSwgb25jZSBhIHNlcnZpY2UgaW52b2NhdGlvbiBpcyBjYWxsZWQsIHRoZSBjbGllbnQgYXBwbGljYXRpb24KICAgIGltbWVkaWF0ZWx5IGdldHMgdGhlIGNvbnRyb2wgYmFjayBhbmQgdGhlIHJlc3BvbnNlIGlzIHJldHJpZXZlZCB1c2luZyB0aGUKICAgIGNhbGxiYWNrIG9iamVjdCBwcm92aWRlZC4gVGhpcyBhcHByb2FjaCBwcm92aWRlcyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uCiAgICB3aXRoIHRoZSBmbGV4aWJpbGl0eSB0byBpbnZva2Ugc2V2ZXJhbCBXZWIgc2VydmljZXMgc2ltdWx0YW5lb3VzbHkgd2l0aG91dAogICAgYmxvY2tpbmcgdGhlIG9wZXJhdGlvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW52b2tlZC48L2xpPgo8L3VsPjxwPkJvdGggdGhlc2UgbWVjaGFuaXNtcyB3b3JrIGluIHRoZSBBUEkgbGV2ZWwuIExldCdzIG5hbWUgdGhloGFzeW5jaHJvbm91cwpiZWhhdmlvciB0aGF0IHdlIGNhbiBnZXQgdXNpbmcgdGhlIDxzdHJvbmc+Tm9uLUJsb2NraW5nIEFQSTwvc3Ryb25nPiBhcwo8Yj5BUEkgTGV2ZWwgQXN5bmNocm9ueS48L2I+PC9wPjxwPkJvdGggdGhlc2UgbWVjaGFuaXNtcyB1c2Ugc2luZ2xlIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIHNlbmQgdGhlIHJlcXVlc3QKYW5kIHRvIHJlY2VpdmUgdGhlIHJlc3BvbnNlLiBUaGV5IHNldmVyZWx5IGxhY2sgdGhlIGNhcGFiaWxpdHkgb2YgdXNpbmcgdHdvCnRyYW5zcG9ydCBjb25uZWN0aW9ucyBmb3IgdGhlIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSAoZWl0aGVyIE9uZS1XYXkgb2YKVHdvLVdheSkuIFNvIGJvdGggdGhlc2UgbWVjaGFuaXNtcyBmYWlsIHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gb2YgbG9uZwpydW5uaW5nIHRyYW5zYWN0aW9ucyAodGhlIHRyYW5zcG9ydCBjb25uZWN0aW9uIG1heSB0aW1lLW91dCBiZWZvcmUgdGhlCm9wZXJhdGlvbiBjb21wbGV0ZXMpLiBBIHBvc3NpYmxlIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSA8c3Ryb25nPnR3bwpzZXBhcmF0ZSB0cmFuc3BvcnQgY29ubmVjdGlvbnMgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlPC9zdHJvbmc+LiBUaGUKYXN5bmNocm9ub3VzIGJlaGF2aW9yIHRoYXQgd2UgZ2FpbiB1c2luZyB0aGlzIHNvbHV0aW9uIGNhbiBiZSBjYWxsZWQKPGI+VHJhbnNwb3J0IExldmVsIEFzeW5jaHJvbnk8L2I+LjwvcD48cD5CeSBjb21iaW5pbmcgQVBJIExldmVsIEFzeW5jaHJvbnkgJmFtcDsgVHJhbnNwb3J0IExldmVsIEFzeW5jaHJvbnkgd2UgY2FuCm9idGFpbiBmb3VyIGRpZmZlcmVudCBpbnZvY2F0aW9uIHBhdHRlcm5zIGZvciBXZWIgc2VydmljZXMgYXMgc2hvd24gaW4gdGhlCmZvbGxvd2luZyB0YWJsZS48L3A+PHA+PC9wPjx0YWJsZSBjbGFzcz0iYm9keVRhYmxlIj48dGJvZHk+CiAgICA8dHIgY2xhc3M9ImEiPjx0ZD48c3Ryb25nPkFQSSAoQmxvY2tpbmcvTm9uLUJsb2NraW5nKTwvc3Ryb25nPjwvdGQ+PHRkPjxzdHJvbmc+oER1YWwgVHJhbnNwb3J0cyAoWWVzL05vKTwvc3Ryb25nPjwvdGQ+PHRkPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImIiPjx0ZD5CbG9ja2luZzwvdGQ+PHRkPk5vPC90ZD48dGQ+U2ltcGxlc3QgYW5kIHRoZSBmYW1pbGlhciBpbnZvY2F0aW9uIHBhdHRlcm48L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImEiPjx0ZD5Ob24tQmxvY2tpbmc8L3RkPjx0ZD5ObzwvdGQ+PHRkPlVzaW5nIGNhbGxiYWNrcyBvciBwb2xsaW5nPC90ZD48L3RyPgogICAgPHRyIGNsYXNzPSJiIj48dGQ+QmxvY2tpbmc8L3RkPjx0ZD5ZZXM8L3RkPjx0ZD5UaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBzZXJ2aWNlIG9wZXJhdGlvbiBpcyBJTi1PVVQgaW4gbmF0dXJlIGJ1dAogICAgICAgIHRoZSB0cmFuc3BvcnQgdXNlZCBpcyBPbmUtV2F5IChlLmcuIFNNVFApPC90ZD48L3RyPgogICAgPHRyIGNsYXNzPSJhIj48dGQ+Tm9uLUJsb2NraW5nPC90ZD48dGQ+WWVzPC90ZD48dGQ+VGhpcyBjYW4gYmUgdXNlZCB0byBnYWluIHRoZSBtYXhpbXVtIGFzeW5jaHJvbm91cyBiZWhhdmlvci4gTm8KICAgICAgICBibG9ja2luZyBpbiB0aGUgQVBJIGxldmVsIGFuZCBhbHNvIGluIHRoZSB0cmFuc3BvcnQgbGV2ZWw8L3RkPjwvdHI+CiAgPC90Ym9keT48L3RhYmxlPjxwPkF4aXMyL0MgcHJvdmlkZXMgdGhlIHVzZXIgd2l0aCBhbGwgdGhlc2UgcG9zc2liaWxpdGllcyB0byBpbnZva2UgV2ViCnNlcnZpY2VzLjwvcD48cD5CZWxvdyB3ZSBkZXNjcmliZSBob3cgdG8gd3JpdGUgV2ViIFNlcnZpY2VzIENsaWVudHMgdXNpbmcgQXhpczIvQy48L3A+PHA+PGEgbmFtZT0iV3JpdGluZ19XZWJfU2VydmljZV9DbGllbnRzX3VzaW5nX0F4aXMyJTI3c19QcmltYXJ5X0FQSXMiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV3JpdGluZ19XZWJfU2VydmljZV9DbGllbnRzX1VzaW5nX0F4aXMyX3NfUHJpbWFyeV9BUElzIj48L2E+PGgzPldyaXRpbmcgV2ViIFNlcnZpY2UgQ2xpZW50cyBVc2luZyBBeGlzMidzIFByaW1hcnkgQVBJczwvaDM+PHA+PGEgaWQ9IkVjaG9CbG9ja2luZ0NsaWVudCI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvX2Jsb2NraW5nX0NsaWVudCI+PC9hPjxoMz5lY2hvX2Jsb2NraW5nIENsaWVudDwvaDM+PHA+QXhpczIvQyBwcm92aWRlcyB0aGUgdXNlciB3aXRoIHNldmVyYWwgaW52b2NhdGlvbiBwYXR0ZXJucyBmb3IgV2ViClNlcnZpY2VzLCByYW5naW5nIGZyb20gcHVyZSBibG9ja2luZyBzaW5nbGUgY2hhbm5lbCBpbnZvY2F0aW9ucyB0byBhCm5vbi1ibG9ja2luZyBkdWFsIGNoYW5uZWwgaW52b2NhdGlvbi4gTGV0J3MgZmlyc3Qgc2VlIGhvdyB3ZSBjYW4gd3JpdGUgYQpjbGllbnQgdG8gaW52b2tlICJlY2hvIiBvcGVyYXRpb24gb2YgImVjaG8iIHNlcnZpY2UgdXNpbmcgdGhlIHNpbXBsZXN0CmJsb2NraW5nIGludm9jYXRpb24uIFRoZSBjbGllbnQgY29kZSB5b3UgbmVlZCB0byB3cml0ZSBpcyBhcyBmb2xsb3dzLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KIC8qIENyZWF0ZSBFUFIgd2l0aCBnaXZlbiBhZGRyZXNzICovCmVuZHBvaW50X3JlZiA9IGF4aXMyX2VuZHBvaW50X3JlZl9jcmVhdGUoZW52LCBhZGRyZXNzKTsKLyogU2V0dXAgb3B0aW9ucyAqLwpvcHRpb25zID0gYXhpczJfb3B0aW9uc19jcmVhdGUoZW52KTsKQVhJUzJfT1BUSU9OU19TRVRfVE8ob3B0aW9ucywgZW52LCBlbmRwb2ludF9yZWYpOwovKiBTZXQgdGhlIGRlcGxveSBmb2xkZXIgKi8KY2xpZW50X2hvbWUgPSBBWElTMl9HRVRFTlYoIkFYSVMyQ19IT01FIik7CmlmICghY2xpZW50X2hvbWUpCmNsaWVudF9ob21lID0gIi4uLy4uL2RlcGxveSI7Ci8qIENyZWF0ZSBzZXJ2aWNlIGNsaWVudCAqLwpzdmNfY2xpZW50ID0gYXhpczJfc3ZjX2NsaWVudF9jcmVhdGUoZW52LCBjbGllbnRfaG9tZSk7CiAgICBpZiAoIXN2Y19jbGllbnQpCiAgICB7CiAgICAgICBwcmludGYoIkVycm9yIGNyZWF0aW5nIHNlcnZpY2UgY2xpZW50XG4iKTsKICAgICAgIEFYSVMyX0xPR19FUlJPUihlbnYtJmd0O2xvZywgQVhJUzJfTE9HX1NJLCAiU3R1YiBpbnZva2UgRkFJTEVEOgogICAgICAgIEVycm9yIGNvZGU6IAolCWQgOjogJXMiLCBlbnYtJmd0O2Vycm9yLSZndDtlcnJvcl9udW1iZXIsCiAgICAgICAgQVhJUzJfRVJST1JfR0VUX01FU1NBR0UoZW52LSZndDtlcnJvcikpOwogICAgfQovKiBTZXQgc2VydmljZSBjbGllbnQgb3B0aW9ucyAqLwpBWElTMl9TVkNfQ0xJRU5UX1NFVF9PUFRJT05TKHN2Y19jbGllbnQsIGVudiwgb3B0aW9ucyk7IC8qIEJ1aWxkIHRoZQpTT0FQIHJlcXVlc3QgbWVzc2FnZSBwYXlsb2FkIHVzaW5nIE9NIEFQSS4qLwpwYXlsb2FkID0gYnVpbGRfb21fcGF5bG9hZF9mb3JfZWNob19zdmMoZW52KTsKLyogU2VuZCByZXF1ZXN0ICovCnJldF9ub2RlID0gQVhJUzJfU1ZDX0NMSUVOVF9TRU5EX1JFQ0VJVkUoc3ZjX2NsaWVudCwgZW52LCBwYXlsb2FkKTsKLyogUHJpbnQgcmVzdWx0ICovCiAgICBpZihyZXRfbm9kZSkKICAgIHsKICAgICAgIGF4aXMyX2NoYXJfdCAqb21fc3RyID0gTlVMTDsKICAgICAgIG9tX3N0ciA9IEFYSU9NX05PREVfVE9fU1RSSU5HKHJldF9ub2RlLCBlbnYpOwogICAgICAgaWYgKG9tX3N0cikKICAgICAgICAgIHByaW50ZigiXG5SZWNlaXZlZCBPTSA6ICVzXG4iLCBvbV9zdHIpOwogICAgICAgcHJpbnRmKCJcbmVjaG8gY2xpZW50IGludm9rZSBTVUNDRVNTRlVMIVxuIik7CiAgICB9ICAgICAgCiAgICBlbHNlCiAgICB7CiAgICAgICBBWElTMl9MT0dfRVJST1IoZW52LSZndDtsb2csIEFYSVMyX0xPR19TSSwgIlN0dWIgaW52b2tlIEZBSUxFRDogRXJyb3IgY29kZToiCiIgJWQgOjogJXMiLCBlbnYtJmd0O2Vycm9yLSZndDtlcnJvcl9udW1iZXIsCiAgICAgICBBWElTMl9FUlJPUl9HRVRfTUVTU0FHRShlbnYtJmd0O2Vycm9yKSk7CiAgICAgICBwcmludGYoImVjaG8gY2xpZW50IGludm9rZSBGQUlMRUQhXG4iKTsKfQoKPC9wcmU+PC9kaXY+CiAgPHA+VGhlIGNvbW1lbnRzIGluIHRoZSBhYm92ZSBjb2RlIGV4cGxhaW5zIHRoZSBjb2RlLiBJbiBzaW1wbGUgdGVybXMsIHRoZXNlCmFyZSB0aGUgc3RlcHM6PC9wPjxvbD4KICA8bGk+U2V0IHVwIHRoZSBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIGludm9jYXRpb24uPC9saT4KICA8bGk+Q3JlYXRlIHRoZSBzZXJ2aWNlIGNsaWVudC48L2xpPgogIDxsaT5TZXQgdGhlIG9wdGlvbnMgdG8gc2VydmljZSBjbGllbnQuPC9saT4KICA8bGk+QnVpbGQgdGhlIFhNTCBwYXlsb2FkIHRvIGJlIHNlbnQgb3V0IHVzaW5nIEFYSU9NLjwvbGk+CiAgPGxpPlNlbmQgcGF5bG9hZCBhbmQgcmVjZWl2ZSByZXN1bHQgWE1MIGFzIE9NLjwvbGk+CiAgPGxpPkNvbnN1bWUgcmVzdWx0LjwvbGk+Cjwvb2w+PHA+T3B0aW9ucyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGludm9jYXRpb24gcGFyYW1ldGVycyBzdWNoIGFzIHRhcmdldAplbmRwb2ludCwgc29hcCB2ZXJzaW9uLCBhZGRyZXNzaW5nIHBhcmFtZXRlcnMsIGV0Yy4gV2hlbiBjcmVhdGluZyBzZXJ2aWNlCmNsaWVudCwgdGhlIGRlcGxveW1lbnQgZm9sZGVyIGhhcyB0byBiZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuIEl0IGlzIGZyb20gdGhlCmRlcGxveSBmb2xkZXIsIHRoZSBjb25maWd1cmF0aW9uIGlzIHBpY2tlZCB1cCwgdXNpbmcgdGhlIGF4aXMyLnhtbCBmaWxlLiBUaGUKc2VuZF9yZWNlaXZlIGZ1bmN0aW9uIG9mIHRoZSBzZXJ2aWNlIGNsaWVudCBzZW5kcyB0aGUgWE1MIGdpdmVuIGFzIGEgcGF5bG9hZAp0byB0aGUgc2VydmVyIHNpZGUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCByZWNlaXZlZC4gQmFzaWNhbGx5IHRoaXMgaXMgdGhlIFhNTAppbi9vdXQgbW9kZWwuIE9uY2UgdGhlIHJlc3VsdCBpcyByZWNlaXZlZCwgdGhlIHVzZXIgY2FuIGNvbnN1bWUgdGhlIHJlc3VsdCBpbgp3aGljaGV2ZXIgdGhlIHdheShzKSBoZSB3aXNoZXMuPC9wPjxwPjxhIGlkPSJFY2hvTm9uQmxvY2tpbmdDbGllbnQiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iZWNob19ub25fYmxvY2tpbmdfQ2xpZW50Ij48L2E+PGgzPmVjaG9fbm9uX2Jsb2NraW5nIENsaWVudDwvaDM+PHA+SW4gdGhlIGVjaG9fYmxvY2tpbmcgY2xpZW50IG9uY2UgdGhlICJzZW5kX3JlY2VpdmUiIGZ1bmN0aW9uIGlzIGNhbGxlZCwKdGhlIGNsaWVudCBpcyBibG9ja2VkIHRpbGwgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuIFRoaXMgYmVoYXZpb3IgaXMgbm90CmRlc2lyYWJsZSB3aGVuIHRoZXJlIGFyZSBtYW55IFdlYiBzZXJ2aWNlIGludm9jYXRpb25zIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUKY2xpZW50IGFwcGxpY2F0aW9uIG9yIHdpdGhpbiBhIEdVSS4gQSBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgYSBub24tYmxvY2tpbmcKQVBJIHRvIGludm9rZSBXZWIgc2VydmljZXMuIEF4aXMyL0MgcHJvdmlkZXMgYSBjYWxsYmFjayBiYXNlZCBub24tYmxvY2tpbmcKQVBJIGZvciB1c2Vycy48L3A+PHA+QSBzYW1wbGUgY2xpZW50IGZvciB0aGlzIGNhbiBiZSBmb3VuZCB1bmRlcgoiJmx0O2F4aXMyY19ob21lJmd0Oy9zYW1wbGVzL3VzZXJfZ3VpZGUvY2xpZW50cyIgd2l0aCB0aGUgbmFtZQplY2hvX25vbl9ibG9ja2luZy5jLiBUaGUgY2hhbmdlcyB0aGF0IHVzZXIgbWF5IGhhdmUgdG8gZG8gd2l0aCByZXNwZWN0IHRvIHRoZQoiZWNob19ibG9ja2luZyIgY2xpZW50IGluIG9yZGVyIHRvIG1ha2UgaXQgbm9uLWJsb2NraW5nLCB3b3VsZCBiZSBhcwpmb2xsb3dzOjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT5BWElTMl9TVkNfQ0xJRU5UX1NFTkRfUkVDRUlWRV9OT05fQkxPQ0tJTkcoc3ZjX2NsaWVudCwgZW52LCBwYXlsb2FkLCBjYWxsYmFjayk7Cgo8L3ByZT48L2Rpdj4KICA8cD5Vbmxpa2UgInNlbmRfcmVjZWl2ZSIsICJzZW5kX3JlY2VpdmVfbm9uX2Jsb2NraW5nIiBhY2NlcHRzIGEgY2FsbGJhY2sKc3RydWN0IGluIGFkZGl0aW9uIHRvIHBheWxvYWQuIEF4aXMyL0MgY2xpZW50IEFQSSBwcm92aWRlcyBhIGNhbGxiYWNrIHN0cnVjdAp3aXRoIHRoZSBmb2xsb3dpbmcgYXNzb2NpYXRlZCBmdW5jdGlvbnM6PC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPgpheGlzMl9zdGF0dXNfdCAoQVhJUzJfQ0FMTCAqCm9uX2NvbXBsZXRlKSgKIHN0cnVjdCBheGlzMl9jYWxsYmFjayAqY2FsbGJhY2ssCiBjb25zdCBheGlzMl9lbnZfdCAqZW52KTsKCmF4aXMyX3N0YXR1c190IChBWElTMl9DQUxMICoKb25fZXJyb3IpKAogc3RydWN0IGF4aXMyX2NhbGxiYWNrICpjYWxsYmFjaywKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYsCiBpbnQgZXhjZXB0aW9uKTsKCmF4aXMyX2Jvb2xfdCAoQVhJUzJfQ0FMTCAqCmdldF9jb21wbGV0ZSkoCiBzdHJ1Y3QgYXhpczJfY2FsbGJhY2sgKmNhbGxiYWNrLAogY29uc3QgYXhpczJfZW52X3QgKmVudik7Cgo8L3ByZT48L2Rpdj4KICA8cD5UaGUgdXNlciBpcyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlICJvbl9jb21wbGV0ZSAiIGFuZCAib25fZXJyb3IgIgpmdW5jdGlvbnMgYW5kIHNldCB0aGVtIG9uIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgInNldF9vbl9jb21wbGV0ZSIgYW5kCiJzZXRfb25fZXJyb3IiIEFQSSBjYWxscy4gSW4gdGhlIHNhbXBsZSwgJydvbiBjb21wbGV0ZScnIGlzIGltcGxlbWVudGVkIGJ5CiJlY2hvX2NhbGxiYWNrX29uX2NvbXBsZXRlIiBmdW5jdGlvbiBhbmQgaXMgc2V0IG9uIHRoZSBjYWxsYmFjayBzdHJ1Y3QKY3JlYXRlZCBhcyBzaG93biBiZWxvdzo8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+QVhJUzJfQ0FMTEJBQ0tfU0VUX09OX0NPTVBMRVRFKGNhbGxiYWNrLCBlY2hvX2NhbGxiYWNrX29uX2NvbXBsZXRlKTsKCjwvcHJlPjwvZGl2PgogIDxwPkF4aXMyL0MgZW5naW5lIGNhbGxzIHRoZSAib25fY29tcGxldGUiIG1ldGhvZCBvbmNlIHRoZSBXZWIgc2VydmljZQpyZXNwb25zZSBpcyByZWNlaXZlZCBieSB0aGUgQXhpczIvQyBjbGllbnQgQVBJICh0aGF0IGlzIHNlcnZpY2VfY2xpZW50KS4gVGhpcwp3aWxsIGVsaW1pbmF0ZSB0aGUgYmxvY2tpbmcgbmF0dXJlIG9mIHRoZSBXZWIgc2VydmljZSBpbnZvY2F0aW9ucyBhbmQKcHJvdmlkZSB0aGUgdXNlciB3aXRoIHRoZSBmbGV4aWJpbGl0eSB0byB1c2Ugbm9uLWJsb2NraW5nIEFQSSBmb3IgV2ViCnNlcnZpY2UgY2xpZW50cy48L3A+PHA+UGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBlY2hvX25vbl9ibG9ja2luZy5jIGZpbGUgbG9jYXRlZCBhdAoiJmx0O2F4aXMyY19ob21lJmd0Oy9zYW1wbGVzL3VzZXJfZ3VpZGUvY2xpZW50IiBmb3IgbW9yZSBkZXRhaWxzLjwvcD48cD48YSBpZD0iRWNob05vbkJsb2NraW5nRHVhbENsaWVudCI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvX25vbl9ibG9ja2luZ19kdWFsX0NsaWVudCI+PC9hPjxoMz5lY2hvX25vbl9ibG9ja2luZ19kdWFsIENsaWVudDwvaDM+PHA+VGhlIHNvbHV0aW9uIHByb3ZpZGVkIGJ5IHRoZSBub24tYmxvY2tpbmcgQVBJIGhhcyBvbmUgbGltaXRhdGlvbiB3aGVuIGl0CmNvbWVzIHRvoCBXZWIgc2VydmljZSBpbnZvY2F0aW9ucyxpdCB0YWtlcyBhIGxvbmcgdGltZSB0byBjb21wbGV0ZS4gVGhlCmxpbWl0YXRpb24gaXMgZHVlIHRvIHRoZSB1c2Ugb2YgYSBzaW5nbGUgdHJhbnNwb3J0IGNvbm5lY3Rpb24gdG8gaW52b2tlIHRoZQpXZWIgc2VydmljZSBhbmQgdG8gcmV0cmlldmUgdGhlIHJlc3BvbnNlLiBJbiBvdGhlciB3b3JkcywgY2xpZW50IEFQSSBwcm92aWRlcwphIG5vbiBibG9ja2luZyBpbnZvY2F0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIHVzZXJzLCBidXQgdGhlIHJlcXVlc3QgYW5kIHRoZQpyZXNwb25zZSBjb21lcyBpbiBhIHNpbmdsZSB0cmFuc3BvcnQgKFR3by1XYXkgdHJhbnNwb3J0KSBjb25uZWN0aW9uIChsaWtlCkhUVFApLiBMb25nIHJ1bm5pbmcgV2ViIHNlcnZpY2UgaW52b2NhdGlvbnMgb3IgV2ViIHNlcnZpY2UgaW52b2NhdGlvbnMgdXNpbmcKT25lLVdheSB0cmFuc3BvcnRzIChsaWtlIFNNVFApIGNhbm5vdCBiZSB1dGlsaXplZCBieSBzaW1wbHkgdXNpbmcgYSBub24KYmxvY2tpbmcgaW52b2NhdGlvbi48L3A+PHA+VGhlIHRyaXZpYWwgc29sdXRpb24gaXMgdG8gdXNlIHNlcGFyYXRlIHRyYW5zcG9ydCBjb25uZWN0aW9ucyAoZWl0aGVyCk9uZS1XYXkgb3IgVHdvLVdheSkgZm9yIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZS4gVGhlIG5leHQgcHJvYmxlbSB0aGF0IG5lZWRzCnRvIGJlIHNvbHZlZCBpcyB0aGUgY29ycmVsYXRpb24gKGNvcnJlbGF0aW5nIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UpLgo8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDAyL3dzL2FkZHIvIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+V1MtQWRkcmVzc2luZzwvYT4gcHJvdmlkZXMgYSBuZWF0CnNvbHV0aW9uIHRvIHRoaXMgdXNpbmcgJmx0O3dzYTpNZXNzYWdlSUQmZ3Q7IGFuZCAmbHQ7d3NhOlJlbGF0ZXNUbyZndDsKaGVhZGVycy4gQXhpczIvQyBwcm92aWRlcyBzdXBwb3J0IGZvciBhZGRyZXNzaW5nIGJhc2VkIGNvcnJlbGF0aW9uIG1lY2hhbmlzbQphbmQgYSBjb21wbGlhbnQgY2xpZW50IEFQSSB0byBpbnZva2UgV2ViIHNlcnZpY2VzIHdpdGggdHdvIHRyYW5zcG9ydApjb25uZWN0aW9ucy48L3A+PHA+VXNlcnMgY2FuIHNlbGVjdCBiZXR3ZWVuIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBBUElzIGZvciB0aGUgV2ViIHNlcnZpY2UKY2xpZW50cyB3aXRoIHR3byB0cmFuc3BvcnQgY29ubmVjdGlvbnMuIEJ5IHNpbXBseSB1c2luZyBhIGJvb2xlYW4gZmxhZywgdGhlCnNhbWUgQVBJIGNhbiBiZSB1c2VkIHRvIGludm9rZSBXZWIgc2VydmljZXMgKElOLU9VVCBvcGVyYXRpb25zKSB1c2luZyB0d28Kc2VwYXJhdGUgdHJhbnNwb3J0IGNvbm5lY3Rpb25zLiBBbGwgeW91IGhhdmUgdG8gZG8gaXMgdG8gc2V0CiJ1c2Vfc2VwYXJhdGVfbGlzdGVuZXIiIHRvIHRydWUgaW4gb3B0aW9uczo8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+QVhJUzJfT1BUSU9OU19TRVRfVVNFX1NFUEVSQVRFX0xJU1RFTkVSKG9wdGlvbnMsIGVudiwgQVhJUzJfVFJVRSk7Cgo8L3ByZT48L2Rpdj4KICA8cD5JbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSB1c2Vfc2VwYXJhdGVfbGlzdGVuZXIgdG8gdHJ1ZSwgdG8gdXNlIGR1YWwKdHJhbnNwb3J0cyBvbmUgaGFzIHRvImVuZ2FnZSIgdGhlIGFkZHJlc3NpbmcgbW9kdWxlLjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJFbmdhZ2luZ19BZGRyZXNzaW5nX29uX1NlcnZlcl9TaWRlIj48L2E+PGgzPkVuZ2FnaW5nIEFkZHJlc3Npbmcgb24gU2VydmVyIFNpZGU8L2gzPjxwPlRvIGVuZ2FnZSB0aGUgYWRkcmVzc2luZyBtb2R1bGUgc2ltcGx5IGFkZCBhIG1vZHVsZSByZWZlcmVuY2UgZm9yCmFkZHJlc3NpbmcgaW4gdGhlICJheGlzMi54bWwiIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcKdGhlIGZvbGxvd2luZyBsaW5lIHRvICJheGlzMi54bWwiIGZpbGUgaW4gdGhlIGRlcGxveW1lbnQgZm9sZGVyLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4gJmx0O21vZHVsZSByZWY9ImFkZHJlc3NpbmciLyZndDsKCjwvcHJlPjwvZGl2PgogIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gT25jZSB5b3UgbW9kaWZ5IHRoZSAiYXhpczIueG1sIiBmaWxlIHlvdSBoYXZlIHRvIHJlc3RhcnQgdGhlIHNlcnZlci4KWW91IGFsc28gaGF2ZSB0byBoYXZlIHRoZSBhZGRyZXNzaW5nIG1vZHVsZSBpbnN0YWxsZWQgaW4gdGhlIG1vZHVsZXMgZm9sZGVyCm9mIHRoZSBkZXBsb3ltZW50IGZvbGRlci4gVGhpcyBpcyBkb25lIGJ5IGRlZmF1bHQgd2hlbiB5b3UgbWFrZSB0aGUKaW5zdGFsbGF0aW9uLjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJFbmdhZ2luZ19BZGRyZXNzaW5nX29uX0NsaWVudF9TaWRlIj48L2E+PGgzPkVuZ2FnaW5nIEFkZHJlc3Npbmcgb24gQ2xpZW50IFNpZGU8L2gzPjxwPlRoZXJlIGFyZSB0d28gd2F5cyBvZiBkb2luZyB0aGlzOjwvcD48b2w+CiAgPGxpPkVuZ2FnZSBhZGRyZXNzaW5nIGdsb2JhbGx5LiBUaGlzIGNhbiBiZSBkb25lIGJ5IGZvbGxvd2luZyB0aGUgc2FtZQogICAgc3RlcHMgYXMgZG9uZSBpbiB0aGUgY2FzZSBvZiB0aGUgc2VydmVyIHNpZGU7IGFkZCBtb2R1bGUgcmVmZXJlbmNlIHRvCiAgICBheGlzMi54bWwgYW5kIGhhdmUgdGhlIG1vZHVsZSBpbnN0YWxsZWQgaW4gdGhlIG1vZHVsZXMgZm9sZGVyIG9mIHRoZQogICAgZGVwbG95IGZvbGRlci48L2xpPgogIDxsaT5FbmdhZ2UgdGhlIG1vZHVsZSBvbiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgc2VydmljZV9jbGllbnQgQVBJLgogICAgPHByZT5BWElTMl9TVkNfQ0xJRU5UX0VOR0FHRV9NT0RVTEUoc3ZjX2NsaWVudCwgZW52LCBBWElTMl9NT0RVTEVfQUREUkVTU0lORyk7PC9wcmU+CiAgPC9saT4KPC9vbD48cD5PbmNlIGFkZHJlc3NpbmcgaXMgZW5nYWdlZCwgZWNob19ub25fYmxvY2tpbmdfZHVhbCBjbGllbnQgd291bGQgd29yawpwZXJmZWN0bHkuIE5vdGUgdGhhdCBieSBkZWZhdWx0LCBBeGlzMi9DIGNvbWVzIHdpdGggYWRkcmVzc2luZyBlbmFibGVkCmdsb2JhbGx5LjwvcD48cD48YSBpZD0iRWNob0Jsb2NraW5nRHVhbENsaWVudCI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvX2Jsb2NraW5nX2R1YWxfQ2xpZW50Ij48L2E+PGgzPmVjaG9fYmxvY2tpbmdfZHVhbCBDbGllbnQ8L2gzPjxwPlRoaXMgaXMgYWdhaW4gYSBUd28tV2F5IHRyYW5zcG9ydCByZXF1ZXN0L3Jlc3BvbnNlIGNsaWVudCwgYnV0IHRoaXMgdGltZSwKd2UgdXNlIGEgQmxvY2tpbmcgQVBJIGluIHRoZSBjbGllbnQgY29kZS4gU2FtcGxlIGNvZGUgZm9yIHRoaXMgY2FuIGJlIGZvdW5kCmluIHRoZSAiJmx0O2F4aXMyY19ob21lJmd0Oy9zYW1wbGVzL3VzZXJfZ3VpZGUvY2xpZW50cy8iIGRpcmVjdG9yeSBhbmQgdGhlCmV4cGxhbmF0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIDxhIGhyZWY9IiNFY2hvTm9uQmxvY2tpbmdEdWFsQ2xpZW50Ij5lY2hvX25vbl9ibG9ja2luZ19kdWFsIGNsaWVudDwvYT4sIGV4Y2VwdAp0aGF0IGhlcmUgd2UgZG8gbm90IHVzZSBhIGNhbGxiYWNrIG9iamVjdCB0byBoYW5kbGUgcmVzcG9uc2UuIFRoaXMgaXMgYW4gZXh0cmVtZWx5CnVzZWZ1bCBtZWNoYW5pc20gd2hlbiB0aGUgc2VydmljZSBpbnZvY2F0aW9uIGlzIElOLU9VVCBpbiBuYXR1cmUgYW5kIHRoZQp0cmFuc3BvcnRzIGFyZSBPbmUtV2F5IChlLmcuIFNNVFApLiBGb3IgdGhlIHNhbXBsZSBjbGllbnQgd2UgdXNlIHR3byBIVFRQCmNvbm5lY3Rpb25zIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZS48L3A+PHA+PGEgaWQ9IldyaXRpbmdfV2ViX0NsaWVudHNfVXNpbmdfQ29kZV9HZW5lcmF0b3IiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV3JpdGluZ19XZWJfU2VydmljZV9DbGllbnRzX3VzaW5nX0NvZGVfR2VuZXJhdGlvbl93aXRoX0RhdGFfQmluZGluZ19TdXBwb3J0Ij48L2E+PGgzPldyaXRpbmcgV2ViIFNlcnZpY2UgQ2xpZW50cyB1c2luZyBDb2RlIEdlbmVyYXRpb24gd2l0aCBEYXRhIEJpbmRpbmcgU3VwcG9ydDwvaDM+PHA+QXhpczIgY29kZSBnZW5lcmF0b3IgcHJvdmlkZXMgdGhlIGRhdGEgYmluZGluZyBzdXBwb3J0IGZvciBXZWIgc2VydmljZQpjbGllbnQgZ2VuZXJhdGlvbiBhcyB3ZWxsLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSByZXF1aXJlZCBzdHVicyBmcm9tIGEgZ2l2ZW4KV1NETCB3aXRoIHRoZSBvdGhlciBzdXBwb3J0aW5nIGZpbGVzLiBVc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvCmdlbmVyYXRlIHRoZSBBeGlzMi9DIHN0dWIgY29kZSB3aXRoIGRhdGEgYmluZGluZyBzdXBwb3J0LiBZb3Ugc2hvdWxkIGhhdmUKPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy93ZWJzZXJ2aWNlcy9heGlzMi90cnVuay9qYXZhIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+QXhpczIvSmF2YQpzb3VyY2UgU1ZOPC9hPiByZXZpc2lvbiA0MTQyNTMgb3IgbGF0ZXIgdG8gZ2VuZXJhdGUgQXhpczIvQyBjb2RlLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT5qYXZhIFdTREwyQyAtdXJpIGludGVyb3B0ZXN0ZG9jbGl0cGFyYW1ldGVycy53c2RsIC1kIGFkYiAtdQoKPC9wcmU+PC9kaXY+CiAgPHA+SW4gb3JkZXIgdG8gaWdub3JlIHRoZSBkYXRhIGJpbmRpbmcgc3VwcG9ydCAodG8gdXNlIFhNTCBpbi9vdXQgbW9kZWwpLApqdXN0IHVzZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPmphdmEgV1NETDJDIC11cmkgaW50ZXJvcHRlc3Rkb2NsaXRwYXJhbWV0ZXJzLndzZGwgLWQgbm9uZQoKPC9wcmU+PC9kaXY+CiAgPHA+VGhlIGZvbGxvd2luZyBzZWN0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB1c2luZyB0aGUKd3NkbCBmaWxlICJpbnRlcm9wdGVzdGRvY2xpdHBhcmFtZXRlcnMud3NkbCIgdG8gaW1wbGVtZW50IHRoZSBjbGllbnQgYnVzaW5lc3MKbG9naWMuPC9wPjxwPjxhIGlkPSJDb2RlZ2VuZXJhdG9yX0NsaWVudF9lY2hvU3RyaW5nIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkNsaWVudF9mb3JfZWNob1N0cmluZ19vcGVyYXRpb24iPjwvYT48aDM+Q2xpZW50IGZvciBlY2hvU3RyaW5nIG9wZXJhdGlvbjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+I2luY2x1ZGUgImF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2Vfc3R1Yi5oIgovKgogKiBkZW1vbnN0cmF0ZXMgaG93IHRvIGV4ZWN1dGUgdGhlIHNlcnZpY2UgdXNpbmcgZGF0YWJpbmRpbmcgKi8Kdm9pZCBpbnZva2Vfc2VydmljZV91c2luZ19kYXRhYmluZGluZyAoIGF4aXMyX3N0dWJfdCogc3R1YiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgKTsKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQp7Ci8qIHZhcmlhYmxlcyB0byBrZWVwIHRoZSBlbnZpcm9ubWVudCAqLwogYXhpczJfZW52X3QqIGVudiA9IE5VTEw7CiBheGlzMl9jaGFyX3QqIGNsaWVudF9ob21lID0gTlVMTDsKIGF4aXMyX2NoYXJfdCogZW5kcG9pbnRfdXJpID1OVUxMOwogYXhpczJfc3R1Yl90KiBzdHViPSBOVUxMOwogLyogZW5kcG9pbnQgdXJpOiBpZiBpdCBpcyBOVUxMIGVuZHBvaW50IHdpbGwgYmUgcGlja2VkIGZyb20gdGhlIFdTREwgKi8gCiBlbmRwb2ludF91cmkgPQogImh0dHA6Ly9sb2NhbGhvc3Q6OTA5MC9heGlzMi9zZXJ2aWNlcy9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlIjsKIGVudiA9IGF4aXMyX2Vudl9jcmVhdGVfYWxsKCAiY29kZWdlbl91dGVzdF9ibG9ja2luZy5sb2ciLCAKIEFYSVMyX0xPR19MRVZFTF9UUkFDRSk7CiAvKiBTZXQgdXAgZGVwbG95IGZvbGRlci4qLwogY2xpZW50X2hvbWUgPSBBWElTMl9HRVRFTlYoIkFYSVMyQ19IT01FIik7CiBpZiAoIWNsaWVudF9ob21lKQogY2xpZW50X2hvbWUgPSAiLi4vLi4vLi4vZGVwbG95IjsKIC8qIGNyZWF0ZSB0aGUgc3R1YiB1c2luZyBnZW5lcmF0ZWQgY29kZSAqLwogc3R1YiA9IGF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2Vfc3R1Yl9jcmVhdGUoIGVudiwKIGNsaWVudF9ob21lICwgZW5kcG9pbnRfdXJpKTsgCiAvKiBjYWxscyB0aGUgc2VydmljZSovCiBpbnZva2Vfc2VydmljZV91c2luZ19kYXRhYmluZGluZyAoIHN0dWIsIGVudiApOwogcmV0dXJuIDA7Cn0gCgp2b2lkIGludm9rZV9zZXJ2aWNlX3VzaW5nX2RhdGFiaW5kaW5nICggYXhpczJfc3R1Yl90KiBzdHViLAogY29uc3QgYXhpczJfZW52X3QqIGVudiApCiB7CiAvKiB2YXJpYWJsZXMgdXNlZCBieSBkYXRhYmluZGluZyAqLwogYXhpczJfZWNob1N0cmluZ190KiBlY2hvX2luID0gTlVMTDsKIGF4aXMyX2VjaG9TdHJpbmdSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CiAvKiB2YXJpYWJsZXMgdG8gc3RvcmUgZGF0YSAqLwogY2hhciogZWNob19zdHIgPSAiaGVsbG8iOwogY2hhciogcmV0dXJuX2VjaG9fc3RyID0gTlVMTDsKIC8qIGNyZWF0ZSB0aGUgaW5wdXQgcGFyYW1zIHVzaW5nIGRhdGFiaW5kaW5nICovCiBlY2hvX2luID0gYXhpczJfZWNob1N0cmluZ19jcmVhdGUoIGVudiApOwogQVhJUzJfRUNIT1NUUklOR19TRVRfUEFSQU0wKCBlY2hvX2luLCBlbnYsIGVjaG9fc3RyICk7CiAvKiBpbnZva2UgdGhlIHdlYiBzZXJ2aWNlIG1ldGhvZCovCiBlY2hvX291dCA9IGF4aXMyX2VjaG9TdHJpbmcoIHN0dWIsIGVudiwgZWNob19pbiApOwogLyogcmV0dXJuIHRoZSBvdXRwdXQgcGFyYW1zIHVzaW5nIGRhdGFiaW5kaW5nICovCiByZXR1cm5fZWNob19zdHIgPSBBWElTMl9FQ0hPU1RSVUNUUkVTUE9OU0VfR0VUX1JFVFVSTiggZWNob19vdXQsIGVudgogKTsKIC8qIHByaW50IHRoZSByZXN1bHQgKi8KIHByaW50ZiAoICJyZXR1cm5lZCBzdHJpbmcgJXNcbiIsIHJldHVybl9lY2hvX3N0ciApOwp9IAo8L3ByZT48L2Rpdj4KICA8cD48YSBpZD0iQ29kZWdlbmVyYXRvcl9DbGllbnRfZWNob1N0cmluZ0FycmF5Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkNsaWVudF9mb3JfZWNob1N0cmluZ0FycmF5X29wZXJhdGlvbiI+PC9hPjxoMz5DbGllbnQgZm9yIGVjaG9TdHJpbmdBcnJheSBvcGVyYXRpb248L2gzPjxwPgpZb3UgY2FuIGNoYW5nZSB0aGUgPGNvZGU+aW52b2tlX3NlcnZpY2VfdXNpbmdfZGF0YWJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIHRvCmludm9rZSB0aGUgZWNob1N0cmluZ0FycmF5IG9wZXJhdGlvbiBhcyBmb2xsb3dzLgoKICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT52b2lkIGludm9rZV9zZXJ2aWNlX3VzaW5nX2RhdGFiaW5kaW5nICggYXhpczJfc3R1Yl90KiBzdHViLCBjb25zdApheGlzMl9lbnZfdCogZW52ICkKIHsKIC8qIHZhcmlhYmxlcyB1c2VkIGJ5IGRhdGFiaW5kaW5nICovCiBheGlzMl9lY2hvU3RyaW5nQXJyYXlfdCogZWNob19pbiA9IE5VTEw7CiBheGlzMl9lY2hvU3RyaW5nQXJyYXlSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CiBheGlzMl9BcnJheU9mc3RyaW5nX2xpdGVyYWxfdCogYXJyYXlfaW4gPSBOVUxMOwogYXhpczJfQXJyYXlPZnN0cmluZ19saXRlcmFsX3QqIGFycmF5X291dCA9IE5VTEw7CiAgLyogdmFyaWFibGVzIHRvIHN0b3JlIGRhdGEgKi8KIGNoYXIgKnN0cmluZ19hcnJheVtdPSB7ICJ0ZXN0IiwidGhpcyIsImFycmF5IiB9OwogaW50IGFycmF5X2xlbmd0aCA9IDM7CiAgY2hhciAqKnN0cmluZ19yZXR1cm5fc3RyaW5nX2FycmF5ID0gTlVMTDsKIGludCByZXR1cm5fYXJyYXlfbGVuZ3RoID0gMDsKIGludCBpID0gMDsKIAogIC8qY3JlYXRlIHRoZSBpbnB1dCBhcnJheSBhbmQgc2V0IHRoZSBzdHJpbmcgYXJyYXkgYW5kIGxlbmd0aCovCiBhcnJheV9pbiA9IGF4aXMyX0FycmF5T2ZzdHJpbmdfbGl0ZXJhbF9jcmVhdGUgKGVudiApOwogQVhJUzJfQVJSQVlPRlNUUklOR19MSVRFUkFMX1NFVF9TVFJJTkcoIGFycmF5X2luLCBlbnYsCiBzdHJpbmdfYXJyYXksIGFycmF5X2xlbmd0aCApOwoKIC8qIGNyZWF0ZSB0aGUgcmVxdWVzdCBhbmQgc2V0IHRoZSBpbnB1dHMgKi8KIGVjaG9faW4gPSBheGlzMl9lY2hvU3RyaW5nQXJyYXlfY3JlYXRlICggZW52ICk7CiBBWElTMl9FQ0hPU1RSSU5HQVJSQVlfU0VUX1BBUkFNMCggZWNob19pbiwgZW52LCBhcnJheV9pbiApOwoKIC8qIGludm9rZSB0aGUgd2ViIHNlcnZpY2UgbWV0aG9kKi8KIGVjaG9fb3V0ID0gYXhpczJfZWNob1N0cmluZ0FycmF5KCBzdHViLCBlbnYsIGVjaG9faW4gKTsKCiAvKiByZXR1cm4gdGhlIG91dHB1dCBwYXJhbXMgdXNpbmcgZGF0YWJpbmRpbmcgKi8KIGFycmF5X291dCA9IEFYSVMyX0VDSE9TVFJJTkdBUlJBWVJFU1BPTlNFX0dFVF9SRVRVUk4oIGVjaG9fb3V0LCBlbnYKICk7IAogCiAvKiByZXRyaWV2ZSB0aGUgc3RyaW5nIGFycmF5IHZhbHVlcyBhbmQgbGVuZ3RoICovCiBzdHJpbmdfcmV0dXJuX3N0cmluZ19hcnJheSA9IEFYSVMyX0FSUkFZT0ZTVFJJTkdfTElURVJBTF9HRVRfU1RSSU5HCiAoIGFycmF5X291dCwgZW52LCAmYW1wO3JldHVybl9hcnJheV9sZW5ndGggKTsKCiAvKiBwcmludCB0aGUgb3V0cHV0ICovCiBmb3IgKCBpID0gMDsgaSAmbHQ7IHJldHVybl9hcnJheV9sZW5ndGggOyBpICsrICkKICB7CiAgICBwcmludGYoInZhbHVlJWQ6ICVzIFxuIiwgaSwgc3RyaW5nX3JldHVybl9zdHJpbmdfYXJyYXlbaV0gKTsKICB9CiA8L3ByZT48L2Rpdj4KICAKCjxhIGlkPSJDb2RlZ2VuZXJhdG9yX0NsaWVudF9lY2hvU3RydWN0Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkNsaWVudF9mb3JfZWNob1N0cnVjdF9vcGVyYXRpb24iPjwvYT48aDM+Q2xpZW50IGZvciBlY2hvU3RydWN0IG9wZXJhdGlvbjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+dm9pZCBpbnZva2Vfc2VydmljZV91c2luZ19kYXRhYmluZGluZyAoIGF4aXMyX3N0dWJfdCogc3R1YiwKIGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgKQogewogLyogdmFyaWFibGVzIHVzZWQgYnkgZGF0YWJpbmRpbmcgKi8KIGF4aXMyX2VjaG9TdHJ1Y3RfdCogZWNob19pbiA9IE5VTEw7CiBheGlzMl9lY2hvU3RydWN0UmVzcG9uc2VfdCogZWNob19vdXQgPSBOVUxMOwogYXhpczJfU09BUFN0cnVjdF90KiBzdHJ1Y3RfaW4gPSBOVUxMOwogYXhpczJfU09BUFN0cnVjdF90KiBzdHJ1Y3Rfb3V0ID0gTlVMTDsKCgogLyogdmFyaWFibGVzIHRvIHN0b3JlIGRhdGEgKi8KIGZsb2F0IGZsb2F0X3ZhbCA9IDExOwogaW50IGludF92YWwgPSAxMDsKIGNoYXIqIHN0cmluZ192YWwgPSAiaGVsbG8gc3RydWN0IjsKIGludCByZXRfaW50X3ZhbCA9IDA7CiBmbG9hdCByZXRfZmxvYXRfdmFsID0gMDsKIGNoYXIqIHJldF9zdHJpbmdfdmFsID0gIiI7CiAKIC8qIGNyZWF0ZSB0aGUgc3RydWN0IGFuZCBzZXQgaW5wdXQgdmFsdWVzKi8KIHN0cnVjdF9pbiA9IGF4aXMyX1NPQVBTdHJ1Y3RfY3JlYXRlKCBlbnYgKTsKIEFYSVMyX1NPQVBTVFJVQ1RfU0VUX1ZBUkZMT0FUICggc3RydWN0X2luLCBlbnYsIGZsb2F0X3ZhbCApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSSU5UICggc3RydWN0X2luLCBlbnYsIGludF92YWwgKTsKIEFYSVMyX1NPQVBTVFJVQ1RfU0VUX1ZBUlNUUklORyAoIHN0cnVjdF9pbiwgZW52LCBzdHJpbmdfdmFsICk7CgogLyogY3JlYXRlIHRoZSByZXF1ZXN0IGFuZCBzZXQgdGhlIHN0cnVjdCAqLwogZWNob19pbiA9IGF4aXMyX2VjaG9TdHJ1Y3RfY3JlYXRlKCBlbnYgKTsKIEFYSVMyX0VDSE9TVFJVQ1RfU0VUX1BBUkFNMCggZWNob19pbiwgZW52LCBzdHJ1Y3RfaW4gKTsKIC8qIGludm9rZSB0aGUgd2ViIHNlcnZpY2UgbWV0aG9kICovCiBlY2hvX291dCA9IGF4aXMyX2VjaG9TdHJ1Y3QoIHN0dWIsIGVudiwgZWNob19pbiApOwoKIC8qIHJldHJpZXZlIHRoZSBzdHJ1Y3R1cmUgZnJvbSByZXNwb25zZSAqLwogc3RydWN0X291dCA9IEFYSVMyX0VDSE9TVFJVQ1RSRVNQT05TRV9HRVRfUkVUVVJOKCBlY2hvX291dCwgZW52ICk7CgogLyogcmV0cmlldmUgZWFjaCB2YWx1ZSBmcm9tIHRoZSBzdHJ1Y3R1cmUgKi8KIHJldF9mbG9hdF92YWwgPSBBWElTMl9TT0FQU1RSVUNUX0dFVF9WQVJGTE9BVCAoIHN0cnVjdF9vdXQsIGVudiApOwogcmV0X2ludF92YWwgPSBBWElTMl9TT0FQU1RSVUNUX0dFVF9WQVJJTlQgKCBzdHJ1Y3Rfb3V0LCBlbnYgKTsKIHJldF9zdHJpbmdfdmFsID0gQVhJUzJfU09BUFNUUlVDVF9HRVRfVkFSU1RSSU5HICggc3RydWN0X291dCwgZW52ICk7CgogLyogcHJpbnQgdGhlIHZhbHVlcyAqLwogcHJpbnRmICggInJldHVybmVkIHZhbHVlcyBcbiIpOwogcHJpbnRmICgiIGZsb2F0ICVmXG4iLCByZXRfZmxvYXRfdmFsICk7CiBwcmludGYgKCIgaW50ICVkIFxuIiwgcmV0X2ludF92YWwgKTsKIHByaW50ZiAoIiBzdHJpbmcgJXMgXG4iLCByZXRfc3RyaW5nX3ZhbCk7CiB9CiAKPC9wcmU+PC9kaXY+CiAgPHA+PGEgaWQ9IlByb3ZpZGluZ19zZWN1cml0eV91c2luZ19SYW1wYXJ0Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IlByb3ZpZGluZ19TZWN1cml0eV91c2luZ19SYW1wYXJ0X0MiPjwvYT48aDM+UHJvdmlkaW5nIFNlY3VyaXR5IHVzaW5nIFJhbXBhcnQvQzwvaDM+PHA+UmFtcGFydC9DIGlzIHRoZSBzZWN1cml0eSBtb2R1bGUgZm9yIEF4aXMyL0MsIHdoaWNoIHN1cHBvcnRzIFVzZXJuYW1lVG9rZW4KYmFzZWQgYXV0aGVudGljYXRpb24gYW5kIFRpbWVzdGFtcHMgYXMgcGVyIFdTLVNlY3VyaXR5IHNwZWNpZmljYXRpb24uIEluIHRoaXMKVXNlcidzIEd1aWRlIHdlIHdpbGwgZXhwbGFpbiBob3cgdG8gdXNlIFJhbXBhcnQgaW5zaWRlIEF4aXMyL0MuPC9wPjxwPjxhIGlkPSJFbmdhZ2luZ19yYW1wYXJ0X21vZHVsZSI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJFbmdhZ2luZ19yYW1wYXJ0X21vZHVsZSI+PC9hPjxoMz5FbmdhZ2luZyByYW1wYXJ0IG1vZHVsZTwvaDM+PHVsPgogIDxsaT48Yj5TdGVwIDE6PC9iPiBDb3B5IHJhbXBhcnQgZGlyZWN0b3J5IGNyZWF0ZWQgaW4KICAgIEFYSVMyQ19IT01FL2RlcGxveS9yYW1wYXJ0IHRvIEFYSVMyQ19IT01FL2RlcGxveS9tb2R1bGVzCiAgICA8cHJlPmNwICRBWElTMkNfSE9NRS9kZXBsb3kvcmFtcGFydC9yYW1wYXJ0ICRBWElTMkNfSE9NRS9kZXBsb3kvbW9kdWxlczwvcHJlPgogIDwvbGk+CiAgPGxpPjxiPlN0ZXAgMjo8L2I+QWRkIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBheGlzMi54bWwgdW5kZXIgYXhpc2NvbmZpZy4KICAgIFRoaXMgd2lsbCBlbmdhZ2UgdGhlIHJhbXBhcnQgbW9kdWxlLgogICAgPHByZT4mbHQ7bW9kdWxlIHJlZj0icmFtcGFydCIvJmd0OzwvcHJlPgogIDwvbGk+CiAgPGxpPjxiPlN0ZXAgMzo8L2I+VGhlbiBhZGQgdGhlIGZvbGxvd2luZyB0byBheGlzMi54bWwgZmlsZSB0byBzcGVjaWZ5CiAgICBJbi9PdXQgZmxvdyBwYXJhbWV0ZXJzLiBZb3UgbWF5IGZpbmQgYSBzYW1wbGUgYXhpczIueG1sIGZpbGUgaW4KICAgIHJhbXBhcnQvc2FtcGxlcy9jbGllbnQvZWNoby9kYXRhLwogICAgPHA+ICZsdDtwYXJhbWV0ZXIgbmFtZT0iT3V0Zmxvd1NlY3VyaXR5IiZndDsmbHQ7YWN0aW9uJmd0Ozxicj48L2JyPiAmbHQ7aXRlbXMmZ3Q7VXNlcm5hbWVUb2tlbiBUaW1lc3RhbXAmbHQ7L2l0ZW1zJmd0Ozxicj48L2JyPiAmbHQ7dXNlciZndDtHYWphYmEmbHQ7L3VzZXImZ3Q7PGJyPjwvYnI+ICZsdDtwYXNzd29yZFR5cGUmZ3Q7cGFzc3dvcmREaWdlc3QmbHQ7L3Bhc3N3b3JkVHlwZSZndDs8YnI+PC9icj4gJmx0O3Bhc3N3b3JkQ2FsbGJhY2tDbGFzcyZndDsvaG9tZS9nYWphYmEvYXhpczIvYy9kZXBsb3kvcmFtcGFydC9zYW1wbGVzL2NhbGxiYWNrL2xpYnB3Y2Iuc28mbHQ7L3Bhc3N3b3JkQ2FsbGJhY2tDbGFzcyZndDs8YnI+PC9icj4gJmx0O3RpbWVUb0xpdmUmZ3Q7MzYwJmx0Oy90aW1lVG9MaXZlJmd0Ozxicj48L2JyPiAmbHQ7L2FjdGlvbiZndDs8YnI+PC9icj4gJmx0Oy9wYXJhbWV0ZXImZ3Q7PGJyPjwvYnI+IDwvcD4KICAgIDxwIGNsYXNzPSJjb2RlIj4gJmx0O3BhcmFtZXRlciBuYW1lPSJJbmZsb3dTZWN1cml0eSImZ3Q7PGJyPjwvYnI+CiAgICAmbHQ7YWN0aW9uJmd0Ozxicj48L2JyPiAmbHQ7aXRlbXMmZ3Q7VXNlcm5hbWVUb2tlbgogICAgVGltZXN0YW1wJmx0Oy9pdGVtcyZndDs8YnI+PC9icj4KICAgICZsdDtwYXNzd29yZENhbGxiYWNrQ2xhc3MmZ3Q7L2hvbWUvZ2FqYWJhL2F4aXMyL2MvZGVwbG95L3JhbXBhcnQvc2FtcGxlcy9jYWxsYmFjay9saWJwd2NiLnNvJmx0Oy9wYXNzd29yZENhbGxiYWNrQ2xhc3MmZ3Q7PGJyPjwvYnI+ICZsdDsvYWN0aW9uJmd0Ozxicj48L2JyPiAmbHQ7L3BhcmFtZXRlciZndDs8YnI+PC9icj4gPC9wPgoKICA8L2xpPgo8L3VsPjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gWW91IG11c3QgcmVwbGFjZSB0aGUgdmFsdWUgb2YKPGNvZGU+cGFzc3dvcmRDYWxsYmFja0NsYXNzPC9jb2RlPiBwYXJhbWV0ZXIgdG8gc3VpdCB5b3VyIHNldHRpbmdzLjwvcD48cD5Ob3cgZXZlcnl0aGluZyBpcyBzZXR1cCB0byB0cnkgb3V0IHRoZSBzYW1wbGUuIFN0YXJ0IGF4aXMyIHNlcnZlciBhbmQgcnVuCnRoZSBzYW1wbGUgdW5kZXIgcmFtcGFydC9zYW1wbGVzL2NsaWVudC9lY2hvLiBJZiBldmVyeXRoaW5nIHdvcmtzIGZpbmUgYQpzZWN1cml0eSBoZWFkZXIgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBvdXRnb2luZyBTT0FQIG1lc3NhZ2UuPC9wPjxwPiZsdDt3c3NlOlNlY3VyaXR5IHhtbG5zOndzc2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCImZ3Q7PGJyPjwvYnI+ICZsdDt3c3NlOlVzZXJuYW1lVG9rZW4geG1sbnM6d3N1PSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIiZndDs8YnI+PC9icj4gJmx0O3dzc2U6VXNlcm5hbWUmZ3Q7R2FqYWJhJmx0Oy93c3NlOlVzZXJuYW1lJmd0Ozxicj48L2JyPiAmbHQ7d3NzZTpQYXNzd29yZCBUeXBlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wI1Bhc3N3b3JkRGlnZXN0IiZndDtXTlB6bkJOM1BlTHlwS1lYbHdWN3c5ekpaOW89Jmx0Oy93c3NlOlBhc3N3b3JkJmd0Ozxicj48L2JyPiAmbHQ7d3NzZTpOb25jZSZndDtJQ0FnSUNBZ0lERXdORFkwTkRrMU1nPT0mbHQ7L3dzc2U6Tm9uY2UmZ3Q7PGJyPjwvYnI+ICZsdDt3c3U6Q3JlYXRlZCZndDsyMDA2LTA4LTI4VDExOjUyOjI3WiZsdDsvd3N1OkNyZWF0ZWQmZ3Q7PGJyPjwvYnI+ICZsdDsvd3NzZTpVc2VybmFtZVRva2VuJmd0Ozxicj48L2JyPiAmbHQ7d3N1OlRpbWVzdGFtcCB4bWxuczp3c3U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QiJmd0Ozxicj48L2JyPiAmbHQ7d3N1OkNyZWF0ZWQmZ3Q7MjAwNi0wOC0yOFQxMTo1MjoyN1ombHQ7L3dzdTpDcmVhdGVkJmd0Ozxicj48L2JyPiAmbHQ7d3N1OkV4cGlyZXMmZ3Q7MjAwNi0wOC0yOFQxMTo1ODoyN1ombHQ7L3dzdTpFeHBpcmVzJmd0Ozxicj48L2JyPiAmbHQ7L3dzdTpUaW1lc3RhbXAmZ3Q7PGJyPjwvYnI+Jmx0Oy93c3NlOlNlY3VyaXR5Jmd0Ozxicj48L2JyPjwvcD48cD48c3Ryb25nPk5vdGU6IDwvc3Ryb25nPkZvciB0aGUgYWJvdmUgc2FtcGxlIHdlIGhhdmUgdXNlZCB0aGUgc2FtZSBheGlzMi54bWwgZmlsZSBmb3IKYm90aCBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQuIEJ1dCBpbiB0aGUgcmVhbCB3b3JsZCB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gSW4Kc3VjaCBhIHNpdHVhdGlvbiB5b3UgY2FuIHNwZWNpZnkgYSBjbGllbnQgaG9tZSBhcyBhbiBhcmd1bWVudC48L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+Li9lY2hvIFtlbmRwb2ludF91cmxdIFtwYXRoIHRvIHlvdXIgY2xpZW50X2hvbWVdCgo8L3ByZT48L2Rpdj4KICA8L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTZW1hbnRpY3Nfb2ZfUGFyYW1ldGVyc19TcGVjaWZpZWRfaW5fYXhpczJfeG1sIj48L2E+PGgzPlNlbWFudGljcyBvZiBQYXJhbWV0ZXJzIFNwZWNpZmllZCBpbiBheGlzMi54bWw8L2gzPjx0YWJsZSBjbGFzcz0iYm9keVRhYmxlIj48dGJvZHk+CiAgICA8dHIgY2xhc3M9ImIiPjx0ZD48c3Ryb25nPlBhcmFtZXRlcjwvc3Ryb25nPjwvdGQ+PHRkPjxzdHJvbmc+U2VtYW50aWM8L3N0cm9uZz48L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImEiPjx0ZD5pdGVtczwvdGQ+PHRkPlNwZWNpZnkgdGhlIHRva2VucyB0byBiZSB1c2VkIGZvciB0aGUgY3JlZGVudGlhbCBleGNoYW5nZS4gSW4gdGhlCiAgICAgICAgYWJvdmUgZXhhbXBsZSB3ZSB1c2VkIGJvdGggVXNlcm5hbWVUb2tlbnMgYW5kIFRpbWVzdGFtcHM8L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImIiPjx0ZD51c2VyPC90ZD48dGQ+VGhlIHVzZXJuYW1lIG9mIHRoZSBVc2VybmFtZVRva2VuPC90ZD48L3RyPgogICAgPHRyIGNsYXNzPSJhIj48dGQ+cGFzc3dvcmRUeXBlPC90ZD48dGQ+VGhlIHdheSBwYXNzd29yZCBpcyBkZWxpdmVyZWQuIFRoaXMgY2FuIGJlIGVpdGhlciBwYXNzd29yZFRleHQgb3IKICAgICAgICB0aGUgcGFzc3dvcmREaWdlc3QuIFRoZSBmb3JtZXIgZGVsaXZlcnMgcGFzc3dvcmQgaW4gcGxhaW5UZXh0IHdoaWxzdAogICAgICAgIHRoZSBsYXR0ZXIgZGVsaXZlcnMgdGhlIGhhc2hlZCB2YWx1ZSBvZiB0aGUgcGFzc3dvcmQuIERlZmF1bHQgaXMKICAgICAgICBwYXNzd29yZFRleHQ8L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImIiPjx0ZD5wYXNzd29yZENhbGxiYWNrQ2xhc3M8L3RkPjx0ZD5UaGUgbW9kdWxlIHRoYXQgcHJvdmlkZXMgdGhlIHBhc3N3b3JkIGZvciBhIHBhcnRpY3VsYXIgdXNlcjwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYSI+PHRkPnRpbWVUb0xpdmU8L3RkPjx0ZD5UaGUgdmFsaWRpdHkgcGVyaW9kIG9mIHRoZSBUaW1lc3RhbXBUb2tlbiBhZnRlciBpc3N1aW5nLiBUaGUgdGltZQogICAgICAgIGlzIGluIHNlY29uZHMuIEluIHRoZSBhYm92ZSBleGFtcGxlLCBpdCdzIDYgbWludXRlcy4gSWYgbm90CiAgICAgICAgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyA1IG1pbnV0ZXM8L3RkPjwvdHI+CiAgPC90Ym9keT48L3RhYmxlPjxwPjxhIGlkPSJXcml0aW5nX293bl9wYXNzd29yZF9jYWxsYmFja19tb2R1bGUiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV3JpdGluZ19Zb3VyX093bl9QYXNzd29yZF9DYWxsYmFja19Nb2R1bGUiPjwvYT48aDM+V3JpdGluZyBZb3VyIE93biBQYXNzd29yZCBDYWxsYmFjayBNb2R1bGU8L2gzPjxwPlRoZSBSYW1wYXJ0IG1vZHVsZSBpcyBub3QgZGVwZW5kZW50IG9uIHRoZSB3YXkgdGhhdCBwYXNzd29yZHMgYXJlIHN0b3JlZC4KRm9yIGV4YW1wbGUsIHlvdSBtYXkgaGF2ZSBwYXNzd29yZHMgaW4gYSBmbGF0IGZpbGUgb3IgaW4gYSBzZWN1cmVkIGRhdGFiYXNlLgpXaGF0IGV2ZXIgdGhlIHdheSwgUmFtcGFydCBleHBlY3RzIGEgcGFzc3dvcmQgY2FsbGJhY2sgbW9kdWxlIHRvIHJldHJpZXZlCnBhc3N3b3JkcyBmb3IgYSBnaXZlbiB1c2VybmFtZS4gVGhlIHNhbXBsZSBjb21pbmcgdW5kZXIKIiZsdDtheGlzMmNfaG9tZSZndDtyYW1wYXJ0L3NhbXBsZXMvY2FsbGJhY2siIGlzIGEgc2ltcGxlIG9uZSBjb250YWluaW5nIGEgCmZldyBoYXJkLWNvZGVkIHBhc3N3b3Jkcy4gSXQgYXNzaWducyBhIGZ1bmN0aW9uIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT5yY2ItJmd0O29wcy0mZ3Q7Y2FsbGJhY2tfcGFzc3dvcmQgPSBnZXRfc2FtcGxlX3Bhc3N3b3JkOwoKPC9wcmU+PC9kaXY+CiAgPHA+PGNvZGU+Y2FsbGJhY2tfcGFzc3dvcmQ8L2NvZGU+IGlzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBhbnkgZnVuY3Rpb24gd2hpY2gKaGFzIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4qCnlvdXJfZnVuY3Rpb24ocmFtcGFydF9jYWxsYmFja190ICpyY2IsCiAgICAgICAgICAgICAgY29uc3QgYXhpczJfZW52X3QgKmVudiwgY29uc3QgYXhpczJfY2hhcl90ICp1c2VybmFtZSkKCjwvcHJlPjwvZGl2PgogIDxwPjxjb2RlPnlvdXJfZnVuY3Rpb248L2NvZGU+IHNob3VsZCByZXR1cm4gdGhlIHBhc3N3b3JkIGFzCjxjb2RlPmF4aXMyX2NoYXJfdDwvY29kZT4qIHBlciB0aGUgdXNlcm5hbWUgc3BlY2lmaWVkLCBpZiBhbnkuIEluc2lkZSB5b3VyCmZ1bmN0aW9uLCB5b3UgbWF5IHdyaXRlIHlvdXIgY29kZSB0byBzdXBwbHkgc3RvcmVkIHBhc3N3b3Jkcy48L3A+PHA+VGhlbiB0aGUgcGF0aCB0byB0aGUgY2FsbGJhY2sgbW9kdWxlIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbiBheGlzMi54bWwKdW5kZXIgcGFzc3dvcmRDYWxsYmFja0NsYXNzLiBbVGhlIHdvcmQgQ2xhc3MsIGluc3RlYWQgb2YgTW9kdWxlIGlzIG9ubHkgZm9yCmNvbXBhdGliaWxpdHkgd2l0aCBqYXZhIGltcGxlbWVudGF0aW9uXTwvcD48cD48YSBpZD0iQWRkaW5nX3NlY3VyaXR5X3BhcmFtZXRlcnNfZHluYW1pY2FsbHkiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQWRkaW5nX1NlY3VyaXR5X1BhcmFtZXRlcnNfRHluYW1pY2FsbHkiPjwvYT48aDM+QWRkaW5nIFNlY3VyaXR5IFBhcmFtZXRlcnMgRHluYW1pY2FsbHk8L2gzPjxwPk91dGZsb3cgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gdGhlIGF4aXMyLnhtbCBjYW4gYmUgYWRkZWQgZHluYW1pY2FsbHkgaW4KdGhlIGNsaWVudCBsZXZlbC4gVGhpcyBjYW4gYmUgZG9uZSBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIHNhbXBsZSBjb2RlLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4gdW5fcHJvcGVydHkgPSBheGlzMl9wcm9wZXJ0eV9jcmVhdGUoZW52KTsKQVhJUzJfUFJPUEVSVFlfU0VUX1ZBTFVFKHVuX3Byb3BlcnR5LCBlbnYsICJHYWphYmEiKTsKQVhJUzJfT1BUSU9OU19TRVRfUFJPUEVSVFkob3B0aW9ucywgZW52LCBSQU1QQVJUX0FDVElPTl9VU0VSLCB1bl9wcm9wZXJ0eSk7Cgo8L3ByZT48L2Rpdj4KICA8cD5UaGUgYWJvdmUgY29kZSB3aWxsIHNldCB0aGUgdXNlcm5hbWUgcGFyYW1ldGVyIGR5bmFtaWNhbGx5LiBBbGwgdGhlIHZhbHVlcwpzcGVjaWZpZWQgaW4gdGhlIGF4aXMyLnhtbCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGR5bmFtaWMgc2V0dGluZ3MuPC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IlJlZmVyZW5jZXMiPjwvYT48aDM+UmVmZXJlbmNlczwvaDM+PHVsPgogIDxsaT5JbnRyb2R1Y2luZyBBcGFjaGUgQXhpczIvQyAtIDxhIGhyZWY9Imh0dHA6Ly93d3cud3NvMi5uZXQvYXJ0aWNsZXMvYXhpczIvYy8yMDA2LzA5LzA0L2ludHJvZHVjdGlvbiIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkV4dGVybmFsIExpbmsiPmh0dHA6Ly93d3cud3NvMi5uZXQvYXJ0aWNsZXMvYXhpczIvYy8yMDA2LzA5LzA0L2ludHJvZHVjdGlvbjwvYT48L2xpPgogIDxsaT5JbnRyb2R1Y2luZyBSYW1wYXJ0L0MtIDxhIGhyZWY9Imh0dHA6Ly93d3cud3NvMi5uZXQvYXJ0aWNsZXMvcmFtcGFydC9jLzIwMDYvMDkvMTkvaW50cm9kdWN0aW9uIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+aHR0cDovL3d3dy53c28yLm5ldC9hcnRpY2xlcy9yYW1wYXJ0L2MvMjAwNi8wOS8xOS9pbnRyb2R1Y3Rpb248L2E+PC9saT4KPC91bD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+PGhyPjwvaHI+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj48ZGl2IGNsYXNzPSJ4cmlnaHQiPqkgMjAwNS0yMDA2LCBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPg==