PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCQoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0wNi0xNgoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCSRkb2N1bWVudFJvb3QgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwoJLy9yZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLicvZXVyb3BhL3NjcmlwdHMvcHJvamVjdHNUYWJsZS5waHAnKTsKCXJlcXVpcmVfb25jZSAoJGRvY3VtZW50Um9vdCAuICcvcmVzb3VyY2VzL3NjcmlwdHMvcmVzb3VyY2VzX2h0bWwucGhwJyk7CQoJcmVxdWlyZV9vbmNlICgkZG9jdW1lbnRSb290IC4gJy9ldXJvcGEvc2NyaXB0cy93aGF0c25ldy5waHAnKTsKCSMKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkVjbGlwc2UgRXVyb3BhIFJlbGVhc2UiOwoJJHBhZ2VLZXl3b3Jkcwk9ICJFY2xpcHNlIEV1cm9wYSBTaW11bHRhbmVvdXMgUmVsZWFzZSI7CgkkcGFnZUF1dGhvcgkJPSAiTmF0aGFuIEdlcnZhaXMiOwoJCgkjIEFkZCBwYWdlLXNwZWNpZmljIE5hdiBiYXJzIGhlcmUKCSMgRm9ybWF0IGlzIExpbmsgdGV4dCwgbGluayBVUkwgKGNhbiBiZSBodHRwOi8vd3d3LnNvbWVvdGhlcnNpdGUuY29tLyksIHRhcmdldCAoX3NlbGYsIF9ibGFuayksIGxldmVsICgxLCAyIG9yIDMpCgkjICROYXYtPmFkZE5hdlNlcGFyYXRvcigiTXkgUGFnZSBMaW5rcyIsIAkiZG93bmxvYWRzLnBocCIpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIk15IExpbmsiLCAibXlwYWdlLnBocCIsICJfc2VsZiIsIDEpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIkdvb2dsZSIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgIl9ibGFuayIsIDEpOwoKCSMgRW5kOiBwYWdlLXNwZWNpZmljIHNldHRpbmdzCgkjCgkvLyBUaGlzIGZpbGUgaXMgbGlua2VkIHRvIGZyb20gbG90cyBvZiBkaWZmZXJlbnQgcGxhY2VzLgoJLy8gVXNlIGFic29sdXRlIHBhdGhzIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBhY3R1YWxseSB0ZXN0CgkvLyB0aGF0IHRoZSBmaWxlIHJlbmRlcnMgcHJvcGVybHkgKGkuZS4gdGVzdGluZyB1c2luZykgIi9pbmRleC5waHAiLAoJLy8gYW5kICIvaG9tZS9pbmRleC5waHAiIGJvdGggd29yay4KCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgRU9IVE1MIG1hcmtlcnMhCgkKCSR3aGF0c25ldyA9IHJzc190b19zaWRlaXRlbV9odG1sKCcvY29tbXVuaXR5L25ld3MvMjAwNWludGhlbmV3c2FyY2hpdmUnLCAzLCAiZXVyb3BhIik7CQoJJHJlc291cmNlX2ZpbHRlciA9ICJFdXJvcGEiOwoJLy8kZGlzcGxheVRhYnMgPSBkaXNwbGF5VGFicygpOwkJCgkkcmVzb3VyY2VzX3RhYmxlID0gJFJlc291cmNlc19IVE1MLT5nZXRfcGlsbGFyX3Jlc291cmNlc190YWJsZSgkcmVzb3VyY2VfZmlsdGVyKTsKCSAKCW9iX3N0YXJ0KCk7Cgk/PgoJPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNjcmlwdHMvY291bnRkb3duLmpzIj48L3NjcmlwdD4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImxheW91dC5jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxkaXYgaWQ9ImhlYWRlckJHIj4KCQkJPHRhYmxlIGNlbGxzcGFjaW5nPTAgY2xhc3M9ImhlYWRlckJhciBjb21pbmciPgoJICAgICAgICAJPHRyPgoJICAgICAgICAJCTx0ZCBhbGlnbj0icmlnaHQiPjxpbWcgc3JjPSJpbWFnZXMvdGFiRGF0ZS5naWYiIGFsaWduPSJyaWdodCIgaWQ9ImRhdGVUYWIiIj48L3RkPgoJCQkJPC90cj4JCQkJCgkJCTwvdGFibGU+CgkJPC9kaXY+CgkJPHA+CgkJCQlFY2xpcHNlIEV1cm9wYSBpcyB0aGUgYW5udWFsIHJlbGVhc2Ugb2YgRWNsaXBzZSBwcm9qZWN0cy4gIExpa2UgbGFzdCB5ZWFyknMgQ2FsbGlzdG8gcmVsZWFzZSwgdGhlIEV1cm9wYSByZWxlYXNlIGlzIGEgY29vcmRpbmF0ZSByZWxlYXNlIG9mIGRpZmZlcmVudCBFY2xpcHNlIHByb2plY3QgdGVhbXMuICAgVGhpcyB5ZWFyLCB0aGUgYW5udWFsIHJlbGVhc2UgaW5jbHVkZXMgPGEgaHJlZj0icHJvamVjdHMucGhwIj4yMSBwcm9qZWN0cy48L2E+ICAgQnkgcmVsZWFzaW5nIHRoZXNlIHByb2plY3RzIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBnb2FsIGlzIHRvIGVsaW1pbmF0ZSB1bmNlcnRhaW50eSBhYm91dCB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGluY29ycG9yYXRlIG11bHRpcGxlIHByb2plY3RzIGludG8geW91ciBlbnZpcm9ubWVudC4KCQkgICAgICAgIDxiciAvPjxiciAvPgoJCSAgICAgICAgICAgICAgCgkJICAgICAgICA8ZW0+V2hpbGUgRXVyb3BhIGlzIGFib3V0IHRoZSBzaW11bHRhbmVvdXMgcmVsZWFzZSBvZiA8YSBocmVmPSJwcm9qZWN0cy5waHAiPnR3ZW50eSBvbmUgcHJvamVjdHM8L2E+LCBpdCBpcwoJCSAgICAgICAgbm90IGEgdW5pZmljYXRpb24gb2YgdGhlIHByb2plY3RzIC0gZWFjaCBwcm9qZWN0IHJlbWFpbnMgYSBzZXBhcmF0ZSBvcGVuIHNvdXJjZSBwcm9qZWN0IG9wZXJhdGluZyB3aXRoIGl0cyBvd24gcHJvamVjdCBsZWFkZXJzaGlwLCBpdHMgb3duIGNvbW1pdHRlcnMsIGFuZCBpdHMgb3duIHByb2plY3QgcGxhbi48L2VtPgoJCQkJPGJyLz4KCQkJCTxici8+CgkJCQk8c3BhbiBjbGFzcz0iZXVyb3BhTGluayI+SGVscCBQcm9tb3RlIEVjbGlwc2UgRXVyb3BhPC9zcGFuPjxici8+CgkJCQlWaXNpdCBvdXIgPGEgaHJlZj0iZnJpZW5kcy5waHAiPkZyaWVuZHMgb2YgRXVyb3BhPC9hPiBwYWdlIGFuZCBpbmNsdWRlIG9uZSBvZiB0aGUgaW1hZ2VzIG9uIHlvdXIgc2l0ZS48YnIvPjxici8+CgkJCQk8c3BhbiBjbGFzcz0iZXVyb3BhTGluayI+VGVzdCBEcml2ZSB0aGUgTGF0ZXN0IEVjbGlwc2UgRXVyb3BhIFJlbGVhc2UgQ2FuZGlkYXRlcyAoUkMpPC9zcGFuPjxici8+CgkJCQlUaGUgRWNsaXBzZSBFdXJvcGEgdXBkYXRlIHNpdGUgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvZXVyb3BhL3NpdGUueG1sPGJyLz5UbyB1c2UgdGhlIHVwZGF0ZSBzaXRlIGNvcHkgdGhlIFVSTCBhYm92ZSBhbmQgcGFzdGUgaXQgaW50byB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlci48YnIvPjxici8+CgkJCQk8c3BhbiBjbGFzcz0iZXVyb3BhTGluayI+Rm9sbG93IHRoZSBFY2xpcHNlIEV1cm9wYSBEZXZlbG9wbWVudCBDb29yZGluYXRpb248L3NwYW4+PGJyLz4KCQkJCUNoZWNrIG91dCB0aGUgPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL0V1cm9wYV9TaW11bHRhbmVvdXNfUmVsZWFzZSI+RWNsaXBzZSBFdXJvcGEgV2lraSBQYWdlPC9hPiB0byBjaGVjayBvdXQgdGhlIHN0YXR1cyBvZiBFdXJvcGE8L2JyPjxici8+CgkJPC9wPgoJCgoJCTxici8+CgkJPD8gLyo8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MD4KCQkJPHRyPgoJCQkJPHRkIGNvbHNwYW49IjIiPgkJCQkKCQkJCQk8ZGl2IGlkPSJ0ZWNobmljYWxSZXNvdXJjZXMiPgoJCQkJCQk8Pz0kcmVzb3VyY2VzX3RhYmxlOz8+CgkJCQkJPC9kaXY+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCQk8L3RhYmxlPiAqLyA/PgkJCgoJCTxwPiZuYnNwOzwvcD4KCgk8L2Rpdj4KCgk8ZGl2IGlkPSJyaWdodGNvbHVtbiI+CgkJPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQk8aDY+UmVsYXRlZCBMaW5rczwvaDY+CgkJCQk8dWw+CgkJCQkJPGxpPjxhIGhyZWY9ImZyaWVuZHMucGhwIj5GcmllbmRzIG9mIEV1cm9wYTwvYT48L2xpPgoJCQkJCTxsaT48YSBocmVmPSJwcm9qZWN0cy5waHAiPkV1cm9wYSBQcm9qZWN0czwvYT48L2xpPgoJCQkJCTxsaT48YSBocmVmPSIvb3JnL3ByZXNzLXJlbGVhc2UvMjAwNzA2MTJjYl9ldXJvcGFyZXZpZXdzLnBocCI+V3JpdGUgYSBSZXZpZXcsIFdpbiBhbiBFY2xpcHNlIFNoaXJ0PC9hPjwvbGk+CgkJCQk8L3VsPgoJCTwvZGl2PgoJCQoJCTxkaXYgY2xhc3M9InNpZGVpdGVtIj4KCQkJPGg2PkNvdW50ZG93biB0byBFdXJvcGE8L2g2PgoJCQk8ZGl2IGlkPSJjb3VudGRvd24iPgoJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CgkgICA8PyAvKjxkaXYgY2xhc3M9InNpZGVpdGVtIj4KCQkJCTw/PSR3aGF0c25ldzs/PgkKCQk8L2Rpdj4KCQkKCQk8ZGl2IGNsYXNzPSJzaWRlaXRlbSI+CgkJCTxoNj5SZWxhdGVkIExpbmtzPC9oNj4KCQkJPHVsPgoJCQkJPGxpPjxhIGhyZWY9ImZyaWVuZHMucGhwIj5GcmllbmRzIG9mIEV1cm9wYTwvYT48L2xpPgoJCQk8L3VsPgoJCTwvZGl2PgoJCSAqLyA/PiAKCTwvZGl2PgoKPD8gCiRodG1sID0gb2JfZ2V0X2NvbnRlbnRzKCk7Cm9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4KCg==