Name: series-workflow46mr7 Phase: Failed StartedAt: 2026-09-14 09:26:32 +0000 UTC FinishedAt: 2026-09-14 10:30:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow46mr7[0] Phase: Succeeded StartedAt: 2026-09-14 09:26:32 +0000 UTC FinishedAt: 2026-09-14 10:30:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow46mr7[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 09:26:32 +0000 UTC FinishedAt: 2026-09-14 10:30:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGM3MmNiNTQ5NGViMjYwOTQwZTBjZDI5Yzk0ZTQ4OGIyMjY1YmUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mjc6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuaW5kZXggY2NjMjRhMTMwMWYyMi4uODQ4ZWU2NTVjNmVhNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuQEAgLTUwODYsNyAmIzQzOzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcbiBcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwmIzM0O210dSAlZCB0b28gaGlnaCwgc3dpdGNoaW5nIHRvIHNoYXJlZCBidWZmZXJzXCYjMzQ7LCBtdHUpO1xuIFx0XHRcdG12cHAyX2JtX3N3aXRjaF9idWZmZXJzKHByaXYsIGZhbHNlKTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbiYjNDM7XHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIG12cHAyX2dldF9ucnhxcyhwcml2KSAqIDIgXHUwMDNjPSBNVlBQMl9CTV9NQVhfUE9PTFMpIHtcbiBcdFx0Ym9vbCBqdW1ibyA9IGZhbHNlO1xuIFx0XHRpbnQgaTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYywgd2hpY2ggaXMgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIFNvQ3MgKENPTkZJR19NVlBQMikuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGllZCB0byBNYXJ2ZWxsIEFybWFkYSBTb0MgaGFyZHdhcmUgKGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1QpIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBIZW5jZSwgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoyNzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKaW5kZXggY2NjMjRhMTMwMWYyMi4uODQ4ZWU2NTVjNmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKQEAgLTUwODYsNyAmIzQzOzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIAkJCW5ldGRldl93YXJuKGRldiwgJiMzNDttdHUgJWQgdG9vIGhpZ2gsIHN3aXRjaGluZyB0byBzaGFyZWQgYnVmZmVycyYjMzQ7LCBtdHUpOwogCQkJbXZwcDJfYm1fc3dpdGNoX2J1ZmZlcnMocHJpdiwgZmFsc2UpOwogCQl9Ci0JfSBlbHNlIHsKJiM0MzsJfSBlbHNlIGlmIChwcml2LSZndDtod192ZXJzaW9uICZndDs9IE1WUFAyMiAmYW1wOyZhbXA7CiYjNDM7CQkgICBtdnBwMl9nZXRfbnJ4cXMocHJpdikgKiAyICZsdDs9IE1WUFAyX0JNX01BWF9QT09MUykgewogCQlib29sIGp1bWJvID0gZmFsc2U7CiAJCWludCBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgV29ydGggb2YgRnV6emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jYCBhbmQgdGhlIHRhc2sgaXMgdG8gZGVjaWRlIGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBzdGFuZGFyZCwgaWYgc29tZXdoYXQgaW52b2x2ZWQsIGtlcm5lbCBtYWludGFpbmVyIFFBIHRhc2suIE15IGZvY3VzIGlzIG9uIGFtZDY0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlzayBhbmQgdGhlIHJldHVybi4gVGhlIHByaW1hcnkgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5OiBjYW4gSSBhY3R1YWxseSAqZ2V0KiB0byB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYG12cHAyYCBpcyBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdrLzhrIG5ldHdvcmsgaGFyZHdhcmUg4oCTIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGF0JiMzOTtzIGEgaGFyZCByZXF1aXJlbWVudCBvciBpZiBpdCYjMzk7cyBhdCBhbGwgcG9zc2libGUgdG8gZ2V0IHRoaXMgY29kZSB0byBydW4gb24gYSBzdGFuZGFyZCBhbWQ2NCBtYWNoaW5lLCBvciBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIEtjb25maWcgdG8gZmlndXJlIHRoYXQgb3V0LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBkZXRlcm1pbmU6CjEuICAqKlJlYWNoYWJpbGl0eSoqOiBDYW4gdGhlIGNvZGUgYmUgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSk/IElzIGl0IGhhcmR3YXJlLXNwZWNpZmljPyBEb2VzIGl0IHJ1biBvbiBhbWQ2NCBvciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIC8gU29DPwoyLiAgKipXb3J0aEZ1enppbmcqKjogQXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgbmV3IGJ1Z3MgYW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgYnVncy4KMy4gICoqRm9jdXNTeW1ib2xzKio6IElkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSB2dWxuZXJhYmxlLgo0LiAgKipFbmFibGVDb25maWdzKio6IERldGVybWluZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5hYmxlIHRoZSBkcml2ZXIgYW5kIGFueSByZWxhdGVkIGZlYXR1cmVzLgo1LiAgKipSZWFzb25pbmcqKjogQXJ0aWN1bGF0ZSB0aGUgYmFzaXMgZm9yIHRoZXNlIHBvaW50cy4KCkkmIzM5O2xsIHVzZSBncmVwcGVyIG9yIGp1c3QgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGRlcGVuZGVuY2llcywgYW5kIGV4ZWN1dGlvbiBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGxpa2VseSBleGVjdXRpb24gZmxvdyBvZiB0aGUgY29kZSB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGZ1enogaXQsIGFuZCBpZiBpdCYjMzk7cyBldmVuIGZlYXNpYmxlIHRvIGJlZ2luIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1WUFAyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTc1PWNvbmZpZyBNVk5FVEFfQk1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6ODY6Y29uZmlnIE1WUFAyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODctXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5Njpjb25maWcgTVZQUDJfUFRQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTctXHRib29sIFwmIzM0O01hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBNYXJ2ZWxsIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGFyb3VuZCBsaW5lIDg2LiBUaGlzIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgTWFydmVsbCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHZhcmlvdXMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcyB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBNYXJ2ZWxsIGNoaXBzZXRzLCBmZWF0dXJlIGZsYWdzIChsaWtlIFZMQU4gc3VwcG9ydCwganVtYm8gZnJhbWVzLCBjaGVja3N1bSBvZmZsb2FkKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgYm9hcmQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gZWFjaCBvdGhlciwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbGV4aWJpbGl0eSBvZiB0aGUgZHJpdmVyIGFuZCBob3cgdG8gYmVzdCB0YWlsb3IgaXQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG9yIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBzY2VuYXJpby4gTGV0JiMzOTtzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdHNlbGVjdCBIV0JNXG4gIDgxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgTVZORVRBX0JNIG11c3Qgbm90IGJlICYjMzk7bSYjMzk7IGlmIE1WTkVUQT15LCBzbyB0aGlzIHN5bWJvbCBlbnN1cmVzXG4gIDg0Olx0XHQgIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxuICA4NTpcdFxuICA4NjpcdGNvbmZpZyBNVlBQMlxuICA4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIG5ldHdvcmsgaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAgODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1RcbiAgODk6XHRcdHNlbGVjdCBNVk1ESU9cbiAgOTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDkxOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDkyOlx0XHRoZWxwXG4gIDkzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0cyBpbiB0aGVcbiAgOTQ6XHRcdCAgTWFydmVsbCBBUk1BREEgMzc1LCA3SyBhbmQgOEsgU29Dcy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgTVZQUDJfUFRQXG4gIDk3Olx0XHRib29sIFwmIzM0O01hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiAoUFRQXzE1ODhfQ0xPQ0sgPSB5IFx1MDAyNlx1MDAyNiBNVlBQMiA9IHkpIHx8IFxcXG4gIDk5Olx0XHRcdCAgIChQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgTVZQUDIgPSBtKVxuIDEwMDpcdFxuIDEwMTpcdGNvbmZpZyBQWEExNjhfRVRIXG4gMTAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIHB4YTE2OCBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTAzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuIDEwNDpcdFx0ZGVwZW5kcyBvbiBDUFVfUFhBMTY4IHx8IEFSQ0hfQkVSTElOIHx8IENPTVBJTEVfVEVTVFxuIDEwNTpcdFx0c2VsZWN0IFBIWUxJQlxuIDEwNjpcdFx0aGVscFxuIDEwNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcHhhMTY4IEV0aGVybmV0IHBvcnRzLlxuIDEwODpcdFxuIDEwOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMTEwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHB4YTE2OF9ldGguXG4gMTExOlx0XG4gMTEyOlx0Y29uZmlnIFNLR0VcbiAxMTM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgWXVrb24gR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuIDExNTpcdFx0c2VsZWN0IENSQzMyXG4gMTE2Olx0XHRoZWxwXG4gMTE3Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnQgdGhlIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4L1NLLTk1eHhcbiAxMTg6XHRcdCAgYW5kIHJlbGF0ZWQgR2lnYWJpdCBFdGhlcm5ldCBhZGFwdGVycy4gSXQgaXMgYSBuZXcgc21hbGxlciBkcml2ZXJcbiAxMTk6XHRcdCAgd2l0aCBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIG1vcmUgY29tcGxldGUgZXRodG9vbCBzdXBwb3J0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY29uZmlnIE1WUFAyYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBjb25maWcgTVZQUDJgIGVudHJ5LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHRoaXMgZHJpdmVyLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVuaXRzIG9uIE1hcnZlbGwgQVJNQURBIFNvQ3MsIGRlcGVuZHMgb24gZWl0aGVyIGBBUkNIX01WRUJVYCBvciBgQ09NUElMRV9URVNUYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQVJDSF9NVkVCVWAgZGVwZW5kZW5jeS4gSSBrbm93IHRoYXQmIzM5O3MgZXNzZW50aWFsbHkgYSBmbGFnIGZvciBBUk0gb3IgQVJNNjQgTWFydmVsbCBFbWJlZGRlZCBCdWlsdCBVbml0IFNvQ3MsIGxpa2UgdGhlIEFybWFkYSBzZXJpZXMuCgpIb3dldmVyLCBJJiMzOTttIHdvcmtpbmcgb24gYW4gYGFtZDY0YCBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgcmFpc2VzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZHJpdmVyIGlzIHJlbGV2YW50IGluIG15IGVudmlyb25tZW50IGF0IGFsbC4gRXZlbiBpZiB0aGlzIHdlcmUgYW4gQVJNIGJ1aWxkLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciAoZGlyZWN0bHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0pIG9yIGEgUENJIGRyaXZlci4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgeDg2XzY0LCBzbyBpdCBpc24mIzM5O3QgcmVsZXZhbnQgdG8gbXkgd29yay4KClRvIGNvbmZpcm0gaXRzIHB1cnBvc2UsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG12cHAyX21haW4uY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBwcm9iZSBmdW5jdGlvbiBvciBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIHRvIGRldGVybWluZSBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0byBzZWUgaWYgSSBuZWVkIHRvIGFkanVzdCBvciByZW1vdmUgaXRzIGRlcGVuZGVuY2llcyBmb3IgbXkgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxtb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyBpbiBgbXZwcDJgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYG12cHAyYCBjb2RlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIG1vZGVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgYHBsYXRmb3JtX2RyaXZlcmAgaW1wbGVtZW50YXRpb24sIG9yIGEgYHBjaV9kcml2ZXJgIG9uZT8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgaXMgZW51bWVyYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5LCBob3cgZGF0YSBpcyBwYXNzZWQuIFRoZSBgcGxhdGZvcm1fZHJpdmVyYCBhcHByb2FjaCBzdWdnZXN0cyBhIG1vcmUgc3RhdGljLCBzeXN0ZW0tc3BlY2lmaWMgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbGlrZWx5IGZvciBkZXZpY2VzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXRzZWxmLiBDb252ZXJzZWx5LCB0aGUgYHBjaV9kcml2ZXJgIGluZGljYXRlcyBhIFBDSS1iYXNlZCBkZXZpY2UsIGdpdmluZyBtZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgYnVzIGVudW1lcmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIHRocm91Z2ggUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIFRoZSBjaG9pY2UgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IEkmIzM5O2xsIGFwcHJvYWNoIGRlYnVnZ2luZywgZXh0ZW5kaW5nIGZ1bmN0aW9uYWxpdHksIG9yIGV2ZW4gcG9ydGluZyB0aGUgZHJpdmVyIHRvIGEgZGlmZmVyZW50IGVudmlyb25tZW50LiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBkcml2ZXIgbW9kZWxzIHdpbGwgaGVscCBtZSBmaW5kIHRoZSBmaWxlcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtfZHJpdmVyID0geyYjMzk7OiBVbm1hdGNoZWQgXHs8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2RyaXZlciA9IHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O19kcml2ZXIgPSB7JiMzOTs6IFVubWF0Y2hlZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIHByZXNlbnRlZCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKiogYW5kIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqQnJlYWtpbmcgRnJlZSBmcm9tIHRoZSBCcmFja2V0cyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGlzIGB7YCBzeW1ib2wuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdG8gY2h1cm4uIEl0JiMzOTtzIGEgYnJhY2tldCwgYSBkZWxpbWl0ZXIuIEl0ICpzdWdnZXN0cyogYSBkYXRhIHN0cnVjdHVyZSwgYSBjb2RlIGJsb2NrLCBhIG1hdGhlbWF0aWNhbCBzZXQsIGEgY29uZmlndXJhdGlvbiBmaWxl4oCmIEl0JiMzOTtzIGdvdCBiYWdnYWdlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvICplc2NhcGUqIGl0LCB0byBicmVhayBmcmVlIGZyb20gdGhlIGltcGxpZWQgY29uc3RyYWludCBvciBzdHJ1Y3R1cmUuIEkgc3RhcnQgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBjb250ZXh0LCBhIGRhdGEgYW5hbHlzaXMgcHJvYmxlbSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgYW0gSSB0cnlpbmcgdG8gKmRvKiB3aXRoIHRoZSBpbmZvcm1hdGlvbj8gVGhpcyBicmFja2V0LCBvbiBpdHMgb3duLCBpcyBqdXN0IG5vaXNlLiBJdCYjMzk7cyB0aGUgKm1lYW5pbmcqIEkmIzM5O20gc2Vla2luZyB0byBkZXJpdmUgdGhhdCByZWFsbHkgbWF0dGVycy4gVGhlIGdvYWwgaXMgdG8gbW92ZSBiZXlvbmQgdGhlIGxpdGVyYWwgY2hhcmFjdGVycyB0byB0aGUgdW5kZXJseWluZyBpbnRlbnQsIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgKnBvdGVudGlhbCogZm9yIGFwcGxpY2F0aW9uLiBUaGlzIGJyYWNrZXQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QgdGhlIGRlc3RpbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlbGVtZW50IGlzIGhlcmUgYW5kIHdoYXQgSSBzaG91bGQgZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19kcml2ZXIgPSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz03ODkxPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbXZwcDJfYWNwaV9tYXRjaCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzg5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjc4OTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZwcDJfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzg5NS1cdC5wcm9iZSA9IG12cHAyX3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNVlBQMiBEcml2ZXImIzM5O3MgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtdnBwMl9kcml2ZXJgIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMsIHNwZWNpZmljYWxseSBNYXJ2ZWxsIEFybWFkYSAzNzUsIDdLLCBhbmQgOEsgU29Dcywgd2hpY2ggYXJlIEFSTS1iYXNlZC4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoaXMgZHJpdmVyIGlzIG1lYW50IHRvIGZ1bmN0aW9uLCBpZiBhdCBhbGwsIG9uIGFuIGFtZDY0IHN5c3RlbS4KClRoZSBjb2RlIG1lbnRpb25zICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgU21hcnROSUNzLiBJdCBlbXBoYXNpemVzIGRldmljZXMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiB0aGlzIGRyaXZlciBpcyBsaWtlbHkgbmV2ZXIgaW50ZW5kZWQgdG8gKmZ1bGx5KiBmdW5jdGlvbiBvbiBhbiBhbWQ2NCBlbnZpcm9ubWVudC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGBNVlBQMmAgaXMgKnNwZWNpZmljYWxseSogZm9yIHRob3NlIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkZXZpY2VzLCB3aGljaCBhcmVuJiMzOTt0IGdvaW5nIHRvIGV4aXN0IGluIGEgdHlwaWNhbCBhbWQ2NCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgZGVwZW5kZW50IG9uIGVpdGhlciBgQVJDSF9NVkVCVWAgb3IgYENPTVBJTEVfVEVTVGAuIE9uIGFtZDY0LCBpdCAqb25seSogY29tcGlsZXMgdW5kZXIgYENPTVBJTEVfVEVTVGAsIGFuZCB0aGF0IG1lYW5zIHRoZXJlJiMzOTtzIG5vIHJlYWwgaGFyZHdhcmUgZm9yIGl0IHRvIHByb2JlLCBpbml0aWFsaXplLCBvciByZWFjaCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluOiBgbXZwcDJfY2hhbmdlX210dSgpYC4gVGhlcmVmb3JlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIHRoaXMgY3Vyc29yeSByZXZpZXcsIHRoZSBtb2RpZmllZCBjb2RlIGNvbnRhaW5pbmcgdGhhdCBmdW5jdGlvbiBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIGEgbm9ybWFsIGFtZDY0IGNvbnRleHQuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGJhY2tkb29yIHdheSB0byBnZXQgdG8gdGhhdCBgbXZwcDJfY2hhbmdlX210dSgpYCBjYWxsLiBJIGtub3cgaXTigJlzIHRoZSBgbmRvX2NoYW5nZV9tdHVgIGNhbGxiYWNrIGZvciB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBvZiB0aGUgYG12cHAyYCBuZXRkZXYuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBhbiBgbXZwcDJgIG5ldGRldiBiZSBjcmVhdGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBoYXJkd2FyZT8gSSBuZWVkIHRvIGxvb2sgaW50byBgbXZwcDJfcHJvYmVgIHRvIHNlZSBob3cgdGhhdCBuZXRkZXYgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBJZiB0aGUgcHJvYmUgZmFpbHMgd2l0aG91dCBoYXJkd2FyZSwgdGhlbiB0aGVyZSBpcyBubyB3YXkgdG8gcmVhY2ggdGhlIE1UVSBjaGFuZ2UgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2MDA6XHRcdGlmIChJU19FUlIoYmFzZSkpXG43NjAxOlx0XHRcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xuNzYwMjpcdFxuNzYwMzpcdFx0aWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiA9PSBNVlBQMjEpIHtcbjc2MDQ6XHRcdFx0cHJpdi1cdTAwM2VsbXNfYmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAxKTtcbjc2MDU6XHRcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWxtc19iYXNlKSlcbjc2MDY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWxtc19iYXNlKTtcbjc2MDc6XHRcdH0gZWxzZSB7XG43NjA4Olx0XHRcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7XG43NjA5Olx0XHRcdGlmICghcmVzKSB7XG43NjEwOlx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCByZXNvdXJjZVxcblwmIzM0Oyk7XG43NjExOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43NjEyOlx0XHRcdH1cbjc2MTM6XHRcdFx0aWYgKGhhc19hY3BpX2NvbXBhbmlvbihcdTAwMjZwZGV2LVx1MDAzZWRldikpIHtcbjc2MTQ6XHRcdFx0XHQvKiBJbiBjYXNlIHRoZSBNRElPIG1lbW9yeSByZWdpb24gaXMgZGVjbGFyZWQgaW5cbjc2MTU6XHRcdFx0XHQgKiB0aGUgQUNQSSwgaXQgY2FuIGFscmVhZHkgYXBwZWFyIGFzICYjMzk7aW4tdXNlJiMzOTtcbjc2MTY6XHRcdFx0XHQgKiBpbiB0aGUgT1MuIEJlY2F1c2UgaXQgaXMgb3ZlcmxhcHBlZCBieSBzZWNvbmRcbjc2MTc6XHRcdFx0XHQgKiByZWdpb24gb2YgdGhlIG5ldHdvcmsgY29udHJvbGxlciwgbWFrZVxuNzYxODpcdFx0XHRcdCAqIHN1cmUgaXQgaXMgcmVsZWFzZWQsIGJlZm9yZSByZXF1ZXN0aW5nIGl0IGFnYWluLlxuNzYxOTpcdFx0XHRcdCAqIFRoZSBjYXJlIGlzIHRha2VuIGJ5IG12cHAyIGRyaXZlciB0byBhdm9pZFxuNzYyMDpcdFx0XHRcdCAqIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoaXMgbWVtb3J5IHJlZ2lvbi5cbjc2MjE6XHRcdFx0XHQgKi9cbjc2MjI6XHRcdFx0XHRyZWxlYXNlX3Jlc291cmNlKHJlcyk7XG43NjIzOlx0XHRcdH1cbjc2MjQ6XHRcdFx0cHJpdi1cdTAwM2VpZmFjZV9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCByZXMpO1xuNzYyNTpcdFx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlaWZhY2VfYmFzZSkpXG43NjI2Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VpZmFjZV9iYXNlKTtcbjc2Mjc6XHRcbjc2Mjg6XHRcdFx0LyogTWFwIENNMyBTUkFNICovXG43NjI5Olx0XHRcdGVyciA9IG12cHAyX2dldF9zcmFtKHBkZXYsIHByaXYpO1xuNzYzMDpcdFx0XHRpZiAoZXJyKVxuNzYzMTpcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsIHRvIGFsbG9jIENNMyBTUkFNXFxuXCYjMzQ7KTtcbjc2MzI6XHRcbjc2MzM6XHRcdFx0LyogRW5hYmxlIGdsb2JhbCBGbG93IENvbnRyb2wgb25seSBpZiBoYW5kbGVyIHRvIFNSQU0gbm90IE5VTEwgKi9cbjc2MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNlY20zX2Jhc2UpXG43NjM1Olx0XHRcdFx0cHJpdi1cdTAwM2VnbG9iYWxfdHhfZmMgPSB0cnVlO1xuNzYzNjpcdFx0fVxuNzYzNzpcdFxuNzYzODpcdFx0aWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjYgZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG43NjM5Olx0XHRcdHByaXYtXHUwMDNlc3lzY3RybF9iYXNlID1cbjc2NDA6XHRcdFx0XHRzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsXG43NjQxOlx0XHRcdFx0XHRcdFx0XHRcJiMzNDttYXJ2ZWxsLHN5c3RlbS1jb250cm9sbGVyXCYjMzQ7KTtcbjc2NDI6XHRcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXN5c2N0cmxfYmFzZSkpXG43NjQzOlx0XHRcdFx0LyogVGhlIHN5c3RlbSBjb250cm9sbGVyIHJlZ21hcCBpcyBvcHRpb25hbCBmb3IgZHRcbjc2NDQ6XHRcdFx0XHQgKiBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFdoZW4gbm90IHByb3ZpZGVkLCB0aGVcbjc2NDU6XHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIG9mIHRoZSBHb1AgcmVsaWVzIG9uIHRoZVxuNzY0NjpcdFx0XHRcdCAqIGZpcm13YXJlL2Jvb3Rsb2FkZXIuXG43NjQ3Olx0XHRcdFx0ICovXG43NjQ4Olx0XHRcdFx0cHJpdi1cdTAwM2VzeXNjdHJsX2Jhc2UgPSBOVUxMO1xuNzY0OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIEFybWFkYSBOZXR3b3JrIERyaXZlciYjMzk7cyBGdXp6YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGZpbmlzaGVkIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE1hcnZlbGwgQXJtYWRhIG5ldHdvcmsgZHJpdmVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbm8sIHRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6IHVzaW5nIHRoZSBzdGFuZGFyZCBgc3l6a2FsbGVyYCBzZXR1cC4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgTWFydmVsbCBBcm1hZGEgaGFyZHdhcmUg4oCTIGl0IG1hcHMgTWVtb3J5LU1hcHBlZCBJL08gcmVzb3VyY2VzIGFuZCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB0aGUgTURJTywgR29QLCBDTTMgU1JBTSwgYW5kIHRoZSBCb290IE1hbmFnZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgaGVyZS4KClRoZSBrZXkgaXNzdWUgaXMgdGhhdCB0aGlzIGRyaXZlciwgd2hpY2ggaW1wbGVtZW50cyB0aGUgYENPTkZJR19NVlBQMmAgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRob3NlIE1hcnZlbGwgU29DcywgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgeDg2L2FtZDY0IHZpcnR1YWwgbWFjaGluZXMgd2UgdHlwaWNhbGx5IHVzZSBmb3IgZnV6emluZywgbGlrZSBRRU1VIG9yIHRob3NlIG9uIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gVGhlc2Ugc3RhbmRhcmQgVk1zIGp1c3QgZG9uJiMzOTt0IG9mZmVyIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgY29udGV4dCBvciBwcm92aWRlIGEgcGxhdXNpYmxlIGVtdWxhdGlvbiBvZiB0aG9zZSBNYXJ2ZWxsIGNvbXBvbmVudHMuIEl0JiMzOTtzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMuCgpUaGVyZWZvcmUsIGFmdGVyIGFuYWx5emluZyB0aGlzLCBJJiMzOTttIG1hcmtpbmcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBteSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBlbXB0eSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIHJlbWFpbiBlbXB0eSBhcyB3ZWxsLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjb2RlJiMzOTtzIGRlcGVuZGVuY2Ugb24gdGhpcyBzcGVjaWZpYyBBUk0vQVJNNjQgU29DIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIHRoZSBtb3JlIGNvbW1vbiBBTUQ2NCBmdXp6aW5nIGVudmlyb25tZW50cy4gV2UmIzM5O2QgbmVlZCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnksIHZlcnkgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHByb3ByaWV0YXJ5LCBlbXVsYXRvciB0byBldmVuIGJlZ2luIHRvIG1ha2UgcHJvZ3Jlc3MsIGFuZCBldmVuIHRoZW4sIHdlJiMzOTtyZSBsaWtlbHkgbG9va2luZyBhdCBhIGRpZmZlcmVudCBzZXQgb2YgY2hhbGxlbmdlcy4KCkkmIzM5O2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTAuNjI5MTYyMDI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDI0NzI0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI3OjUwLjYyOTE2NjU3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODUyODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mjc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xcbmluZGV4IGNjYzI0YTEzMDFmMjIuLjg0OGVlNjU1YzZlYTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xcbkBAIC01MDg2LDcgKzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcXG4gXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwibXR1ICVkIHRvbyBoaWdoLCBzd2l0Y2hpbmcgdG8gc2hhcmVkIGJ1ZmZlcnNcXFwiLCBtdHUpO1xcbiBcXHRcXHRcXHRtdnBwMl9ibV9zd2l0Y2hfYnVmZmVycyhwcml2LCBmYWxzZSk7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4rXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2Vod192ZXJzaW9uIFxcdTAwM2U9IE1WUFAyMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBtdnBwMl9nZXRfbnJ4cXMocHJpdikgKiAyIFxcdTAwM2M9IE1WUFAyX0JNX01BWF9QT09MUykge1xcbiBcXHRcXHRib29sIGp1bWJvID0gZmFsc2U7XFxuIFxcdFxcdGludCBpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTIuMTQ4NTcwMDAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDQ5MDUyOTQ0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoyNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcbmluZGV4IGNjYzI0YTEzMDFmMjIuLjg0OGVlNjU1YzZlYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcbkBAIC01MDg2LDcgKzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcbiBcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwibXR1ICVkIHRvbyBoaWdoLCBzd2l0Y2hpbmcgdG8gc2hhcmVkIGJ1ZmZlcnNcIiwgbXR1KTtcbiBcdFx0XHRtdnBwMl9ibV9zd2l0Y2hfYnVmZmVycyhwcml2LCBmYWxzZSk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4rXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgbXZwcDJfZ2V0X25yeHFzKHByaXYpICogMiBcdTAwM2M9IE1WUFAyX0JNX01BWF9QT09MUykge1xuIFx0XHRib29sIGp1bWJvID0gZmFsc2U7XG4gXHRcdGludCBpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTIuMTQ4NTcyMDcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1ODEwMzM2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgV29ydGggb2YgRnV6emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgTGludXgga2VybmVsIHBhdGNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY2AgYW5kIHRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBzdGFuZGFyZCwgaWYgc29tZXdoYXQgaW52b2x2ZWQsIGtlcm5lbCBtYWludGFpbmVyIFFBIHRhc2suIE15IGZvY3VzIGlzIG9uIGFtZDY0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByaXNrIGFuZCB0aGUgcmV0dXJuLiBUaGUgcHJpbWFyeSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHk6IGNhbiBJIGFjdHVhbGx5ICpnZXQqIHRvIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBgbXZwcDJgIGlzIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN2svOGsgbmV0d29yayBoYXJkd2FyZSDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoYXQncyBhIGhhcmQgcmVxdWlyZW1lbnQgb3IgaWYgaXQncyBhdCBhbGwgcG9zc2libGUgdG8gZ2V0IHRoaXMgY29kZSB0byBydW4gb24gYSBzdGFuZGFyZCBhbWQ2NCBtYWNoaW5lLCBvciBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgS2NvbmZpZyB0byBmaWd1cmUgdGhhdCBvdXQuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lOlxuMS4gICoqUmVhY2hhYmlsaXR5Kio6IENhbiB0aGUgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VKT8gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWM/IERvZXMgaXQgcnVuIG9uIGFtZDY0IG9yIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgLyBTb0M/XG4yLiAgKipXb3J0aEZ1enppbmcqKjogQXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgbmV3IGJ1Z3MgYW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgYnVncy5cbjMuICAqKkZvY3VzU3ltYm9scyoqOiBJZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgdnVsbmVyYWJsZS5cbjQuICAqKkVuYWJsZUNvbmZpZ3MqKjogRGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhlIGRyaXZlciBhbmQgYW55IHJlbGF0ZWQgZmVhdHVyZXMuXG41LiAgKipSZWFzb25pbmcqKjogQXJ0aWN1bGF0ZSB0aGUgYmFzaXMgZm9yIHRoZXNlIHBvaW50cy5cblxuSSdsbCB1c2UgZ3JlcHBlciBvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBkZXBlbmRlbmNpZXMsIGFuZCBleGVjdXRpb24gcGF0aHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBsaWtlbHkgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IGl0LCBhbmQgaWYgaXQncyBldmVuIGZlYXNpYmxlIHRvIGJlZ2luIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyODoxNS43Mjk2MTI0OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MjcyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVlBQMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NzU9Y29uZmlnIE1WTkVUQV9CTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo4Njpjb25maWcgTVZQUDJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODctXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5Njpjb25maWcgTVZQUDJfUFRQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTk3LVxcdGJvb2wgXFxcIk1hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjg6MTYuNTU1ODkwMzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1MjI2NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBNYXJ2ZWxsIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBhcm91bmQgbGluZSA4Ni4gVGhpcyBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIE1hcnZlbGwgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB2YXJpb3VzIGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMgdGhlcmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBNYXJ2ZWxsIGNoaXBzZXRzLCBmZWF0dXJlIGZsYWdzIChsaWtlIFZMQU4gc3VwcG9ydCwganVtYm8gZnJhbWVzLCBjaGVja3N1bSBvZmZsb2FkKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgYm9hcmQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBob3cgdGhleSdyZSByZWxhdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRyaXZlciBhbmQgaG93IHRvIGJlc3QgdGFpbG9yIGl0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gc2NlbmFyaW8uIExldCdzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjE4LjkwODE1NjkyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRzZWxlY3QgSFdCTVxcbiAgODE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIE1WTkVUQV9CTSBtdXN0IG5vdCBiZSAnbScgaWYgTVZORVRBPXksIHNvIHRoaXMgc3ltYm9sIGVuc3VyZXNcXG4gIDg0OlxcdFxcdCAgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXFxuICA4NTpcXHRcXG4gIDg2OlxcdGNvbmZpZyBNVlBQMlxcbiAgODc6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVFxcbiAgODk6XFx0XFx0c2VsZWN0IE1WTURJT1xcbiAgOTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDkxOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDkyOlxcdFxcdGhlbHBcXG4gIDkzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVuaXRzIGluIHRoZVxcbiAgOTQ6XFx0XFx0ICBNYXJ2ZWxsIEFSTUFEQSAzNzUsIDdLIGFuZCA4SyBTb0NzLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgTVZQUDJfUFRQXFxuICA5NzpcXHRcXHRib29sIFxcXCJNYXJ2ZWxsIEFybWFkYSA4SyBFbmFibGUgUFRQIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIChQVFBfMTU4OF9DTE9DSyA9IHkgXFx1MDAyNlxcdTAwMjYgTVZQUDIgPSB5KSB8fCBcXFxcXFxuICA5OTpcXHRcXHRcXHQgICAoUFRQXzE1ODhfQ0xPQ0sgXFx1MDAyNlxcdTAwMjYgTVZQUDIgPSBtKVxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgUFhBMTY4X0VUSFxcbiAxMDI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgcHhhMTY4IGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDEwMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAxMDQ6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfUFhBMTY4IHx8IEFSQ0hfQkVSTElOIHx8IENPTVBJTEVfVEVTVFxcbiAxMDU6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAxMDY6XFx0XFx0aGVscFxcbiAxMDc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcHhhMTY4IEV0aGVybmV0IHBvcnRzLlxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMTEwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHhhMTY4X2V0aC5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIFNLR0VcXG4gMTEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFl1a29uIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTE0OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDExNTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTE2OlxcdFxcdGhlbHBcXG4gMTE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydCB0aGUgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHgvU0stOTV4eFxcbiAxMTg6XFx0XFx0ICBhbmQgcmVsYXRlZCBHaWdhYml0IEV0aGVybmV0IGFkYXB0ZXJzLiBJdCBpcyBhIG5ldyBzbWFsbGVyIGRyaXZlclxcbiAxMTk6XFx0XFx0ICB3aXRoIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgbW9yZSBjb21wbGV0ZSBldGh0b29sIHN1cHBvcnQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjE4LjkwODIyOTQyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MjIyMDAxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNvbmZpZyBNVlBQMmAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoZSBgY29uZmlnIE1WUFAyYCBlbnRyeS4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIGRyaXZlciwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0cyBvbiBNYXJ2ZWxsIEFSTUFEQSBTb0NzLCBkZXBlbmRzIG9uIGVpdGhlciBgQVJDSF9NVkVCVWAgb3IgYENPTVBJTEVfVEVTVGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEFSQ0hfTVZFQlVgIGRlcGVuZGVuY3kuIEkga25vdyB0aGF0J3MgZXNzZW50aWFsbHkgYSBmbGFnIGZvciBBUk0gb3IgQVJNNjQgTWFydmVsbCBFbWJlZGRlZCBCdWlsdCBVbml0IFNvQ3MsIGxpa2UgdGhlIEFybWFkYSBzZXJpZXMuXG5cbkhvd2V2ZXIsIEknbSB3b3JraW5nIG9uIGFuIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLCBzbyB0aGlzIHJhaXNlcyBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyByZWxldmFudCBpbiBteSBlbnZpcm9ubWVudCBhdCBhbGwuIEV2ZW4gaWYgdGhpcyB3ZXJlIGFuIEFSTSBidWlsZCwgSSdkIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIChkaXJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSkgb3IgYSBQQ0kgZHJpdmVyLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyB4ODZfNjQsIHNvIGl0IGlzbid0IHJlbGV2YW50IHRvIG15IHdvcmsuXG5cblRvIGNvbmZpcm0gaXRzIHB1cnBvc2UsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbXZwcDJfbWFpbi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgcHJvYmUgZnVuY3Rpb24gb3IgZHJpdmVyIHJlZ2lzdHJhdGlvbiByb3V0aW5lcyB0byBkZXRlcm1pbmUgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdG8gc2VlIGlmIEkgbmVlZCB0byBhZGp1c3Qgb3IgcmVtb3ZlIGl0cyBkZXBlbmRlbmNpZXMgZm9yIG15IHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjM1LjEzMDIzNDIzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNjkzNDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjM1LjIzODMxMjA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5NTU3MjA5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyBpbiBgbXZwcDJgKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gdGhlIGBtdnBwMmAgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdHMgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciBtb2RlbC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGBwbGF0Zm9ybV9kcml2ZXJgIGltcGxlbWVudGF0aW9uLCBvciBhIGBwY2lfZHJpdmVyYCBvbmU/IEtub3dpbmcgdGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIGluaXRpYWxpemVkLCBhbmQgdWx0aW1hdGVseSwgaG93IGRhdGEgaXMgcGFzc2VkLiBUaGUgYHBsYXRmb3JtX2RyaXZlcmAgYXBwcm9hY2ggc3VnZ2VzdHMgYSBtb3JlIHN0YXRpYywgc3lzdGVtLXNwZWNpZmljIGRldmljZSByZWdpc3RyYXRpb24sIGxpa2VseSBmb3IgZGV2aWNlcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlIHBsYXRmb3JtIGl0c2VsZi4gQ29udmVyc2VseSwgdGhlIGBwY2lfZHJpdmVyYCBpbmRpY2F0ZXMgYSBQQ0ktYmFzZWQgZGV2aWNlLCBnaXZpbmcgbWUgaW1tZWRpYXRlIGNsdWVzIGFib3V0IGJ1cyBlbnVtZXJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiB0aHJvdWdoIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBUaGUgY2hvaWNlIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGFwcHJvYWNoIGRlYnVnZ2luZywgZXh0ZW5kaW5nIGZ1bmN0aW9uYWxpdHksIG9yIGV2ZW4gcG9ydGluZyB0aGUgZHJpdmVyIHRvIGEgZGlmZmVyZW50IGVudmlyb25tZW50LiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBkcml2ZXIgbW9kZWxzIHdpbGwgaGVscCBtZSBmaW5kIHRoZSBmaWxlcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjg6NDAuMTk0MDM1MDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg4Mzg2NSwiRXJyb3IiOiJiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJ19kcml2ZXIgPSB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9kcml2ZXIgPSB7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYmFkIGV4cHJlc3Npb246IGZhdGFsOiAtZSBvcHRpb24sICdfZHJpdmVyID0geyc6IFVubWF0Y2hlZCBcXFxce1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyODo0MC4yMjI5MjUyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjM3NDk2NTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIHByZXNlbnRlZCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKiogYW5kIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCcmVha2luZyBGcmVlIGZyb20gdGhlIEJyYWNrZXRzKipcblxuQWxyaWdodCwgc28gSSBzZWUgdGhpcyBge2Agc3ltYm9sLiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIGNodXJuLiBJdCdzIGEgYnJhY2tldCwgYSBkZWxpbWl0ZXIuIEl0ICpzdWdnZXN0cyogYSBkYXRhIHN0cnVjdHVyZSwgYSBjb2RlIGJsb2NrLCBhIG1hdGhlbWF0aWNhbCBzZXQsIGEgY29uZmlndXJhdGlvbiBmaWxl4oCmIEl0J3MgZ290IGJhZ2dhZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gKmVzY2FwZSogaXQsIHRvIGJyZWFrIGZyZWUgZnJvbSB0aGUgaW1wbGllZCBjb25zdHJhaW50IG9yIHN0cnVjdHVyZS4gSSBzdGFydCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSXMgdGhpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnRleHQsIGEgZGF0YSBhbmFseXNpcyBwcm9ibGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhbSBJIHRyeWluZyB0byAqZG8qIHdpdGggdGhlIGluZm9ybWF0aW9uPyBUaGlzIGJyYWNrZXQsIG9uIGl0cyBvd24sIGlzIGp1c3Qgbm9pc2UuIEl0J3MgdGhlICptZWFuaW5nKiBJJ20gc2Vla2luZyB0byBkZXJpdmUgdGhhdCByZWFsbHkgbWF0dGVycy4gVGhlIGdvYWwgaXMgdG8gbW92ZSBiZXlvbmQgdGhlIGxpdGVyYWwgY2hhcmFjdGVycyB0byB0aGUgdW5kZXJseWluZyBpbnRlbnQsIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgKnBvdGVudGlhbCogZm9yIGFwcGxpY2F0aW9uLiBUaGlzIGJyYWNrZXQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QgdGhlIGRlc3RpbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlbGVtZW50IGlzIGhlcmUgYW5kIHdoYXQgSSBzaG91bGQgZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjQ2LjU5Nzg5NDY0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NDg0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9kcml2ZXIgPSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz03ODkxPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbXZwcDJfYWNwaV9tYXRjaCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03ODkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjc4OTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZwcDJfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTc4OTUtXFx0LnByb2JlID0gbXZwcDJfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjQ3LjE5NzM4NjQyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDgxOTQyMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTVZQUDIgRHJpdmVyJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXZwcDJfZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgc3BlY2lmaWNhbGx5IE1hcnZlbGwgQXJtYWRhIDM3NSwgN0ssIGFuZCA4SyBTb0NzLCB3aGljaCBhcmUgQVJNLWJhc2VkLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogdGhpcyBkcml2ZXIgaXMgbWVhbnQgdG8gZnVuY3Rpb24sIGlmIGF0IGFsbCwgb24gYW4gYW1kNjQgc3lzdGVtLlxuXG5UaGUgY29kZSBtZW50aW9ucyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIFNtYXJ0TklDcy4gSXQgZW1waGFzaXplcyBkZXZpY2VzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjb25maXJtZWQ6IHRoaXMgZHJpdmVyIGlzIGxpa2VseSBuZXZlciBpbnRlbmRlZCB0byAqZnVsbHkqIGZ1bmN0aW9uIG9uIGFuIGFtZDY0IGVudmlyb25tZW50LlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgTVZQUDJgIGlzICpzcGVjaWZpY2FsbHkqIGZvciB0aG9zZSBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBTb0MgcGxhdGZvcm0gZGV2aWNlcywgd2hpY2ggYXJlbid0IGdvaW5nIHRvIGV4aXN0IGluIGEgdHlwaWNhbCBhbWQ2NCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQncyBkZXBlbmRlbnQgb24gZWl0aGVyIGBBUkNIX01WRUJVYCBvciBgQ09NUElMRV9URVNUYC4gT24gYW1kNjQsIGl0ICpvbmx5KiBjb21waWxlcyB1bmRlciBgQ09NUElMRV9URVNUYCwgYW5kIHRoYXQgbWVhbnMgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIGZvciBpdCB0byBwcm9iZSwgaW5pdGlhbGl6ZSwgb3IgcmVhY2ggdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluOiBgbXZwcDJfY2hhbmdlX210dSgpYC4gVGhlcmVmb3JlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIHRoaXMgY3Vyc29yeSByZXZpZXcsIHRoZSBtb2RpZmllZCBjb2RlIGNvbnRhaW5pbmcgdGhhdCBmdW5jdGlvbiBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIGEgbm9ybWFsIGFtZDY0IGNvbnRleHQuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBiYWNrZG9vciB3YXkgdG8gZ2V0IHRvIHRoYXQgYG12cHAyX2NoYW5nZV9tdHUoKWAgY2FsbC4gSSBrbm93IGl04oCZcyB0aGUgYG5kb19jaGFuZ2VfbXR1YCBjYWxsYmFjayBmb3IgdGhlIGBuZXRfZGV2aWNlX29wc2Agb2YgdGhlIGBtdnBwMmAgbmV0ZGV2LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gYW4gYG12cHAyYCBuZXRkZXYgYmUgY3JlYXRlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBTb0MgaGFyZHdhcmU/IEkgbmVlZCB0byBsb29rIGludG8gYG12cHAyX3Byb2JlYCB0byBzZWUgaG93IHRoYXQgbmV0ZGV2IGlzIGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gSWYgdGhlIHByb2JlIGZhaWxzIHdpdGhvdXQgaGFyZHdhcmUsIHRoZW4gdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoZSBNVFUgY2hhbmdlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTM4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI5OjIyLjAxNjgxNTE1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzYwMDpcXHRcXHRpZiAoSVNfRVJSKGJhc2UpKVxcbjc2MDE6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XFxuNzYwMjpcXHRcXG43NjAzOlxcdFxcdGlmIChwcml2LVxcdTAwM2Vod192ZXJzaW9uID09IE1WUFAyMSkge1xcbjc2MDQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbG1zX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XFxuNzYwNTpcXHRcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWxtc19iYXNlKSlcXG43NjA2OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZWxtc19iYXNlKTtcXG43NjA3OlxcdFxcdH0gZWxzZSB7XFxuNzYwODpcXHRcXHRcXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjc2MDk6XFx0XFx0XFx0aWYgKCFyZXMpIHtcXG43NjEwOlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgcmVzb3VyY2VcXFxcblxcXCIpO1xcbjc2MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzYxMjpcXHRcXHRcXHR9XFxuNzYxMzpcXHRcXHRcXHRpZiAoaGFzX2FjcGlfY29tcGFuaW9uKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpKSB7XFxuNzYxNDpcXHRcXHRcXHRcXHQvKiBJbiBjYXNlIHRoZSBNRElPIG1lbW9yeSByZWdpb24gaXMgZGVjbGFyZWQgaW5cXG43NjE1OlxcdFxcdFxcdFxcdCAqIHRoZSBBQ1BJLCBpdCBjYW4gYWxyZWFkeSBhcHBlYXIgYXMgJ2luLXVzZSdcXG43NjE2OlxcdFxcdFxcdFxcdCAqIGluIHRoZSBPUy4gQmVjYXVzZSBpdCBpcyBvdmVybGFwcGVkIGJ5IHNlY29uZFxcbjc2MTc6XFx0XFx0XFx0XFx0ICogcmVnaW9uIG9mIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIsIG1ha2VcXG43NjE4OlxcdFxcdFxcdFxcdCAqIHN1cmUgaXQgaXMgcmVsZWFzZWQsIGJlZm9yZSByZXF1ZXN0aW5nIGl0IGFnYWluLlxcbjc2MTk6XFx0XFx0XFx0XFx0ICogVGhlIGNhcmUgaXMgdGFrZW4gYnkgbXZwcDIgZHJpdmVyIHRvIGF2b2lkXFxuNzYyMDpcXHRcXHRcXHRcXHQgKiBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIG1lbW9yeSByZWdpb24uXFxuNzYyMTpcXHRcXHRcXHRcXHQgKi9cXG43NjIyOlxcdFxcdFxcdFxcdHJlbGVhc2VfcmVzb3VyY2UocmVzKTtcXG43NjIzOlxcdFxcdFxcdH1cXG43NjI0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWlmYWNlX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmVzKTtcXG43NjI1OlxcdFxcdFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlaWZhY2VfYmFzZSkpXFxuNzYyNjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VpZmFjZV9iYXNlKTtcXG43NjI3OlxcdFxcbjc2Mjg6XFx0XFx0XFx0LyogTWFwIENNMyBTUkFNICovXFxuNzYyOTpcXHRcXHRcXHRlcnIgPSBtdnBwMl9nZXRfc3JhbShwZGV2LCBwcml2KTtcXG43NjMwOlxcdFxcdFxcdGlmIChlcnIpXFxuNzYzMTpcXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbCB0byBhbGxvYyBDTTMgU1JBTVxcXFxuXFxcIik7XFxuNzYzMjpcXHRcXG43NjMzOlxcdFxcdFxcdC8qIEVuYWJsZSBnbG9iYWwgRmxvdyBDb250cm9sIG9ubHkgaWYgaGFuZGxlciB0byBTUkFNIG5vdCBOVUxMICovXFxuNzYzNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY20zX2Jhc2UpXFxuNzYzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VnbG9iYWxfdHhfZmMgPSB0cnVlO1xcbjc2MzY6XFx0XFx0fVxcbjc2Mzc6XFx0XFxuNzYzODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfdmVyc2lvbiBcXHUwMDNlPSBNVlBQMjIgXFx1MDAyNlxcdTAwMjYgZGV2X29mX25vZGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldikpIHtcXG43NjM5OlxcdFxcdFxcdHByaXYtXFx1MDAzZXN5c2N0cmxfYmFzZSA9XFxuNzY0MDpcXHRcXHRcXHRcXHRzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLFxcbjc2NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIm1hcnZlbGwsc3lzdGVtLWNvbnRyb2xsZXJcXFwiKTtcXG43NjQyOlxcdFxcdFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlc3lzY3RybF9iYXNlKSlcXG43NjQzOlxcdFxcdFxcdFxcdC8qIFRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdtYXAgaXMgb3B0aW9uYWwgZm9yIGR0XFxuNzY0NDpcXHRcXHRcXHRcXHQgKiBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFdoZW4gbm90IHByb3ZpZGVkLCB0aGVcXG43NjQ1OlxcdFxcdFxcdFxcdCAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIEdvUCByZWxpZXMgb24gdGhlXFxuNzY0NjpcXHRcXHRcXHRcXHQgKiBmaXJtd2FyZS9ib290bG9hZGVyLlxcbjc2NDc6XFx0XFx0XFx0XFx0ICovXFxuNzY0ODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VzeXNjdHJsX2Jhc2UgPSBOVUxMO1xcbjc2NDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyOToyMi4wMTcxMjA5MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUwMzY3MTcxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBBcm1hZGEgTmV0d29yayBEcml2ZXIncyBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUganVzdCBmaW5pc2hlZCB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBNYXJ2ZWxsIEFybWFkYSBuZXR3b3JrIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5vLCB0aGlzIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6IHVzaW5nIHRoZSBzdGFuZGFyZCBgc3l6a2FsbGVyYCBzZXR1cC4gSXQncyBhIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQncyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIE1hcnZlbGwgQXJtYWRhIGhhcmR3YXJlIOKAkyBpdCBtYXBzIE1lbW9yeS1NYXBwZWQgSS9PIHJlc291cmNlcyBhbmQgZGlyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIE1ESU8sIEdvUCwgQ00zIFNSQU0sIGFuZCB0aGUgQm9vdCBNYW5hZ2VyLiBXZSdyZSB0YWxraW5nIGFib3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgaGVyZS5cblxuVGhlIGtleSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBgQ09ORklHX01WUFAyYCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhvc2UgTWFydmVsbCBTb0NzLCBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSB4ODYvYW1kNjQgdmlydHVhbCBtYWNoaW5lcyB3ZSB0eXBpY2FsbHkgdXNlIGZvciBmdXp6aW5nLCBsaWtlIFFFTVUgb3IgdGhvc2Ugb24gR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGVzZSBzdGFuZGFyZCBWTXMganVzdCBkb24ndCBvZmZlciB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbnRleHQgb3IgcHJvdmlkZSBhIHBsYXVzaWJsZSBlbXVsYXRpb24gb2YgdGhvc2UgTWFydmVsbCBjb21wb25lbnRzLiBJdCdzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYW5hbHl6aW5nIHRoaXMsIEknbSBtYXJraW5nIGl0IGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBteSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBlbXB0eSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIHJlbWFpbiBlbXB0eSBhcyB3ZWxsLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjb2RlJ3MgZGVwZW5kZW5jZSBvbiB0aGlzIHNwZWNpZmljIEFSTS9BUk02NCBTb0MgYXJjaGl0ZWN0dXJlIG1ha2VzIGl0IGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlIG1vcmUgY29tbW9uIEFNRDY0IGZ1enppbmcgZW52aXJvbm1lbnRzLiBXZSdkIG5lZWQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5LCB2ZXJ5IHNwZWNpZmljLCBwb3RlbnRpYWxseSBwcm9wcmlldGFyeSwgZW11bGF0b3IgdG8gZXZlbiBiZWdpbiB0byBtYWtlIHByb2dyZXNzLCBhbmQgZXZlbiB0aGVuLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBhIGRpZmZlcmVudCBzZXQgb2YgY2hhbGxlbmdlcy5cblxuSSdsbCBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc3LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI5OjM3LjA1Mzg0MTMzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYywgd2hpY2ggaXMgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIFNvQ3MgKENPTkZJR19NVlBQMikuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGllZCB0byBNYXJ2ZWxsIEFybWFkYSBTb0MgaGFyZHdhcmUgKGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1QpIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBIZW5jZSwgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjk6MzcuMDUzODY2NjMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow46mr7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 09:26:32 +0000 UTC FinishedAt: 2026-09-14 10:29:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGM3MmNiNTQ5NGViMjYwOTQwZTBjZDI5Yzk0ZTQ4OGIyMjY1YmUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mjc6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuaW5kZXggY2NjMjRhMTMwMWYyMi4uODQ4ZWU2NTVjNmVhNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuQEAgLTUwODYsNyAmIzQzOzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcbiBcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwmIzM0O210dSAlZCB0b28gaGlnaCwgc3dpdGNoaW5nIHRvIHNoYXJlZCBidWZmZXJzXCYjMzQ7LCBtdHUpO1xuIFx0XHRcdG12cHAyX2JtX3N3aXRjaF9idWZmZXJzKHByaXYsIGZhbHNlKTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbiYjNDM7XHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIG12cHAyX2dldF9ucnhxcyhwcml2KSAqIDIgXHUwMDNjPSBNVlBQMl9CTV9NQVhfUE9PTFMpIHtcbiBcdFx0Ym9vbCBqdW1ibyA9IGZhbHNlO1xuIFx0XHRpbnQgaTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYywgd2hpY2ggaXMgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIFNvQ3MgKENPTkZJR19NVlBQMikuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGllZCB0byBNYXJ2ZWxsIEFybWFkYSBTb0MgaGFyZHdhcmUgKGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1QpIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBIZW5jZSwgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoyNzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKaW5kZXggY2NjMjRhMTMwMWYyMi4uODQ4ZWU2NTVjNmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKQEAgLTUwODYsNyAmIzQzOzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIAkJCW5ldGRldl93YXJuKGRldiwgJiMzNDttdHUgJWQgdG9vIGhpZ2gsIHN3aXRjaGluZyB0byBzaGFyZWQgYnVmZmVycyYjMzQ7LCBtdHUpOwogCQkJbXZwcDJfYm1fc3dpdGNoX2J1ZmZlcnMocHJpdiwgZmFsc2UpOwogCQl9Ci0JfSBlbHNlIHsKJiM0MzsJfSBlbHNlIGlmIChwcml2LSZndDtod192ZXJzaW9uICZndDs9IE1WUFAyMiAmYW1wOyZhbXA7CiYjNDM7CQkgICBtdnBwMl9nZXRfbnJ4cXMocHJpdikgKiAyICZsdDs9IE1WUFAyX0JNX01BWF9QT09MUykgewogCQlib29sIGp1bWJvID0gZmFsc2U7CiAJCWludCBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgV29ydGggb2YgRnV6emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jYCBhbmQgdGhlIHRhc2sgaXMgdG8gZGVjaWRlIGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBzdGFuZGFyZCwgaWYgc29tZXdoYXQgaW52b2x2ZWQsIGtlcm5lbCBtYWludGFpbmVyIFFBIHRhc2suIE15IGZvY3VzIGlzIG9uIGFtZDY0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlzayBhbmQgdGhlIHJldHVybi4gVGhlIHByaW1hcnkgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5OiBjYW4gSSBhY3R1YWxseSAqZ2V0KiB0byB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYG12cHAyYCBpcyBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdrLzhrIG5ldHdvcmsgaGFyZHdhcmUg4oCTIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGF0JiMzOTtzIGEgaGFyZCByZXF1aXJlbWVudCBvciBpZiBpdCYjMzk7cyBhdCBhbGwgcG9zc2libGUgdG8gZ2V0IHRoaXMgY29kZSB0byBydW4gb24gYSBzdGFuZGFyZCBhbWQ2NCBtYWNoaW5lLCBvciBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIEtjb25maWcgdG8gZmlndXJlIHRoYXQgb3V0LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBkZXRlcm1pbmU6CjEuICAqKlJlYWNoYWJpbGl0eSoqOiBDYW4gdGhlIGNvZGUgYmUgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSk/IElzIGl0IGhhcmR3YXJlLXNwZWNpZmljPyBEb2VzIGl0IHJ1biBvbiBhbWQ2NCBvciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIC8gU29DPwoyLiAgKipXb3J0aEZ1enppbmcqKjogQXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgbmV3IGJ1Z3MgYW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgYnVncy4KMy4gICoqRm9jdXNTeW1ib2xzKio6IElkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSB2dWxuZXJhYmxlLgo0LiAgKipFbmFibGVDb25maWdzKio6IERldGVybWluZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5hYmxlIHRoZSBkcml2ZXIgYW5kIGFueSByZWxhdGVkIGZlYXR1cmVzLgo1LiAgKipSZWFzb25pbmcqKjogQXJ0aWN1bGF0ZSB0aGUgYmFzaXMgZm9yIHRoZXNlIHBvaW50cy4KCkkmIzM5O2xsIHVzZSBncmVwcGVyIG9yIGp1c3QgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGRlcGVuZGVuY2llcywgYW5kIGV4ZWN1dGlvbiBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGxpa2VseSBleGVjdXRpb24gZmxvdyBvZiB0aGUgY29kZSB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGZ1enogaXQsIGFuZCBpZiBpdCYjMzk7cyBldmVuIGZlYXNpYmxlIHRvIGJlZ2luIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1WUFAyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTc1PWNvbmZpZyBNVk5FVEFfQk1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6ODY6Y29uZmlnIE1WUFAyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODctXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5Njpjb25maWcgTVZQUDJfUFRQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTctXHRib29sIFwmIzM0O01hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBNYXJ2ZWxsIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGFyb3VuZCBsaW5lIDg2LiBUaGlzIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgTWFydmVsbCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHZhcmlvdXMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcyB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBNYXJ2ZWxsIGNoaXBzZXRzLCBmZWF0dXJlIGZsYWdzIChsaWtlIFZMQU4gc3VwcG9ydCwganVtYm8gZnJhbWVzLCBjaGVja3N1bSBvZmZsb2FkKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgYm9hcmQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gZWFjaCBvdGhlciwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbGV4aWJpbGl0eSBvZiB0aGUgZHJpdmVyIGFuZCBob3cgdG8gYmVzdCB0YWlsb3IgaXQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG9yIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBzY2VuYXJpby4gTGV0JiMzOTtzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdHNlbGVjdCBIV0JNXG4gIDgxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgTVZORVRBX0JNIG11c3Qgbm90IGJlICYjMzk7bSYjMzk7IGlmIE1WTkVUQT15LCBzbyB0aGlzIHN5bWJvbCBlbnN1cmVzXG4gIDg0Olx0XHQgIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxuICA4NTpcdFxuICA4NjpcdGNvbmZpZyBNVlBQMlxuICA4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIG5ldHdvcmsgaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAgODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1RcbiAgODk6XHRcdHNlbGVjdCBNVk1ESU9cbiAgOTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDkxOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDkyOlx0XHRoZWxwXG4gIDkzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0cyBpbiB0aGVcbiAgOTQ6XHRcdCAgTWFydmVsbCBBUk1BREEgMzc1LCA3SyBhbmQgOEsgU29Dcy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgTVZQUDJfUFRQXG4gIDk3Olx0XHRib29sIFwmIzM0O01hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiAoUFRQXzE1ODhfQ0xPQ0sgPSB5IFx1MDAyNlx1MDAyNiBNVlBQMiA9IHkpIHx8IFxcXG4gIDk5Olx0XHRcdCAgIChQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgTVZQUDIgPSBtKVxuIDEwMDpcdFxuIDEwMTpcdGNvbmZpZyBQWEExNjhfRVRIXG4gMTAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIHB4YTE2OCBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTAzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuIDEwNDpcdFx0ZGVwZW5kcyBvbiBDUFVfUFhBMTY4IHx8IEFSQ0hfQkVSTElOIHx8IENPTVBJTEVfVEVTVFxuIDEwNTpcdFx0c2VsZWN0IFBIWUxJQlxuIDEwNjpcdFx0aGVscFxuIDEwNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcHhhMTY4IEV0aGVybmV0IHBvcnRzLlxuIDEwODpcdFxuIDEwOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMTEwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHB4YTE2OF9ldGguXG4gMTExOlx0XG4gMTEyOlx0Y29uZmlnIFNLR0VcbiAxMTM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgWXVrb24gR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuIDExNTpcdFx0c2VsZWN0IENSQzMyXG4gMTE2Olx0XHRoZWxwXG4gMTE3Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnQgdGhlIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4L1NLLTk1eHhcbiAxMTg6XHRcdCAgYW5kIHJlbGF0ZWQgR2lnYWJpdCBFdGhlcm5ldCBhZGFwdGVycy4gSXQgaXMgYSBuZXcgc21hbGxlciBkcml2ZXJcbiAxMTk6XHRcdCAgd2l0aCBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIG1vcmUgY29tcGxldGUgZXRodG9vbCBzdXBwb3J0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY29uZmlnIE1WUFAyYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBjb25maWcgTVZQUDJgIGVudHJ5LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHRoaXMgZHJpdmVyLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVuaXRzIG9uIE1hcnZlbGwgQVJNQURBIFNvQ3MsIGRlcGVuZHMgb24gZWl0aGVyIGBBUkNIX01WRUJVYCBvciBgQ09NUElMRV9URVNUYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQVJDSF9NVkVCVWAgZGVwZW5kZW5jeS4gSSBrbm93IHRoYXQmIzM5O3MgZXNzZW50aWFsbHkgYSBmbGFnIGZvciBBUk0gb3IgQVJNNjQgTWFydmVsbCBFbWJlZGRlZCBCdWlsdCBVbml0IFNvQ3MsIGxpa2UgdGhlIEFybWFkYSBzZXJpZXMuCgpIb3dldmVyLCBJJiMzOTttIHdvcmtpbmcgb24gYW4gYGFtZDY0YCBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgcmFpc2VzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZHJpdmVyIGlzIHJlbGV2YW50IGluIG15IGVudmlyb25tZW50IGF0IGFsbC4gRXZlbiBpZiB0aGlzIHdlcmUgYW4gQVJNIGJ1aWxkLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciAoZGlyZWN0bHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0pIG9yIGEgUENJIGRyaXZlci4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgeDg2XzY0LCBzbyBpdCBpc24mIzM5O3QgcmVsZXZhbnQgdG8gbXkgd29yay4KClRvIGNvbmZpcm0gaXRzIHB1cnBvc2UsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG12cHAyX21haW4uY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBwcm9iZSBmdW5jdGlvbiBvciBkcml2ZXIgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIHRvIGRldGVybWluZSBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0byBzZWUgaWYgSSBuZWVkIHRvIGFkanVzdCBvciByZW1vdmUgaXRzIGRlcGVuZGVuY2llcyBmb3IgbXkgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxtb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyBpbiBgbXZwcDJgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYG12cHAyYCBjb2RlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIG1vZGVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgYHBsYXRmb3JtX2RyaXZlcmAgaW1wbGVtZW50YXRpb24sIG9yIGEgYHBjaV9kcml2ZXJgIG9uZT8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgaXMgZW51bWVyYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5LCBob3cgZGF0YSBpcyBwYXNzZWQuIFRoZSBgcGxhdGZvcm1fZHJpdmVyYCBhcHByb2FjaCBzdWdnZXN0cyBhIG1vcmUgc3RhdGljLCBzeXN0ZW0tc3BlY2lmaWMgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbGlrZWx5IGZvciBkZXZpY2VzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gaXRzZWxmLiBDb252ZXJzZWx5LCB0aGUgYHBjaV9kcml2ZXJgIGluZGljYXRlcyBhIFBDSS1iYXNlZCBkZXZpY2UsIGdpdmluZyBtZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgYnVzIGVudW1lcmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIHRocm91Z2ggUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIFRoZSBjaG9pY2UgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IEkmIzM5O2xsIGFwcHJvYWNoIGRlYnVnZ2luZywgZXh0ZW5kaW5nIGZ1bmN0aW9uYWxpdHksIG9yIGV2ZW4gcG9ydGluZyB0aGUgZHJpdmVyIHRvIGEgZGlmZmVyZW50IGVudmlyb25tZW50LiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBkcml2ZXIgbW9kZWxzIHdpbGwgaGVscCBtZSBmaW5kIHRoZSBmaWxlcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtfZHJpdmVyID0geyYjMzk7OiBVbm1hdGNoZWQgXHs8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2RyaXZlciA9IHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O19kcml2ZXIgPSB7JiMzOTs6IFVubWF0Y2hlZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIHByZXNlbnRlZCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKiogYW5kIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqQnJlYWtpbmcgRnJlZSBmcm9tIHRoZSBCcmFja2V0cyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGlzIGB7YCBzeW1ib2wuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdG8gY2h1cm4uIEl0JiMzOTtzIGEgYnJhY2tldCwgYSBkZWxpbWl0ZXIuIEl0ICpzdWdnZXN0cyogYSBkYXRhIHN0cnVjdHVyZSwgYSBjb2RlIGJsb2NrLCBhIG1hdGhlbWF0aWNhbCBzZXQsIGEgY29uZmlndXJhdGlvbiBmaWxl4oCmIEl0JiMzOTtzIGdvdCBiYWdnYWdlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvICplc2NhcGUqIGl0LCB0byBicmVhayBmcmVlIGZyb20gdGhlIGltcGxpZWQgY29uc3RyYWludCBvciBzdHJ1Y3R1cmUuIEkgc3RhcnQgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBjb250ZXh0LCBhIGRhdGEgYW5hbHlzaXMgcHJvYmxlbSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgYW0gSSB0cnlpbmcgdG8gKmRvKiB3aXRoIHRoZSBpbmZvcm1hdGlvbj8gVGhpcyBicmFja2V0LCBvbiBpdHMgb3duLCBpcyBqdXN0IG5vaXNlLiBJdCYjMzk7cyB0aGUgKm1lYW5pbmcqIEkmIzM5O20gc2Vla2luZyB0byBkZXJpdmUgdGhhdCByZWFsbHkgbWF0dGVycy4gVGhlIGdvYWwgaXMgdG8gbW92ZSBiZXlvbmQgdGhlIGxpdGVyYWwgY2hhcmFjdGVycyB0byB0aGUgdW5kZXJseWluZyBpbnRlbnQsIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgKnBvdGVudGlhbCogZm9yIGFwcGxpY2F0aW9uLiBUaGlzIGJyYWNrZXQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QgdGhlIGRlc3RpbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlbGVtZW50IGlzIGhlcmUgYW5kIHdoYXQgSSBzaG91bGQgZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19kcml2ZXIgPSBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz03ODkxPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbXZwcDJfYWNwaV9tYXRjaCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzg5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjc4OTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZwcDJfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzg5NS1cdC5wcm9iZSA9IG12cHAyX3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNVlBQMiBEcml2ZXImIzM5O3MgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtdnBwMl9kcml2ZXJgIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMsIHNwZWNpZmljYWxseSBNYXJ2ZWxsIEFybWFkYSAzNzUsIDdLLCBhbmQgOEsgU29Dcywgd2hpY2ggYXJlIEFSTS1iYXNlZC4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoaXMgZHJpdmVyIGlzIG1lYW50IHRvIGZ1bmN0aW9uLCBpZiBhdCBhbGwsIG9uIGFuIGFtZDY0IHN5c3RlbS4KClRoZSBjb2RlIG1lbnRpb25zICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgU21hcnROSUNzLiBJdCBlbXBoYXNpemVzIGRldmljZXMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiB0aGlzIGRyaXZlciBpcyBsaWtlbHkgbmV2ZXIgaW50ZW5kZWQgdG8gKmZ1bGx5KiBmdW5jdGlvbiBvbiBhbiBhbWQ2NCBlbnZpcm9ubWVudC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGBNVlBQMmAgaXMgKnNwZWNpZmljYWxseSogZm9yIHRob3NlIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkZXZpY2VzLCB3aGljaCBhcmVuJiMzOTt0IGdvaW5nIHRvIGV4aXN0IGluIGEgdHlwaWNhbCBhbWQ2NCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgZGVwZW5kZW50IG9uIGVpdGhlciBgQVJDSF9NVkVCVWAgb3IgYENPTVBJTEVfVEVTVGAuIE9uIGFtZDY0LCBpdCAqb25seSogY29tcGlsZXMgdW5kZXIgYENPTVBJTEVfVEVTVGAsIGFuZCB0aGF0IG1lYW5zIHRoZXJlJiMzOTtzIG5vIHJlYWwgaGFyZHdhcmUgZm9yIGl0IHRvIHByb2JlLCBpbml0aWFsaXplLCBvciByZWFjaCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluOiBgbXZwcDJfY2hhbmdlX210dSgpYC4gVGhlcmVmb3JlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIHRoaXMgY3Vyc29yeSByZXZpZXcsIHRoZSBtb2RpZmllZCBjb2RlIGNvbnRhaW5pbmcgdGhhdCBmdW5jdGlvbiBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIGEgbm9ybWFsIGFtZDY0IGNvbnRleHQuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGJhY2tkb29yIHdheSB0byBnZXQgdG8gdGhhdCBgbXZwcDJfY2hhbmdlX210dSgpYCBjYWxsLiBJIGtub3cgaXTigJlzIHRoZSBgbmRvX2NoYW5nZV9tdHVgIGNhbGxiYWNrIGZvciB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBvZiB0aGUgYG12cHAyYCBuZXRkZXYuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBhbiBgbXZwcDJgIG5ldGRldiBiZSBjcmVhdGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBoYXJkd2FyZT8gSSBuZWVkIHRvIGxvb2sgaW50byBgbXZwcDJfcHJvYmVgIHRvIHNlZSBob3cgdGhhdCBuZXRkZXYgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBJZiB0aGUgcHJvYmUgZmFpbHMgd2l0aG91dCBoYXJkd2FyZSwgdGhlbiB0aGVyZSBpcyBubyB3YXkgdG8gcmVhY2ggdGhlIE1UVSBjaGFuZ2UgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2MDA6XHRcdGlmIChJU19FUlIoYmFzZSkpXG43NjAxOlx0XHRcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xuNzYwMjpcdFxuNzYwMzpcdFx0aWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiA9PSBNVlBQMjEpIHtcbjc2MDQ6XHRcdFx0cHJpdi1cdTAwM2VsbXNfYmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAxKTtcbjc2MDU6XHRcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWxtc19iYXNlKSlcbjc2MDY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWxtc19iYXNlKTtcbjc2MDc6XHRcdH0gZWxzZSB7XG43NjA4Olx0XHRcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7XG43NjA5Olx0XHRcdGlmICghcmVzKSB7XG43NjEwOlx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCByZXNvdXJjZVxcblwmIzM0Oyk7XG43NjExOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43NjEyOlx0XHRcdH1cbjc2MTM6XHRcdFx0aWYgKGhhc19hY3BpX2NvbXBhbmlvbihcdTAwMjZwZGV2LVx1MDAzZWRldikpIHtcbjc2MTQ6XHRcdFx0XHQvKiBJbiBjYXNlIHRoZSBNRElPIG1lbW9yeSByZWdpb24gaXMgZGVjbGFyZWQgaW5cbjc2MTU6XHRcdFx0XHQgKiB0aGUgQUNQSSwgaXQgY2FuIGFscmVhZHkgYXBwZWFyIGFzICYjMzk7aW4tdXNlJiMzOTtcbjc2MTY6XHRcdFx0XHQgKiBpbiB0aGUgT1MuIEJlY2F1c2UgaXQgaXMgb3ZlcmxhcHBlZCBieSBzZWNvbmRcbjc2MTc6XHRcdFx0XHQgKiByZWdpb24gb2YgdGhlIG5ldHdvcmsgY29udHJvbGxlciwgbWFrZVxuNzYxODpcdFx0XHRcdCAqIHN1cmUgaXQgaXMgcmVsZWFzZWQsIGJlZm9yZSByZXF1ZXN0aW5nIGl0IGFnYWluLlxuNzYxOTpcdFx0XHRcdCAqIFRoZSBjYXJlIGlzIHRha2VuIGJ5IG12cHAyIGRyaXZlciB0byBhdm9pZFxuNzYyMDpcdFx0XHRcdCAqIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoaXMgbWVtb3J5IHJlZ2lvbi5cbjc2MjE6XHRcdFx0XHQgKi9cbjc2MjI6XHRcdFx0XHRyZWxlYXNlX3Jlc291cmNlKHJlcyk7XG43NjIzOlx0XHRcdH1cbjc2MjQ6XHRcdFx0cHJpdi1cdTAwM2VpZmFjZV9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCByZXMpO1xuNzYyNTpcdFx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlaWZhY2VfYmFzZSkpXG43NjI2Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VpZmFjZV9iYXNlKTtcbjc2Mjc6XHRcbjc2Mjg6XHRcdFx0LyogTWFwIENNMyBTUkFNICovXG43NjI5Olx0XHRcdGVyciA9IG12cHAyX2dldF9zcmFtKHBkZXYsIHByaXYpO1xuNzYzMDpcdFx0XHRpZiAoZXJyKVxuNzYzMTpcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsIHRvIGFsbG9jIENNMyBTUkFNXFxuXCYjMzQ7KTtcbjc2MzI6XHRcbjc2MzM6XHRcdFx0LyogRW5hYmxlIGdsb2JhbCBGbG93IENvbnRyb2wgb25seSBpZiBoYW5kbGVyIHRvIFNSQU0gbm90IE5VTEwgKi9cbjc2MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNlY20zX2Jhc2UpXG43NjM1Olx0XHRcdFx0cHJpdi1cdTAwM2VnbG9iYWxfdHhfZmMgPSB0cnVlO1xuNzYzNjpcdFx0fVxuNzYzNzpcdFxuNzYzODpcdFx0aWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjYgZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG43NjM5Olx0XHRcdHByaXYtXHUwMDNlc3lzY3RybF9iYXNlID1cbjc2NDA6XHRcdFx0XHRzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsXG43NjQxOlx0XHRcdFx0XHRcdFx0XHRcJiMzNDttYXJ2ZWxsLHN5c3RlbS1jb250cm9sbGVyXCYjMzQ7KTtcbjc2NDI6XHRcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXN5c2N0cmxfYmFzZSkpXG43NjQzOlx0XHRcdFx0LyogVGhlIHN5c3RlbSBjb250cm9sbGVyIHJlZ21hcCBpcyBvcHRpb25hbCBmb3IgZHRcbjc2NDQ6XHRcdFx0XHQgKiBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFdoZW4gbm90IHByb3ZpZGVkLCB0aGVcbjc2NDU6XHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIG9mIHRoZSBHb1AgcmVsaWVzIG9uIHRoZVxuNzY0NjpcdFx0XHRcdCAqIGZpcm13YXJlL2Jvb3Rsb2FkZXIuXG43NjQ3Olx0XHRcdFx0ICovXG43NjQ4Olx0XHRcdFx0cHJpdi1cdTAwM2VzeXNjdHJsX2Jhc2UgPSBOVUxMO1xuNzY0OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIEFybWFkYSBOZXR3b3JrIERyaXZlciYjMzk7cyBGdXp6YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGZpbmlzaGVkIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE1hcnZlbGwgQXJtYWRhIG5ldHdvcmsgZHJpdmVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbm8sIHRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6IHVzaW5nIHRoZSBzdGFuZGFyZCBgc3l6a2FsbGVyYCBzZXR1cC4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgTWFydmVsbCBBcm1hZGEgaGFyZHdhcmUg4oCTIGl0IG1hcHMgTWVtb3J5LU1hcHBlZCBJL08gcmVzb3VyY2VzIGFuZCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB0aGUgTURJTywgR29QLCBDTTMgU1JBTSwgYW5kIHRoZSBCb290IE1hbmFnZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgaGVyZS4KClRoZSBrZXkgaXNzdWUgaXMgdGhhdCB0aGlzIGRyaXZlciwgd2hpY2ggaW1wbGVtZW50cyB0aGUgYENPTkZJR19NVlBQMmAgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRob3NlIE1hcnZlbGwgU29DcywgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgeDg2L2FtZDY0IHZpcnR1YWwgbWFjaGluZXMgd2UgdHlwaWNhbGx5IHVzZSBmb3IgZnV6emluZywgbGlrZSBRRU1VIG9yIHRob3NlIG9uIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gVGhlc2Ugc3RhbmRhcmQgVk1zIGp1c3QgZG9uJiMzOTt0IG9mZmVyIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgY29udGV4dCBvciBwcm92aWRlIGEgcGxhdXNpYmxlIGVtdWxhdGlvbiBvZiB0aG9zZSBNYXJ2ZWxsIGNvbXBvbmVudHMuIEl0JiMzOTtzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMuCgpUaGVyZWZvcmUsIGFmdGVyIGFuYWx5emluZyB0aGlzLCBJJiMzOTttIG1hcmtpbmcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBteSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBlbXB0eSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIHJlbWFpbiBlbXB0eSBhcyB3ZWxsLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjb2RlJiMzOTtzIGRlcGVuZGVuY2Ugb24gdGhpcyBzcGVjaWZpYyBBUk0vQVJNNjQgU29DIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIHRoZSBtb3JlIGNvbW1vbiBBTUQ2NCBmdXp6aW5nIGVudmlyb25tZW50cy4gV2UmIzM5O2QgbmVlZCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnksIHZlcnkgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHByb3ByaWV0YXJ5LCBlbXVsYXRvciB0byBldmVuIGJlZ2luIHRvIG1ha2UgcHJvZ3Jlc3MsIGFuZCBldmVuIHRoZW4sIHdlJiMzOTtyZSBsaWtlbHkgbG9va2luZyBhdCBhIGRpZmZlcmVudCBzZXQgb2YgY2hhbGxlbmdlcy4KCkkmIzM5O2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTAuNjI5MTYyMDI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDI0NzI0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMsIHdoaWNoIGlzIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBTb0NzIChDT05GSUdfTVZQUDIpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRpZWQgdG8gTWFydmVsbCBBcm1hZGEgU29DIGhhcmR3YXJlIChkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUKSBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsIGVudmlyb25tZW50cy4gSGVuY2UsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI3OjUwLjYyOTE2NjU3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODUyODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mjc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xcbmluZGV4IGNjYzI0YTEzMDFmMjIuLjg0OGVlNjU1YzZlYTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xcbkBAIC01MDg2LDcgKzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcXG4gXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwibXR1ICVkIHRvbyBoaWdoLCBzd2l0Y2hpbmcgdG8gc2hhcmVkIGJ1ZmZlcnNcXFwiLCBtdHUpO1xcbiBcXHRcXHRcXHRtdnBwMl9ibV9zd2l0Y2hfYnVmZmVycyhwcml2LCBmYWxzZSk7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4rXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2Vod192ZXJzaW9uIFxcdTAwM2U9IE1WUFAyMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBtdnBwMl9nZXRfbnJ4cXMocHJpdikgKiAyIFxcdTAwM2M9IE1WUFAyX0JNX01BWF9QT09MUykge1xcbiBcXHRcXHRib29sIGp1bWJvID0gZmFsc2U7XFxuIFxcdFxcdGludCBpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTIuMTQ4NTcwMDAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDQ5MDUyOTQ0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhkYzcyY2I1NDk0ZWIyNjA5NDBlMGNkMjljOTRlNDg4YjIyNjViZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoyNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcbmluZGV4IGNjYzI0YTEzMDFmMjIuLjg0OGVlNjU1YzZlYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcbkBAIC01MDg2LDcgKzUwODYsOCBAQCBzdGF0aWMgaW50IG12cHAyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSlcbiBcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwibXR1ICVkIHRvbyBoaWdoLCBzd2l0Y2hpbmcgdG8gc2hhcmVkIGJ1ZmZlcnNcIiwgbXR1KTtcbiBcdFx0XHRtdnBwMl9ibV9zd2l0Y2hfYnVmZmVycyhwcml2LCBmYWxzZSk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4rXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlaHdfdmVyc2lvbiBcdTAwM2U9IE1WUFAyMiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgbXZwcDJfZ2V0X25yeHFzKHByaXYpICogMiBcdTAwM2M9IE1WUFAyX0JNX01BWF9QT09MUykge1xuIFx0XHRib29sIGp1bWJvID0gZmFsc2U7XG4gXHRcdGludCBpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjc6NTIuMTQ4NTcyMDcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1ODEwMzM2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgV29ydGggb2YgRnV6emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgTGludXgga2VybmVsIHBhdGNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uY2AgYW5kIHRoZSB0YXNrIGlzIHRvIGRlY2lkZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBzdGFuZGFyZCwgaWYgc29tZXdoYXQgaW52b2x2ZWQsIGtlcm5lbCBtYWludGFpbmVyIFFBIHRhc2suIE15IGZvY3VzIGlzIG9uIGFtZDY0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByaXNrIGFuZCB0aGUgcmV0dXJuLiBUaGUgcHJpbWFyeSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHk6IGNhbiBJIGFjdHVhbGx5ICpnZXQqIHRvIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBgbXZwcDJgIGlzIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN2svOGsgbmV0d29yayBoYXJkd2FyZSDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoYXQncyBhIGhhcmQgcmVxdWlyZW1lbnQgb3IgaWYgaXQncyBhdCBhbGwgcG9zc2libGUgdG8gZ2V0IHRoaXMgY29kZSB0byBydW4gb24gYSBzdGFuZGFyZCBhbWQ2NCBtYWNoaW5lLCBvciBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgS2NvbmZpZyB0byBmaWd1cmUgdGhhdCBvdXQuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lOlxuMS4gICoqUmVhY2hhYmlsaXR5Kio6IENhbiB0aGUgY29kZSBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VKT8gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWM/IERvZXMgaXQgcnVuIG9uIGFtZDY0IG9yIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgLyBTb0M/XG4yLiAgKipXb3J0aEZ1enppbmcqKjogQXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgbmV3IGJ1Z3MgYW5kIHRoZSBpbXBhY3Qgb2YgdGhvc2UgYnVncy5cbjMuICAqKkZvY3VzU3ltYm9scyoqOiBJZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgdnVsbmVyYWJsZS5cbjQuICAqKkVuYWJsZUNvbmZpZ3MqKjogRGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhlIGRyaXZlciBhbmQgYW55IHJlbGF0ZWQgZmVhdHVyZXMuXG41LiAgKipSZWFzb25pbmcqKjogQXJ0aWN1bGF0ZSB0aGUgYmFzaXMgZm9yIHRoZXNlIHBvaW50cy5cblxuSSdsbCB1c2UgZ3JlcHBlciBvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBkZXBlbmRlbmNpZXMsIGFuZCBleGVjdXRpb24gcGF0aHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBsaWtlbHkgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IGl0LCBhbmQgaWYgaXQncyBldmVuIGZlYXNpYmxlIHRvIGJlZ2luIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyODoxNS43Mjk2MTI0OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MjcyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVlBQMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NzU9Y29uZmlnIE1WTkVUQV9CTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo4Njpjb25maWcgTVZQUDJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctODctXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5Njpjb25maWcgTVZQUDJfUFRQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTk3LVxcdGJvb2wgXFxcIk1hcnZlbGwgQXJtYWRhIDhLIEVuYWJsZSBQVFAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjg6MTYuNTU1ODkwMzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1MjI2NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBNYXJ2ZWxsIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBhcm91bmQgbGluZSA4Ni4gVGhpcyBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIE1hcnZlbGwgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB2YXJpb3VzIGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMgdGhlcmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBNYXJ2ZWxsIGNoaXBzZXRzLCBmZWF0dXJlIGZsYWdzIChsaWtlIFZMQU4gc3VwcG9ydCwganVtYm8gZnJhbWVzLCBjaGVja3N1bSBvZmZsb2FkKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgYm9hcmQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBob3cgdGhleSdyZSByZWxhdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRyaXZlciBhbmQgaG93IHRvIGJlc3QgdGFpbG9yIGl0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24gc2NlbmFyaW8uIExldCdzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjE4LjkwODE1NjkyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRzZWxlY3QgSFdCTVxcbiAgODE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIE1WTkVUQV9CTSBtdXN0IG5vdCBiZSAnbScgaWYgTVZORVRBPXksIHNvIHRoaXMgc3ltYm9sIGVuc3VyZXNcXG4gIDg0OlxcdFxcdCAgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXFxuICA4NTpcXHRcXG4gIDg2OlxcdGNvbmZpZyBNVlBQMlxcbiAgODc6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM3NS83Sy84SyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVFxcbiAgODk6XFx0XFx0c2VsZWN0IE1WTURJT1xcbiAgOTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDkxOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDkyOlxcdFxcdGhlbHBcXG4gIDkzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVuaXRzIGluIHRoZVxcbiAgOTQ6XFx0XFx0ICBNYXJ2ZWxsIEFSTUFEQSAzNzUsIDdLIGFuZCA4SyBTb0NzLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgTVZQUDJfUFRQXFxuICA5NzpcXHRcXHRib29sIFxcXCJNYXJ2ZWxsIEFybWFkYSA4SyBFbmFibGUgUFRQIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIChQVFBfMTU4OF9DTE9DSyA9IHkgXFx1MDAyNlxcdTAwMjYgTVZQUDIgPSB5KSB8fCBcXFxcXFxuICA5OTpcXHRcXHRcXHQgICAoUFRQXzE1ODhfQ0xPQ0sgXFx1MDAyNlxcdTAwMjYgTVZQUDIgPSBtKVxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgUFhBMTY4X0VUSFxcbiAxMDI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgcHhhMTY4IGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDEwMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAxMDQ6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfUFhBMTY4IHx8IEFSQ0hfQkVSTElOIHx8IENPTVBJTEVfVEVTVFxcbiAxMDU6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAxMDY6XFx0XFx0aGVscFxcbiAxMDc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcHhhMTY4IEV0aGVybmV0IHBvcnRzLlxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMTEwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHhhMTY4X2V0aC5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIFNLR0VcXG4gMTEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFl1a29uIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTE0OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDExNTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTE2OlxcdFxcdGhlbHBcXG4gMTE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydCB0aGUgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHgvU0stOTV4eFxcbiAxMTg6XFx0XFx0ICBhbmQgcmVsYXRlZCBHaWdhYml0IEV0aGVybmV0IGFkYXB0ZXJzLiBJdCBpcyBhIG5ldyBzbWFsbGVyIGRyaXZlclxcbiAxMTk6XFx0XFx0ICB3aXRoIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgbW9yZSBjb21wbGV0ZSBldGh0b29sIHN1cHBvcnQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjE4LjkwODIyOTQyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MjIyMDAxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNvbmZpZyBNVlBQMmAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoZSBgY29uZmlnIE1WUFAyYCBlbnRyeS4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIGRyaXZlciwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0cyBvbiBNYXJ2ZWxsIEFSTUFEQSBTb0NzLCBkZXBlbmRzIG9uIGVpdGhlciBgQVJDSF9NVkVCVWAgb3IgYENPTVBJTEVfVEVTVGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEFSQ0hfTVZFQlVgIGRlcGVuZGVuY3kuIEkga25vdyB0aGF0J3MgZXNzZW50aWFsbHkgYSBmbGFnIGZvciBBUk0gb3IgQVJNNjQgTWFydmVsbCBFbWJlZGRlZCBCdWlsdCBVbml0IFNvQ3MsIGxpa2UgdGhlIEFybWFkYSBzZXJpZXMuXG5cbkhvd2V2ZXIsIEknbSB3b3JraW5nIG9uIGFuIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLCBzbyB0aGlzIHJhaXNlcyBhIHJlZCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyByZWxldmFudCBpbiBteSBlbnZpcm9ubWVudCBhdCBhbGwuIEV2ZW4gaWYgdGhpcyB3ZXJlIGFuIEFSTSBidWlsZCwgSSdkIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIChkaXJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSkgb3IgYSBQQ0kgZHJpdmVyLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyB4ODZfNjQsIHNvIGl0IGlzbid0IHJlbGV2YW50IHRvIG15IHdvcmsuXG5cblRvIGNvbmZpcm0gaXRzIHB1cnBvc2UsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbXZwcDJfbWFpbi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgcHJvYmUgZnVuY3Rpb24gb3IgZHJpdmVyIHJlZ2lzdHJhdGlvbiByb3V0aW5lcyB0byBkZXRlcm1pbmUgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdG8gc2VlIGlmIEkgbmVlZCB0byBhZGp1c3Qgb3IgcmVtb3ZlIGl0cyBkZXBlbmRlbmNpZXMgZm9yIG15IHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcyNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjM1LjEzMDIzNDIzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNjkzNDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8bW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjM1LjIzODMxMjA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5NTU3MjA5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyBpbiBgbXZwcDJgKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gdGhlIGBtdnBwMmAgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdHMgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciBtb2RlbC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGBwbGF0Zm9ybV9kcml2ZXJgIGltcGxlbWVudGF0aW9uLCBvciBhIGBwY2lfZHJpdmVyYCBvbmU/IEtub3dpbmcgdGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIGluaXRpYWxpemVkLCBhbmQgdWx0aW1hdGVseSwgaG93IGRhdGEgaXMgcGFzc2VkLiBUaGUgYHBsYXRmb3JtX2RyaXZlcmAgYXBwcm9hY2ggc3VnZ2VzdHMgYSBtb3JlIHN0YXRpYywgc3lzdGVtLXNwZWNpZmljIGRldmljZSByZWdpc3RyYXRpb24sIGxpa2VseSBmb3IgZGV2aWNlcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlIHBsYXRmb3JtIGl0c2VsZi4gQ29udmVyc2VseSwgdGhlIGBwY2lfZHJpdmVyYCBpbmRpY2F0ZXMgYSBQQ0ktYmFzZWQgZGV2aWNlLCBnaXZpbmcgbWUgaW1tZWRpYXRlIGNsdWVzIGFib3V0IGJ1cyBlbnVtZXJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiB0aHJvdWdoIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBUaGUgY2hvaWNlIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGFwcHJvYWNoIGRlYnVnZ2luZywgZXh0ZW5kaW5nIGZ1bmN0aW9uYWxpdHksIG9yIGV2ZW4gcG9ydGluZyB0aGUgZHJpdmVyIHRvIGEgZGlmZmVyZW50IGVudmlyb25tZW50LiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBkcml2ZXIgbW9kZWxzIHdpbGwgaGVscCBtZSBmaW5kIHRoZSBmaWxlcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjg6NDAuMTk0MDM1MDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg4Mzg2NSwiRXJyb3IiOiJiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJ19kcml2ZXIgPSB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9kcml2ZXIgPSB7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYmFkIGV4cHJlc3Npb246IGZhdGFsOiAtZSBvcHRpb24sICdfZHJpdmVyID0geyc6IFVubWF0Y2hlZCBcXFxce1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyODo0MC4yMjI5MjUyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjM3NDk2NTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIHByZXNlbnRlZCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKiogYW5kIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCcmVha2luZyBGcmVlIGZyb20gdGhlIEJyYWNrZXRzKipcblxuQWxyaWdodCwgc28gSSBzZWUgdGhpcyBge2Agc3ltYm9sLiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIGNodXJuLiBJdCdzIGEgYnJhY2tldCwgYSBkZWxpbWl0ZXIuIEl0ICpzdWdnZXN0cyogYSBkYXRhIHN0cnVjdHVyZSwgYSBjb2RlIGJsb2NrLCBhIG1hdGhlbWF0aWNhbCBzZXQsIGEgY29uZmlndXJhdGlvbiBmaWxl4oCmIEl0J3MgZ290IGJhZ2dhZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gKmVzY2FwZSogaXQsIHRvIGJyZWFrIGZyZWUgZnJvbSB0aGUgaW1wbGllZCBjb25zdHJhaW50IG9yIHN0cnVjdHVyZS4gSSBzdGFydCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSXMgdGhpcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnRleHQsIGEgZGF0YSBhbmFseXNpcyBwcm9ibGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhbSBJIHRyeWluZyB0byAqZG8qIHdpdGggdGhlIGluZm9ybWF0aW9uPyBUaGlzIGJyYWNrZXQsIG9uIGl0cyBvd24sIGlzIGp1c3Qgbm9pc2UuIEl0J3MgdGhlICptZWFuaW5nKiBJJ20gc2Vla2luZyB0byBkZXJpdmUgdGhhdCByZWFsbHkgbWF0dGVycy4gVGhlIGdvYWwgaXMgdG8gbW92ZSBiZXlvbmQgdGhlIGxpdGVyYWwgY2hhcmFjdGVycyB0byB0aGUgdW5kZXJseWluZyBpbnRlbnQsIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgKnBvdGVudGlhbCogZm9yIGFwcGxpY2F0aW9uLiBUaGlzIGJyYWNrZXQgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QgdGhlIGRlc3RpbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlbGVtZW50IGlzIGhlcmUgYW5kIHdoYXQgSSBzaG91bGQgZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjQ2LjU5Nzg5NDY0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NDg0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9kcml2ZXIgPSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz03ODkxPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbXZwcDJfYWNwaV9tYXRjaCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03ODkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjc4OTQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZwcDJfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTc4OTUtXFx0LnByb2JlID0gbXZwcDJfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI4OjQ3LjE5NzM4NjQyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDgxOTQyMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTVZQUDIgRHJpdmVyJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXZwcDJfZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgc3BlY2lmaWNhbGx5IE1hcnZlbGwgQXJtYWRhIDM3NSwgN0ssIGFuZCA4SyBTb0NzLCB3aGljaCBhcmUgQVJNLWJhc2VkLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogdGhpcyBkcml2ZXIgaXMgbWVhbnQgdG8gZnVuY3Rpb24sIGlmIGF0IGFsbCwgb24gYW4gYW1kNjQgc3lzdGVtLlxuXG5UaGUgY29kZSBtZW50aW9ucyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIFNtYXJ0TklDcy4gSXQgZW1waGFzaXplcyBkZXZpY2VzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjb25maXJtZWQ6IHRoaXMgZHJpdmVyIGlzIGxpa2VseSBuZXZlciBpbnRlbmRlZCB0byAqZnVsbHkqIGZ1bmN0aW9uIG9uIGFuIGFtZDY0IGVudmlyb25tZW50LlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgTVZQUDJgIGlzICpzcGVjaWZpY2FsbHkqIGZvciB0aG9zZSBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBTb0MgcGxhdGZvcm0gZGV2aWNlcywgd2hpY2ggYXJlbid0IGdvaW5nIHRvIGV4aXN0IGluIGEgdHlwaWNhbCBhbWQ2NCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQncyBkZXBlbmRlbnQgb24gZWl0aGVyIGBBUkNIX01WRUJVYCBvciBgQ09NUElMRV9URVNUYC4gT24gYW1kNjQsIGl0ICpvbmx5KiBjb21waWxlcyB1bmRlciBgQ09NUElMRV9URVNUYCwgYW5kIHRoYXQgbWVhbnMgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIGZvciBpdCB0byBwcm9iZSwgaW5pdGlhbGl6ZSwgb3IgcmVhY2ggdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluOiBgbXZwcDJfY2hhbmdlX210dSgpYC4gVGhlcmVmb3JlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIHRoaXMgY3Vyc29yeSByZXZpZXcsIHRoZSBtb2RpZmllZCBjb2RlIGNvbnRhaW5pbmcgdGhhdCBmdW5jdGlvbiBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlcywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIGEgbm9ybWFsIGFtZDY0IGNvbnRleHQuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBiYWNrZG9vciB3YXkgdG8gZ2V0IHRvIHRoYXQgYG12cHAyX2NoYW5nZV9tdHUoKWAgY2FsbC4gSSBrbm93IGl04oCZcyB0aGUgYG5kb19jaGFuZ2VfbXR1YCBjYWxsYmFjayBmb3IgdGhlIGBuZXRfZGV2aWNlX29wc2Agb2YgdGhlIGBtdnBwMmAgbmV0ZGV2LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gYW4gYG12cHAyYCBuZXRkZXYgYmUgY3JlYXRlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBTb0MgaGFyZHdhcmU/IEkgbmVlZCB0byBsb29rIGludG8gYG12cHAyX3Byb2JlYCB0byBzZWUgaG93IHRoYXQgbmV0ZGV2IGlzIGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gSWYgdGhlIHByb2JlIGZhaWxzIHdpdGhvdXQgaGFyZHdhcmUsIHRoZW4gdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoZSBNVFUgY2hhbmdlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTM4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI5OjIyLjAxNjgxNTE1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzYwMDpcXHRcXHRpZiAoSVNfRVJSKGJhc2UpKVxcbjc2MDE6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XFxuNzYwMjpcXHRcXG43NjAzOlxcdFxcdGlmIChwcml2LVxcdTAwM2Vod192ZXJzaW9uID09IE1WUFAyMSkge1xcbjc2MDQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbG1zX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XFxuNzYwNTpcXHRcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWxtc19iYXNlKSlcXG43NjA2OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZWxtc19iYXNlKTtcXG43NjA3OlxcdFxcdH0gZWxzZSB7XFxuNzYwODpcXHRcXHRcXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjc2MDk6XFx0XFx0XFx0aWYgKCFyZXMpIHtcXG43NjEwOlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgcmVzb3VyY2VcXFxcblxcXCIpO1xcbjc2MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzYxMjpcXHRcXHRcXHR9XFxuNzYxMzpcXHRcXHRcXHRpZiAoaGFzX2FjcGlfY29tcGFuaW9uKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpKSB7XFxuNzYxNDpcXHRcXHRcXHRcXHQvKiBJbiBjYXNlIHRoZSBNRElPIG1lbW9yeSByZWdpb24gaXMgZGVjbGFyZWQgaW5cXG43NjE1OlxcdFxcdFxcdFxcdCAqIHRoZSBBQ1BJLCBpdCBjYW4gYWxyZWFkeSBhcHBlYXIgYXMgJ2luLXVzZSdcXG43NjE2OlxcdFxcdFxcdFxcdCAqIGluIHRoZSBPUy4gQmVjYXVzZSBpdCBpcyBvdmVybGFwcGVkIGJ5IHNlY29uZFxcbjc2MTc6XFx0XFx0XFx0XFx0ICogcmVnaW9uIG9mIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIsIG1ha2VcXG43NjE4OlxcdFxcdFxcdFxcdCAqIHN1cmUgaXQgaXMgcmVsZWFzZWQsIGJlZm9yZSByZXF1ZXN0aW5nIGl0IGFnYWluLlxcbjc2MTk6XFx0XFx0XFx0XFx0ICogVGhlIGNhcmUgaXMgdGFrZW4gYnkgbXZwcDIgZHJpdmVyIHRvIGF2b2lkXFxuNzYyMDpcXHRcXHRcXHRcXHQgKiBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIG1lbW9yeSByZWdpb24uXFxuNzYyMTpcXHRcXHRcXHRcXHQgKi9cXG43NjIyOlxcdFxcdFxcdFxcdHJlbGVhc2VfcmVzb3VyY2UocmVzKTtcXG43NjIzOlxcdFxcdFxcdH1cXG43NjI0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWlmYWNlX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmVzKTtcXG43NjI1OlxcdFxcdFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlaWZhY2VfYmFzZSkpXFxuNzYyNjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VpZmFjZV9iYXNlKTtcXG43NjI3OlxcdFxcbjc2Mjg6XFx0XFx0XFx0LyogTWFwIENNMyBTUkFNICovXFxuNzYyOTpcXHRcXHRcXHRlcnIgPSBtdnBwMl9nZXRfc3JhbShwZGV2LCBwcml2KTtcXG43NjMwOlxcdFxcdFxcdGlmIChlcnIpXFxuNzYzMTpcXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbCB0byBhbGxvYyBDTTMgU1JBTVxcXFxuXFxcIik7XFxuNzYzMjpcXHRcXG43NjMzOlxcdFxcdFxcdC8qIEVuYWJsZSBnbG9iYWwgRmxvdyBDb250cm9sIG9ubHkgaWYgaGFuZGxlciB0byBTUkFNIG5vdCBOVUxMICovXFxuNzYzNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY20zX2Jhc2UpXFxuNzYzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VnbG9iYWxfdHhfZmMgPSB0cnVlO1xcbjc2MzY6XFx0XFx0fVxcbjc2Mzc6XFx0XFxuNzYzODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfdmVyc2lvbiBcXHUwMDNlPSBNVlBQMjIgXFx1MDAyNlxcdTAwMjYgZGV2X29mX25vZGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldikpIHtcXG43NjM5OlxcdFxcdFxcdHByaXYtXFx1MDAzZXN5c2N0cmxfYmFzZSA9XFxuNzY0MDpcXHRcXHRcXHRcXHRzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLFxcbjc2NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIm1hcnZlbGwsc3lzdGVtLWNvbnRyb2xsZXJcXFwiKTtcXG43NjQyOlxcdFxcdFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlc3lzY3RybF9iYXNlKSlcXG43NjQzOlxcdFxcdFxcdFxcdC8qIFRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdtYXAgaXMgb3B0aW9uYWwgZm9yIGR0XFxuNzY0NDpcXHRcXHRcXHRcXHQgKiBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFdoZW4gbm90IHByb3ZpZGVkLCB0aGVcXG43NjQ1OlxcdFxcdFxcdFxcdCAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIEdvUCByZWxpZXMgb24gdGhlXFxuNzY0NjpcXHRcXHRcXHRcXHQgKiBmaXJtd2FyZS9ib290bG9hZGVyLlxcbjc2NDc6XFx0XFx0XFx0XFx0ICovXFxuNzY0ODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VzeXNjdHJsX2Jhc2UgPSBOVUxMO1xcbjc2NDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoyOToyMi4wMTcxMjA5MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUwMzY3MTcxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBBcm1hZGEgTmV0d29yayBEcml2ZXIncyBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUganVzdCBmaW5pc2hlZCB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBNYXJ2ZWxsIEFybWFkYSBuZXR3b3JrIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5vLCB0aGlzIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6IHVzaW5nIHRoZSBzdGFuZGFyZCBgc3l6a2FsbGVyYCBzZXR1cC4gSXQncyBhIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQncyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIE1hcnZlbGwgQXJtYWRhIGhhcmR3YXJlIOKAkyBpdCBtYXBzIE1lbW9yeS1NYXBwZWQgSS9PIHJlc291cmNlcyBhbmQgZGlyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIE1ESU8sIEdvUCwgQ00zIFNSQU0sIGFuZCB0aGUgQm9vdCBNYW5hZ2VyLiBXZSdyZSB0YWxraW5nIGFib3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgaGVyZS5cblxuVGhlIGtleSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBgQ09ORklHX01WUFAyYCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhvc2UgTWFydmVsbCBTb0NzLCBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSB4ODYvYW1kNjQgdmlydHVhbCBtYWNoaW5lcyB3ZSB0eXBpY2FsbHkgdXNlIGZvciBmdXp6aW5nLCBsaWtlIFFFTVUgb3IgdGhvc2Ugb24gR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGVzZSBzdGFuZGFyZCBWTXMganVzdCBkb24ndCBvZmZlciB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIGNvbnRleHQgb3IgcHJvdmlkZSBhIHBsYXVzaWJsZSBlbXVsYXRpb24gb2YgdGhvc2UgTWFydmVsbCBjb21wb25lbnRzLiBJdCdzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYW5hbHl6aW5nIHRoaXMsIEknbSBtYXJraW5nIGl0IGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBteSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBlbXB0eSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIHJlbWFpbiBlbXB0eSBhcyB3ZWxsLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjb2RlJ3MgZGVwZW5kZW5jZSBvbiB0aGlzIHNwZWNpZmljIEFSTS9BUk02NCBTb0MgYXJjaGl0ZWN0dXJlIG1ha2VzIGl0IGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlIG1vcmUgY29tbW9uIEFNRDY0IGZ1enppbmcgZW52aXJvbm1lbnRzLiBXZSdkIG5lZWQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5LCB2ZXJ5IHNwZWNpZmljLCBwb3RlbnRpYWxseSBwcm9wcmlldGFyeSwgZW11bGF0b3IgdG8gZXZlbiBiZWdpbiB0byBtYWtlIHByb2dyZXNzLCBhbmQgZXZlbiB0aGVuLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBhIGRpZmZlcmVudCBzZXQgb2YgY2hhbGxlbmdlcy5cblxuSSdsbCBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc3LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjI5OjM3LjA1Mzg0MTMzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIEFybWFkYSAzNzUvN0svOEsgU29DcyAoQ09ORklHX01WUFAyKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aWVkIHRvIE1hcnZlbGwgQXJtYWRhIFNvQyBoYXJkd2FyZSAoZGVwZW5kcyBvbiBBUkNIX01WRUJVIHx8IENPTVBJTEVfVEVTVCkgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMuIEhlbmNlLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYywgd2hpY2ggaXMgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzdLLzhLIFNvQ3MgKENPTkZJR19NVlBQMikuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGllZCB0byBNYXJ2ZWxsIEFybWFkYSBTb0MgaGFyZHdhcmUgKGRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01QSUxFX1RFU1QpIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBIZW5jZSwgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mjk6MzcuMDUzODY2NjMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow46mr7[1] Phase: Running StartedAt: 2026-09-14 10:30:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow46mr7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 10:30:04 +0000 UTC FinishedAt: 2026-09-14 10:30:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}