PD9waHAgIHJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlYW0tbGVhZGVycy5waHAKCSMKCSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkKCSMKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIlJUIFByb2plY3QgTGVhZGVyc2hpcCI7CgkkcGFnZUtleXdvcmRzCT0gIlJUIFBNQyBwcm9qZWN0IGxlYWQiOwoJJHBhZ2VBdXRob3IJCT0gIiI7CgkKCSMgQWRkIHBhZ2Utc3BlY2lmaWMgTmF2IGJhcnMgaGVyZQoJIyBGb3JtYXQgaXMgTGluayB0ZXh0LCBsaW5rIFVSTCAoY2FuIGJlIGh0dHA6Ly93d3cuc29tZW90aGVyc2l0ZS5jb20vKSwgdGFyZ2V0IChfc2VsZiwgX2JsYW5rKSwgbGV2ZWwgKDEsIDIgb3IgMykKCSMgJE5hdi0+YWRkTmF2U2VwYXJhdG9yKCJNeSBQYWdlIExpbmtzIiwgCSJkb3dubG9hZHMucGhwIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIiwgMyk7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIiwgMyk7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCQkKCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgbWFya2VycyEJCm9iX3N0YXJ0KCk7Cj8+CQkKCgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxoMT48Pz0gJHBhZ2VUaXRsZSA/PjwvaDE+CgkJPGgyPldobydzIHJ1bm5pbmcgdGhpcyBwcm9qZWN0PzwvaDI+CiAgICAgIDxwPlRoZSBSVCBQcm9qZWN0IGlzIG1hbmFnZWQgYnkgYSBzbWFsbCBncm91cCBrbm93biBhcyB0aGUgUlQKICAgICAgICBQcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlIChQTUMpLiAKICAgICAgICBUaGUgd29yayBvZiB0aGUgUHJvamVjdCBpcyBvcmdhbml6ZWQgaW50byBzdWJwcm9qZWN0cy4gRWFjaCBzdWJwcm9qZWN0IAogICAgICAgIGhhcyBhIGxlYWRlciB3aG8gaGFzIG92ZXJhbGwgcmVzcG9uc2liaWxpdHkgZm9yIGl0cyBzdWNjZXNzLiBMYXJnZSBzdWJwcm9qZWN0cyAKICAgICAgICBhcmUgZnVydGhlciBkaXZpZGVkIGludG8gY29tcG9uZW50IHRlYW1zLCBlYWNoIG9mIHdobyBoYXMgYSBsZWFkZXIgdGhhdCAKICAgICAgICBpcyByZXNwb25zaWJsZSBmb3IgaXRzIG92ZXJhbGwgc3VjY2Vzcy4gQW5kIHNvIG9uLiAgTGlzdGVkIGhlcmUgYXJlIHRoZSBQTUMgYW5kIAogICAgICAgIHByb2plY3QgbGVhZGVycyBoZXJlLiAgWW91IHdpbGwgZW5jb3VudGVyIG1hbnkgZGVkaWNhdGVkIAogICAgICAgIHByb2plY3QgY29tbWl0dGVycyBhbmQgZGV2ZWxvcGVycyBpbiB0aGUgPGEgaHJlZj0iL25ld3Nncm91cHMiIHRhcmdldD0iX3RvcCI+bmV3c2dyb3VwPC9hPiAKICAgICAgICBhbmQgPGEgaHJlZj0iL21haWwiIHRhcmdldD0iX3RvcCI+bWFpbGluZyBsaXN0czwvYT4uPC9wPgoKCgkJCTxwIGNsYXNzPWJhcj5Qcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlIE1lbWJlcnM8L3A+CgkJICAgICAgPHVsPgoJCSAgICAgICAgPGxpPiAKCQkgICAgICAgICAgPGI+PGEgbmFtZT0iamVmZiI+PC9hPkplZmYgTWNBZmZlciwgPGEgaHJlZj0iaHR0cDovL2VjbGlwc2Vzb3VyY2UuY29tIj5FY2xpcHNlU291cmNlPC9hPiwgUlQgUE1DIGNvLWxlYWQ8L2I+PGJyPgoJCSAgICAgICAgICBKZWZmIGxlYWRzIHRoZSBFY2xpcHNlIDxhIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94Ij5FcXVpbm94IAoJCSAgICAgICAgICBPU0dpPC9hPiwgPGEgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL3JjcCI+UkNQPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL29yYml0Ij5PcmJpdDwvYT4KCQkgICAgICAgICAgdGVhbXMgYW5kIGlzIGNvLWZvdW5kZXIgYW5kIENUTyBvZiA8YSBocmVmPSJodHRwOi8vZWNsaXBzZXNvdXJjZS5jb20iPkVjbGlwc2VTb3VyY2U8L2E+LiBIZSBpcyBvbmUgCgkJICAgICAgICAgIG9mIHRoZSBhcmNoaXRlY3RzIG9mIHRoZSBFY2xpcHNlIFBsYXRmb3JtIGFuZCBhIGNvLWF1dGhvciBvZiA8YSBocmVmPSJodHRwOi8vZWNsaXBzZXJjcC5vcmciPlRoZSBFY2xpcHNlIFJpY2ggCgkJICAgICAgICAgIENsaWVudCBQbGF0Zm9ybTwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly9lcXVpbm94b3NnaS5vcmciPkVxdWlub3ggYW5kIE9TR2kgLSBUaGUgcG93ZXIgYmVoaW5kIEVjbGlwc2U8L2E+IAoJCSAgICAgICAgICAoQWRkaXNvbi1XZXNsZXkpLiAgSmVmZiBjby1sZWFkcyB0aGUgRWNsaXBzZSA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvcnQvdGVhbS1sZWFkZXJzLnBocCI+UlQgUE1DPC9hPiAKCQkgICAgICAgICAgYW5kIGlzIGEgbWVtYmVyIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZWNsaXBzZS90ZWFtLWxlYWRlcnMucGhwIj5FY2xpcHNlIFByb2plY3QgUE1DPC9hPiwgdGhlIAoJCSAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvdG9vbHMvdGVhbS1sZWFkZXJzLnBocCI+VG9vbHMgUHJvamVjdCBQTUM8L2E+LCB0aGUgRWNsaXBzZSBBcmNoaXRlY3R1cmUgQ291bmNpbCAKCQkgICAgICAgICAgYW5kIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gQm9hcmQgb2YgRGlyZWN0b3JzLiAgSmVmZiBpcyBjdXJyZW50bHkgaW50ZXJlc3RlZCBhbGwgYXNwZWN0cyBvZiBFY2xpcHNlIGNvbXBvbmVudHJ5IAoJCSAgICAgICAgICBmcm9tIGRlc2lnbmluZywgZGV2ZWxvcGluZyBhbmQgYnVpbGRpbmcgYnVuZGxlcyB0byBkZXBsb3lpbmcsIGluc3RhbGxpbmcgYW5kIHVsdGltYXRlbHkgcnVubmluZyB0aGVtLiAgUHJldmlvdXMgCgkJICAgICAgICAgIGxpdmVzIGluY2x1ZGUgYmVpbmcgYSBTZW5pb3IgVGVjaG5pY2FsIFN0YWZmIE1lbWJlciBhdCBJQk0sIHdvcmsgaW4gZGlzdHJpYnV0ZWQvcGFyYWxsZWwgT08gY29tcHV0aW5nIChTZXJ2ZXIgCgkJICAgICAgICAgIFNtYWxsdGFsaywgbWFzc2l2ZWx5IHBhcmFsbGVsIFNtYWxsdGFsaywgZXRjKSBhcyB3ZWxsIGFzIGV4cGVydCBzeXN0ZW1zLCBtZXRhLWxldmVsIGFyY2hpdGVjdHVyZXMgYW5kIGEgUGhEIAoJCSAgICAgICAgICBhdCB0aGUgVW5pdmVyc2l0eSBvZiBUb2t5by4KCQkgICAgICAgIDwvbGk+CgoJCSAgICAgICAgPGxpPiAKCQkgICAgICAgICAgPGI+PGEgbmFtZT0iam9jaGVuIj48L2E+Sm9jaGVuIEtyYXVzZSwgRWNsaXBzZVNvdXJjZSwgUlQgUE1DIGNvLWxlYWQ8L2I+PGJyPgoJCSAgICAgICAgICBKb2NoZW4gS3JhdXNlIGNvLWxlYWRzIHRoZSBFY2xpcHNlIFJpY2ggQWpheCBQbGF0Zm9ybSAoUkFQKSBhbmQgRWNsaXBzZSBSdW50aW1lIHByb2plY3RzLCBhbmQgaXMgYSBtZW1iZXIgCgkJICAgICAgICAgIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gQm9hcmQgb2YgRGlyZWN0b3JzIGFuZCBBcmNoaXRlY3R1cmUgQ291bmNpbC4gSm9jaGVuIGhhcyBoYWQgYSBsZWFkZXJzaGlwIHJvbGUgaW4gCgkJICAgICAgICAgIHRoZSBFY2xpcHNlIGNvbW11bml0eSBzaW5jZSBpdHMgaW5jZXB0aW9uIGluIDIwMDIsIGFuZCB0b2RheSBpcyBmb2N1c2VkIG9uIGRyaXZpbmcgRWNsaXBzZSB0byBiZSBhbiBhcHBsaWNhdGlvbiAKCQkgICAgICAgICAgcGxhdGZvcm0gZm9yIHdlYiBhbmQgZGVza3RvcC4gSm9jaGVuIGlzIGEgZm91bmRlciBvZiA8YSBocmVmPSJodHRwOi8vZWNsaXBzZXNvdXJjZS5jb20iPkVjbGlwc2VTb3VyY2U8L2E+IGFuZCBoYXMgYmVlbiBicmluZ2luZyBFY2xpcHNlIHRlY2hub2xvZ3kgCgkJICAgICAgICAgIHRvIGVudGVycHJpc2UgY3VzdG9tZXJzLCB3aGlsZSBndWlkaW5nIHN0cmF0ZWdpYyB0ZWNobmljYWwgY29udHJpYnV0aW9ucyB0byBFY2xpcHNlLiBFY2xpcHNlU291cmNlIHN0YWZmIGFyZSAKCQkgICAgICAgICAgaW52b2x2ZWQgaW4gbWFueSBFY2xpcHNlIHByb2plY3RzIHN1Y2ggYXMgRXF1aW5veCwgUERFLCBSQVAsIEVDRiwgcDIsIFJpZW5hLCBFY2xpcHNlIFBhY2thZ2luZyBhbmQgZy1FY2xpcHNlLgoJCSAgICAgICA8L2xpPgoJCSAgICAgICAgPGxpPiAKCQkgICAgICAgICAgPGI+PGEgbmFtZT0iZG91ZyI+PC9hPkRvdWcgQ2xhcmtlLCBPcmFjbGU8L2I+PGJyPgoJCSAgICAgICA8L2xpPgoJCSAgICAgICAgPGxpPiAKCQkgICAgICAgICAgPGI+PGEgbmFtZT0idG9tIj48L2E+VGhvbWFzIFdhdHNvbiwgSUJNLCA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veCI+RXF1aW5veCBjby1sZWFkPC9hPjwvYj48YnI+CgkgICAgICAgICAgICAgIFRvbSBpcyBhIG1lbWJlciBvZiB0aGUgRWNsaXBzZSA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvcnQvdGVhbS1sZWFkZXJzLnBocCI+UlQgUE1DPC9hPiBhbmQgCgkgICAgICAgICAgICAgIGNvLWxlYWRzIHRoZSA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veCI+RXF1aW5veCBQcm9qZWN0PC9hPiBhdCBFY2xpcHNlLiBUb20ncyBmb2N1cyBpcyBvbiAKCSAgICAgICAgICAgICAgbW9kdWxhcml0eSBhbmQgdGhlIE9TR2kgRnJhbWV3b3JrIGRlc2lnbiBhbmQgZGV2ZWxvcG1lbnQuIFRvbSBpcyB0aGUgbGVhZCBkZXZlbG9wZXIgZm9yIHRoZSBFcXVpbm94IE9TR2kgCgkgICAgICAgICAgICAgIEZyYW1ld29yayBpbXBsZW1lbnRhdGlvbi4gVG9tIGlzIGFsc28gYSBsZWFkZXIgaW4gdGhlIHNwZWNpZmljYXRpb24gZGV2ZWxvcG1lbnQgcHJvY2VzcyBhdCB0aGUgT1NHaSBBbGxpYW5jZS4KCSAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgVG9tIHBhcnRpY2lwYXRlcyBpbiB0aGUgQ29yZSBQbGF0Zm9ybSBFeHBvcnQgR3JvdXAgYXQgdGhlIE9TR2kgQWxsaWFuY2UgYW5kIGlzIGN1cnJlbnRseSAKCSAgICAgICAgICAgICAgd29ya2luZyBvbiB0aGUgbmV4dCBPU0dpIHNwZWNpZmljYXRpb24uCgkJICAgICAgIDwvbGk+CgkJICAgICAgICA8bGk+IAoJCSAgICAgICAgICA8Yj48YSBuYW1lPSJyaWNjbyI+PC9hPlJpY2NvIERldXRzY2hlciwgU29wZXJhPC9iPjxicj4KCQkgICAgICAgPC9saT4KCQkgICAgICA8L3VsPgoKCTxwIGNsYXNzPWJhcj5Qcm9qZWN0IExlYWRzPC9wPgoKPHA+CgkJCTx1bD4KCQkJCTxsaT48YSBocmVmPSIvZWNmIiB0YXJnZXQ9Il90b3AiPkVDRjwvYT4gLS0gPGEgaHJlZj0iIj5TY290dCBMZXdpczwvYT4gPC9saT4KCQkJCTxsaT48YSBocmVmPSIvZWNsaXBzZWxpbmsiIHRhcmdldD0iX3RvcCI+RWNsaXBzZUxpbms8L2E+IC0tIDxhIGhyZWY9IiNkb3VnIj5Eb3VnIENsYXJrZTwvYT4gPC9saT4KCQkJCTxsaT48YSBocmVmPSIvZXF1aW5veCIgdGFyZ2V0PSJfdG9wIj5FcXVpbm94PC9hPiAtLSA8YSBocmVmPSIjamVmZiI+SmVmZiBNY0FmZmVyPC9hPiBhbmQgPGEgaHJlZj0iI3RvbSI+VG9tIFdhdHNvbjwvYT48L2xpPgoJCQkJPGxpPjxhIGhyZWY9Ii9lcmNwIiB0YXJnZXQ9Il90b3AiPmVSQ1A8L2E+IC0tIDxhIGhyZWY9IiI+R29ya2VtIEVyY2FuPC9hPiA8L2xpPgoJCQkJPGxpPjxhIGhyZWY9Ii9yYXAiIHRhcmdldD0iX3RvcCI+UkFQPC9hPiAtLSA8YSBocmVmPSIiPlL8ZGlnZXIgSGVycm1hbm48L2E+IDwvbGk+CgkJCQk8bGk+PGEgaHJlZj0iL3JpZW5hIiB0YXJnZXQ9Il90b3AiPlJpZW5hPC9hPiAtLSA8YSBocmVmPSIiPkNocmlzdGlhbiBDYW1wbzwvYT4gPC9saT4KCQkJCTxsaT48YSBocmVmPSIvc21pbGEiIHRhcmdldD0iX3RvcCI+U01JTEE8L2E+IC0tIDxhIGhyZWY9IiI+QXVndXN0IEdlb3JnIFNjaG1pZHQgYW5kIElnb3IgTm92YWtvdmljPC9hPiA8L2xpPgoJCQkJPGxpPjxhIGhyZWY9Ii9zd29yZGZpc2giIHRhcmdldD0iX3RvcCI+U3dvcmRmaXNoPC9hPiAtLSA8YSBocmVmPSIiPk9saXZlciBXb2xmIDwvYT4gPC9saT4KICAgICAgCQk8L3VsPgo8L3A+CgoJCQk8cD4mbmJzcDs8L3A+CgoJPC9kaXY+Cjw/cGhwCglpbmNsdWRlICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL3J0L2dsb2JhbC1saW5rcy5odG1sIjsKCWlmIChmaWxlX2V4aXN0cygiZGlyLWxpbmtzLmh0bWwiKSkge2luY2x1ZGUgImRpci1saW5rcy5odG1sIjt9Cj8+CgoKPD9waHAKCSRodG1sID0gb2JfZ2V0X2NvbnRlbnRzKCk7CglvYl9lbmRfY2xlYW4oKTsKCgkjIEdlbmVyYXRlIHRoZSB3ZWIgcGFnZQoJJEFwcC0+Z2VuZXJhdGVQYWdlKCR0aGVtZSwgJE1lbnUsICROYXYsICRwYWdlQXV0aG9yLCAkcGFnZUtleXdvcmRzLCAkcGFnZVRpdGxlLCAkaHRtbCk7Cj8+Cg==