Name: series-workflow2h6k8 Phase: Succeeded StartedAt: 2026-09-13 10:31:38 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[0] Phase: Succeeded StartedAt: 2026-09-13 10:31:38 +0000 UTC FinishedAt: 2026-09-13 10:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:31:38 +0000 UTC FinishedAt: 2026-09-13 10:35:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI" ], "series_id": "7156c77e-e202-4e94-b140-5f3d1a9e5ee4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_queue_tx_data_frags", "nci_send_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4mIzQzO1x0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuYwppbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvZGF0YS5jCkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7CWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CiYjNDM7CQlyYyA9IC1FUFJPVE87CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtmcmFnc19xKTsKIAogCXdoaWxlICh0b3RhbF9sZW4pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTkZDIERyaXZlciBSZWdyZXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBjaGVjayB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgaWZgIHN0YXRlbWVudDogYGlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7IHJjID0gLUVQUk9UTzsgZ290byBleGl0OyB9YC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgbWlnaHQgYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgcHJvdG9jb2wgdmlvbGF0aW9uIGlzc3VlIGR1cmluZyBORkMgZGF0YSB0cmFuc21pc3Npb24sIHBvdGVudGlhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgcGFja2V0cy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMTQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIEkgd2lsbCB1c2UgbXkgdG9vbHMgLSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgLSB0byB1bmRlcnN0YW5kIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gdGhlIG5hbWUgaXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSBtYXhpbXVtIHBheWxvYWQgc2l6ZSB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGNhbiBoYW5kbGUuIElmIHRoaXMgaXMgemVybywgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFRoaXMgY2hlY2sgbWFrZXMgc3VyZSB0aGF0IGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgaWYgbm90LCByZWplY3RzIHRoZSBwYWNrZXQuIFRoaXMgd2lsbCBwcmV2ZW50IGJhZCBtZW1vcnkgd3JpdGVzLCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZpZWxkIGlzIHNldCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGl0ICpjb3VsZCogYmUgemVyby4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBgY29ubl9pbmZvYCBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSBtaXNzaW5nIGluaXRpYWxpemF0aW9uIHNvbWV3aGVyZSBvciBpZiB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGlzbiYjMzk7dCBiZWluZyBuZWdvdGlhdGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2RhdGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDEwMTpcdFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gMTAyOlx0XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gc2tiLVx1MDAzZWRhdGE7XG4gMTAzOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEwNDpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBmcmFnc19xO1xuIDEwNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnO1xuIDEwNjpcdFx0aW50IGZyYWdfbGVuO1xuIDEwNzpcdFx0aW50IHJjID0gMDtcbiAxMDg6XHRcbiAxMDk6XHRcdHByX2RlYnVnKFwmIzM0O2Nvbm5faWQgMHgleCwgdG90YWxfbGVuICVkXFxuXCYjMzQ7LCBjb25uX2lkLCB0b3RhbF9sZW4pO1xuIDExMDpcdFxuIDExMTpcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbiAxMTI6XHRcdGlmICghY29ubl9pbmZvKSB7XG4gMTEzOlx0XHRcdHJjID0gLUVQUk9UTztcbiAxMTQ6XHRcdFx0Z290byBleGl0O1xuIDExNTpcdFx0fVxuIDExNjpcdFxuIDExNzpcdFx0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuIDExODpcdFx0XHRyYyA9IC1FUFJPVE87XG4gMTE5Olx0XHRcdGdvdG8gZXhpdDtcbiAxMjA6XHRcdH1cbiAxMjE6XHRcbiAxMjI6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiAxMjU6XHRcdFx0ZnJhZ19sZW4gPVxuIDEyNjpcdFx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4gMTI3Olx0XG4gMTI4Olx0XHRcdHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LFxuIDEyOTpcdFx0XHRcdFx0XHQgKE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGZyYWdfbGVuKSxcbiAxMzA6XHRcdFx0XHRcdFx0IEdGUF9BVE9NSUMpO1xuIDEzMTpcdFx0XHRpZiAoc2tiX2ZyYWcgPT0gTlVMTCkge1xuIDEzMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbiAxMzM6XHRcdFx0XHRnb3RvIGZyZWVfZXhpdDtcbiAxMzQ6XHRcdFx0fVxuIDEzNTpcdFx0XHRza2JfcmVzZXJ2ZShza2JfZnJhZywgTkNJX0RBVEFfSERSX1NJWkUpO1xuIDEzNjpcdFxuIDEzNzpcdFx0XHQvKiBmaXJzdCwgY29weSB0aGUgZGF0YSAqL1xuIDEzODpcdFx0XHRza2JfcHV0X2RhdGEoc2tiX2ZyYWcsIGRhdGEsIGZyYWdfbGVuKTtcbiAxMzk6XHRcbiAxNDA6XHRcdFx0Lyogc2Vjb25kLCBzZXQgdGhlIGhlYWRlciAqL1xuIDE0MTpcdFx0XHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcbiAxNDI6XHRcdFx0XHRcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cbiAxNDM6XHRcdFx0XHRcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmFnc19xLCBza2JfZnJhZyk7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRcdGRhdGEgJiM0Mzs9IGZyYWdfbGVuO1xuIDE0ODpcdFx0XHR0b3RhbF9sZW4gLT0gZnJhZ19sZW47XG4gMTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgTkNJIERhdGEgRnJhZ21lbnQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgd2hpbGUgKHRvdGFsX2xlbilgIGxvb3AuLi4gSSBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB0aGUgZnJhZ21lbnQgbGVuZ3RoIGNhbGN1bGF0aW9uOiBgZnJhZ19sZW4gPSBtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKTtgLiBJZiBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCBzb21laG93IGVuZHMgdXAgYmVpbmcgemVybywgdGhlbiBgZnJhZ19sZW5gIHdpbGwgYWxzbyBiZSB6ZXJvLiBDb25zZXF1ZW50bHksIGB0b3RhbF9sZW4gLT0gZnJhZ19sZW5gIGJlY29tZXMgYHRvdGFsX2xlbiAtPSAwYCwgYW5kIHdlJiMzOTtyZSBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wISBUaGF0JiMzOTtzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IOKAkyBkZW5pYWwgb2Ygc2VydmljZSB3YWl0aW5nIHRvIGhhcHBlbi4KCkFoLCB0aGUgcGF0Y2ghIExvb2tzIGxpa2UgaXQgYW50aWNpcGF0ZXMgdGhpcy4gVGhlIGFkZGVkIGNoZWNrIGBpZiAoIWNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbilgIGltbWVkaWF0ZWx5IGV4aXRzIHdpdGggYC1FUFJPVE9gIGlmIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLiBTbWFydCDigJMgYSBzaW1wbGUsIGVmZmVjdGl2ZSBzYWZlZ3VhcmQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXJlIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgaXMgY2FsbGVkIGZyb20gYW5kIHdoYXQgZmVlZHMgaW50byB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIHRvIGdpdmUgYSByZWFsIGFzc2Vzc21lbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNvZGXigJlzIHJlYWNoYWJpbGl0eS4gSSYjMzk7bGwgc2VhcmNoIGZvciBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCYjMzk7cyB1c2VkLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIGxvb2sgZm9yIGBuY2lfc2VuZF9kYXRhYC4gR290dGEgZ2V0IGEgZmlybSBncmFzcCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0mIzM5O3MgZGF0YSBmbG93IHRvIGFzc2VzcyB0aGUgcmVhbCBpbXBhY3Qgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfcXVldWVfdHhfZGF0YV9mcmFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmM9OTU9RVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvZGF0YS5jLTk4LVx0XHRcdFx0ICAgX191OCBjb25uX2lkLFxuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYz0xNzY9aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVx0XHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXHRcdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFRyYW5zbWlzc2lvbiBQYXRoIGluIHRoZSBOQ0kgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgYHN0YXRpY2AgZnVuY3Rpb24gaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBtb2R1bGUsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZm9yIGZyYWdtZW50IHF1ZXVlaW5nLiBJIGtub3cgYG5jaV9zZW5kX2RhdGFgIGNhbGxzIGl0LiBOb3csIHdoYXQmIzM5O3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24sIGBuY2lfc2VuZF9kYXRhYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB1cCB0byB0aGlzIHBvaW50IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCB3b3JrcyB3aXRoaW4gdGhlIE5DSSBzdWItc3lzdGVtLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhvc2UgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfc2VuZF9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xNTk9c3RhdGljIHZvaWQgZmRwX25jaV9zZXRfZGF0YV9wa3RfY291bnRlcihzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMTczLSAqIGZpbGUgaXMgc2VnbWVudGVkIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUgcGFja2V0cy4gSWYgd2UgZ2l2ZSB0aGVcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoxNzQ6ICogd2hvbGUgZmlybXdhcmUgdG8gbmNpX3NlbmRfZGF0YSBpdCB3aWxsIHNlZ21lbnQgaXQgYW5kIGl0IHdpbGwgc2V0XG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMTc1LSAqIHRoZSBQQkYgZmxhZyB0byAweDAxIHNvIHdlIG5lZWQgdG8gZG8gdGhlIHNlZ21lbnRhdGlvbiBoZXJlLlxuLS1cbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xODE9c3RhdGljIGludCBmZHBfbmNpX3NlbmRfcGF0Y2goc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGNvbm5faWQsIHU4IHR5cGUpXG4tLVxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyMy1cbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoyMjQ6XHRcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyNS1cbi0tXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaD0zNzA9aW50IG5jaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191MTYgb3Bjb2RlLCBfX3U4IHBsZW4sIGNvbnN0IHZvaWQgKnBheWxvYWQpO1xuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzcxOmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMzcyLWludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0zOTc9c3RydWN0IG5jaV9sb29wYmFja19kYXRhIHtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtNDAxLVxubmV0L25mYy9uY2kvY29yZS5jOjQwMjpzdGF0aWMgdm9pZCBuY2lfc2VuZF9kYXRhX3JlcShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqb3B0KVxubmV0L25mYy9uY2kvY29yZS5jLTQwMy17XG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTQwNS1cbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDY6XHRuY2lfc2VuZF9kYXRhKG5kZXYsIGRhdGEtXHUwMDNlY29ubl9pZCwgZGF0YS1cdTAwM2VkYXRhKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDctfVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz00MjU9aW50IG5jaV9uZmNjX2xvb3BiYWNrKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTQ2NC1cdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xubmV0L25mYy9uY2kvY29yZS5jOjQ2NTpcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2bG9vcGJhY2tfZGF0YSxcbm5ldC9uZmMvbmNpL2NvcmUuYy00NjYtXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEwNDA9c3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA3MC1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxMDcxOlx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMDcyLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMDc4PXN0YXRpYyBpbnQgbmNpX3RtX3NlbmQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEwODItXG5uZXQvbmZjL25jaS9jb3JlLmM6MTA4MzpcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTA4NC1cdGlmIChyYylcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmM9OTc9c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTc1LS8qIFNlbmQgTkNJIGRhdGEgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxNzY6aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL2RhdGEuYy0xNzcte1xuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYy0yMTQtfVxubmV0L25mYy9uY2kvZGF0YS5jOjIxNTpFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xubmV0L25mYy9uY2kvZGF0YS5jLTIxNi1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYz0xNDI9c3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0xNzgtXG5uZXQvbmZjL25jaS9oY2kuYzoxNzk6XHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cdTAwM2Vjb25uX2lkLCBza2IpO1xubmV0L25mYy9uY2kvaGNpLmMtMTgwLVx0XHRpZiAociBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5GQyBEYXRhIFRyYW5zbWlzc2lvbiBQYXRod2F5cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGRhdGEgZ2V0cyBzZW50IGluIHRoZSBORkMgc3RhY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AuIEl0IHNlZW1zIGBuY2lfc2VuZF9kYXRhYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCByb3V0ZXMgZGF0YSB0aHJvdWdoIHNldmVyYWwgcGF0aHdheXMgZGVwZW5kaW5nIG9uIHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uIGBuY2lfdHJhbnNjZWl2ZWAgaXMgdGhlIG9idmlvdXMgb25lIGZvciBhIHN0YW5kYXJkIE5GQyB0cmFuc2NlaXZlLCB3aGljaCBsaWtlbHkgYm9pbHMgZG93biB0byBhIHJhdyBzb2NrZXQsIGBzZW5kbXNnYCwgb3IgcG90ZW50aWFsbHkgbmV0bGluayBmb3IgY29tbXVuaWNhdGlvbi4gVGhlbiB0aGVyZSYjMzk7cyBgbmNpX3RtX3NlbmRgLCB3aGljaCBpcyBkZWRpY2F0ZWQgZm9yIE5GQyB0YXJnZXQgbW9kZSBvcGVyYXRpb25zLiBXZSYjMzk7dmUgZ290IGBuY2lfbmZjY19sb29wYmFja2Agd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBhIG5ldGxpbmstYmFzZWQgbG9vcGJhY2sgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZywgbmljZSBmb3IgcXVpY2sgY2hlY2tzLiBBbmQgZmluYWxseSwgYG5jaV9oY2lfc2VuZF9kYXRhYCwgd2hpY2ggc2VlbXMgcmVsYXRlZCB0byB0aGUgSENJIGxheWVyLgoKSSYjMzk7bSBhbHNvIHBvbmRlcmluZyB0aGUgcG90ZW50aWFsIGZvciB2aXJ0dWFsIE5GQyBkZXZpY2VzLiBPZiBjb3Vyc2UsIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSBmb3IgdGVzdGluZyBhbmQgZnV6emluZy4gSSBrbm93IHN5emthbGxlciBoYXMgc3VwcG9ydCBmb3IgdmlydHVhbCBORkMgYW5kIGV2ZW4gcmF3IHNvY2tldHMsIHdoaWNoIGlzIGdyZWF0LiBTcGVjaWZpY2FsbHksIGl0IGNhbiB1dGlsaXplIHZpcnR1YWwgTkZDIGRyaXZlcnMgbGlrZSBgbmZjc2ltYCB3aGljaCBJIHJlY29nbml6ZSwgaXQmIzM5O3MgdW5kZXIgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvbmZjc2ltLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgVVNCIE5GQyBkb25nbGUgZW11bGF0aW9uIHN1cHBvcnQgdG9vIHZpYSBzeXprYWxsZXIsIGxpa2Ugd2l0aCBgcG41MzNfdXNiYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHdpdGggcmVhbCBoYXJkd2FyZSB0b28uCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBuZmNzaW1gIGxldmVyYWdlcyB0aGUgTkNJIGxheWVyLiBNeSBpbnN0aW5jdCBpcywgaXQgaGFzIHRvLCBidXQgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZmMvdmlydHVhbC9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoZXJlIE5DSSBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGJlIHN1cmUgb2YgdGhlIGV4YWN0IGFyY2hpdGVjdHVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX2FsbG9jYXRlX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9mZHAvZmRwLmM9Njk5PWludCBmZHBfbmNpX3Byb2JlKHN0cnVjdCBmZHBfaTJjX3BoeSAqcGh5LCBjb25zdCBzdHJ1Y3QgbmZjX3BoeV9vcHMgKnBoeV9vcHMsXG4tLVxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMC1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZkcF9wcm9wX29wcykgXHUwMDNlIE5DSV9NQVhfUFJPUFJJRVRBUllfQ01EKTtcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzo3MzE6XHRuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZuY2lfb3BzLCBwcm90b2NvbHMsIHR4X2hlYWRyb29tLFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMi1cdFx0XHRcdCAgIHR4X3RhaWxyb29tKTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYz05Mj1zdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpuZmNtcnZsX25jaV9yZWdpc3Rlcl9kZXYoZW51bSBuZmNtcnZsX3BoeSBwaHksXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQwLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQxOlx0cHJpdi1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZuZmNtcnZsX25jaV9vcHMsIHByb3RvY29scyxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTE0Mi1cdFx0XHRcdFx0IGhlYWRyb29tLCB0YWlscm9vbSk7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDMtXHRpZiAoIXByaXYtXHUwMDNlbmRldikge1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQ0Olx0XHRuZmNfZXJyKGRldiwgXCYjMzQ7bmNpX2FsbG9jYXRlX2RldmljZSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQ1LVx0XHRyYyA9IC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmM9MTM1PWludCBueHBfbmNpX3Byb2JlKHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYy0xNjItXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYzoxNjM6XHRpbmZvLVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNm54cF9uY2lfb3BzLCBOWFBfTkNJX05GQ19QUk9UT0NPTFMsXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYy0xNjQtXHRcdFx0XHRcdCBOWFBfTkNJX0hEUl9MRU4sIDApO1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE2MD1pbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNzYtXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzoxNzc6XHRpbmZvLVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNnMzZndybjVfbmNpX29wcyxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTE3OC1cdFx0UzNGV1JONV9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jPTExMj1pbnQgc3RfbmNpX3Byb2JlKHN0cnVjdCBsbHRfbmRsYyAqbmRsYywgaW50IHBoeV9oZWFkcm9vbSxcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzMi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHN0X25jaV9wcm9wX29wcykgXHUwMDNlIE5DSV9NQVhfUFJPUFJJRVRBUllfQ01EKTtcbmRyaXZlcnMvbmZjL3N0LW5jaS9jb3JlLmM6MTMzOlx0bmRsYy1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZzdF9uY2lfb3BzLCBwcm90b2NvbHMsXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzNC1cdFx0XHRcdFx0cGh5X2hlYWRyb29tLCBwaHlfdGFpbHJvb20pO1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MTMzPXN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcdHZkZXYtXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXHRcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MTk2PXN0cnVjdCBuY2lfZGV2IHtcbi0tXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yNzQtLyogLS0tLS0gTkNJIERldmljZXMgLS0tLS0gKi9cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjI3NTpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMjc2LVx0XHRcdFx0ICAgIF9fdTMyIHN1cHBvcnRlZF9wcm90b2NvbHMsXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTExNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfb3BzIG5jaV9uZmNfb3BzID0ge1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTY4LS8qKlxubmV0L25mYy9uY2kvY29yZS5jOjExNjk6ICogbmNpX2FsbG9jYXRlX2RldmljZSAtIGFsbG9jYXRlIGEgbmV3IG5jaSBkZXZpY2Vcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTcwLSAqXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTExNzUtICovXG5uZXQvbmZjL25jaS9jb3JlLmM6MTE3NjpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxubmV0L25mYy9uY2kvY29yZS5jLTExNzctXHRcdFx0XHQgICAgX191MzIgc3VwcG9ydGVkX3Byb3RvY29scyxcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyNi19XG5uZXQvbmZjL25jaS9jb3JlLmM6MTIyNzpFWFBPUlRfU1lNQk9MKG5jaV9hbGxvY2F0ZV9kZXZpY2UpO1xubmV0L25mYy9uY2kvY29yZS5jLTEyMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBORkMgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkZDIGRyaXZlcnMgaW4gdGhpcyBrZXJuZWwuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgLiBUaGF0JiMzOTtzIGxpa2VseSBhIHZpcnR1YWwgb3IgZ2VuZXJpYyBORkMgZGV2aWNlIGRyaXZlciwgd2hpY2ggY291bGQgYmUgdXNlZnVsIGZvciBpbml0aWFsIHNldHVwIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBmcmFtZXdvcmsuIEFsc28sIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9gLCB3aGljaCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMgY29udHJvbGxlcnMuIEkgc2VlIHRoYXQgdGhlcmUgaXMgYSBVU0IgZHJpdmVyIGZvciB0aGUgbmZjbXJ2bDogYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLgoKTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jYCBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBiZWdpbiB3aXRoIGEgbW9yZSBhYnN0cmFjdCBvciBmb3VuZGF0aW9uYWwgZHJpdmVyIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW50ZXJmYWNlcyBhbmQgaG93IG90aGVyIG1vcmUgc3BlY2lmaWMgZHJpdmVycyBhcmUgYnVpbHQgdXBvbiBpdC4gVGhlbiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AgdG8gc2VlIGhvdyBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGludGVncmF0ZXMgaW50byB0aGlzIGRyaXZlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXG4gICA2Olx0ICogQm9uZ3N1IEplb24gXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxuICAxNzpcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxuICAxODpcdFx0XHRcdFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXG4gIDE5Olx0XHRcdFx0XHQgTkZDX1BST1RPX0ZFTElDQV9NQVNLIHwgXFxcbiAgMjA6XHRcdFx0XHRcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXG4gIDIxOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gIDIyOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gIDIzOlx0XG4gIDI0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG4gIDI1Olx0XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbiAgMjY6XHRcdHN0cnVjdCBtdXRleCBtdHg7XG4gIDI3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xuICAyODpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcbiAgMjk6XHRcdGJvb2wgcnVubmluZztcbiAgMzA6XHR9O1xuICAzMTpcdFxuICAzMjpcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiAgMzM6XHR7XG4gIDM0Olx0XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuICAzNTpcdFxuICAzNjpcdFx0dmRldi1cdTAwM2VydW5uaW5nID0gdHJ1ZTtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuICA0MTpcdHtcbiAgNDI6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNDU6XHRcdGtmcmVlX3NrYih2ZGV2LVx1MDAzZXNlbmRfYnVmZik7XG4gIDQ2Olx0XHR2ZGV2LVx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XG4gIDQ3Olx0XHR2ZGV2LVx1MDAzZXJ1bm5pbmcgPSBmYWxzZTtcbiAgNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gTkZDIERldmljZSBTdXBwb3J0IGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYHZpcnR1YWxfbmNpZGV2YCBpcyByZWdpc3RlcmVkIGFzIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZnVuY3Rpb25zIGxpa2UgYHN5el9vcGVuX2RldiR2aXJ0dWFsX25jaWRldmAgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBJIGNhbiBsZXZlcmFnZSBpdHMgZXhpc3RpbmcgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgYXV0b21hdGVkIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5IHdpdGhpbiB0aGlzIHZpcnR1YWwgTkZDIGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBib3RoIE5GQyBhbmQgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRvIHVuZGVyc3RhbmQgaG93IGB2aXJ0dWFsX25jaWRldmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQW5kLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLiBUaGF0JiMzOTtzIHRoZSBVU0IgZHJpdmVyIGZvciBNYXJ2ZWxsIE5GQzsgdGhlIE1hcnZlbGwgY2hpcHMgaGF2ZSBiZWVuIGFyb3VuZCBhIHdoaWxlLCBzbyBzZWVpbmcgdGhhdCBtYXkgb2ZmZXIgc29tZSBoaW50cyBhYm91dCBhcmNoaXRlY3R1cmUgb3Igb3RoZXIgZGVzaWduIGNob2ljZXMsIGFuZCBsaWtlbHkgcHJvdmlkZXMgYSBiYXNlbGluZSBvZiBmdW5jdGlvbmFsaXR5IHRvIHJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORkNcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcbm5ldC9uZmMvbmNpL0tjb25maWc6MTQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBVQVJUIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZS01LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEwPW5jaV9zcGkteSAmIzQzOz0gc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfTkNJX1NQSSkgJiM0Mzs9IG5jaV9zcGkub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtMTItXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICYjNDM7PSB1YXJ0Lm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICYjNDM7PSBuY2lfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZHJpdmVycyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gb3RoZXIgTkZDIGNvbXBvbmVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19OQ0lcbiAgIDM6XHRcdGRlcGVuZHMgb24gTkZDXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAgODpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIE5DSSBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xuICAxMTpcdFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZSAobmNpKS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkZDX05DSV9TUElcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4gIDE1Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBTUEkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAyMDpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgU2F5IHllcyBpZiB5b3UgdXNlIGFuIE5DSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBTUEkgbGluayBsYXllci5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkZDX05DSV9VQVJUXG4gIDI1Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFRUWVxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDI3Olx0XHRkZWZhdWx0IG5cbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgU2F5IHllcyBpZiB5b3UgdXNlIGFuIE5DSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBVQVJUIGxpbmsgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDIwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBORkMtcmVsYXRlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYE5GQ19WSVJUVUFMX05DSWAgc3ltYm9sLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgdGhlcmUsIGJ1dCBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZXR0ZXIgdG8gc3RhcnQgd2l0aCB0aGUgbG93LWhhbmdpbmcgZnJ1aXQgYW5kIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGlzIHZpcnR1YWwgTkNJIHN1cHBvcnQgaXMgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydHVhbF9uY2lkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcdCYjNDM7PSBzdDk1aGYvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVx0JiM0Mzs9IHZpcnR1YWxfbmNpZGV2Lm9cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXHRcdFx0XHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXHRcdFx0XHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2My1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc3LVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkxLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkzLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcdC5yZWFkID0gdmlydHVhbF9uY2lkZXZfcmVhZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk1Olx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NjpcdC5vcGVuID0gdmlydHVhbF9uY2lkZXZfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3Olx0LnJlbGVhc2UgPSB2aXJ0dWFsX25jaWRldl9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk4Olx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTk5LX07XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDMtXHQubmFtZSA9IFwmIzM0O3ZpcnR1YWxfbmNpXCYjMzQ7LFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XHQuZm9wcyA9IFx1MDAyNnZpcnR1YWxfbmNpZGV2X2ZvcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cdC5tb2RlID0gMDYwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmb3IgTkZDX1ZJUlRVQUxfTkNJKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBORkNfVklSVFVBTF9OQ0lgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvbiBjb3JlIE5GQyBpbmZyYXN0cnVjdHVyZSwgcGVyaGFwcyBzcGVjaWZpYyBjaGlwc2V0cyBvciBwbGF0Zm9ybSBkcml2ZXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIOKAkyBpcyB0aGlzIGZvciBhIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3RpbmcsIGVtdWxhdGluZyBhIHBoeXNpY2FsIHJlYWRlciwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBwcmVzZW5jZSBvZiAmIzM0O3ZpcnR1YWwmIzM0OyBzdWdnZXN0cyBpdCBtaWdodCBiZSBhIHNpbXVsYXRpb24gb3Igc29mdHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIEkmIzM5O2xsIGJlIHNjYW5uaW5nIGZvciBhbnkgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgTkZDLXJlbGF0ZWQgb3B0aW9ucy4gS2V5IHF1ZXN0aW9uczogV2hhdCBvdGhlciBORkMgZHJpdmVycyBvciBzdWJzeXN0ZW1zIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scywgbGlrZSBhIGRldmljZSB0cmVlIGJpbmRpbmcgb3IgYSBtb2R1bGUgbmFtZSB0aGF0IEkgc2hvdWxkIGtlZXAgaW4gbWluZD8gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIHN0YWNrIGFuZCB3aGF0IGl0cyBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXRoZXIgSSBuZWVkIHRvIHR3ZWFrIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIHdoZW4gZW5hYmxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTkZDIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNTIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLCBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiByZWxhdGVkIHRvIGFuIE5GQyBkcml2ZXIgb3IgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgTkZDIHN1YnN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHRoaXMgS2NvbmZpZyBhbGxvd3MgbWUgdG8gYmV0dGVyIHRhaWxvciBvdXIgc3lzdGVtIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTb255IFBvcnQtMTAwIGNoaXAgYmFzZWQgVVNCIGRldmljZXMgc3VjaCBhcyB0aGVcbiAgNDg6XHRcdCAgUkMtUzM4MCBkb25nbGUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXG4gIDU3Olx0XHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuICA1OTpcdFx0ICBtb2R1bGUuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL2ZkcC9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcJiMzNDtcbiAgNjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvcG41MzMvS2NvbmZpZ1wmIzM0O1xuICA2NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9taWNyb3JlYWQvS2NvbmZpZ1wmIzM0O1xuICA2NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcJiMzNDtcbiAgNjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvc3QyMW5mY2EvS2NvbmZpZ1wmIzM0O1xuICA2OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbmZjbXJ2bCBLY29uZmlnIEZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBNYXJ2ZWxsIE5GQyBkcml2ZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3RydWN0dXJlOiB0aGUgbWFpbiBLY29uZmlnIHN5bWJvbCBkZWZpbmluZyB0aGUgZHJpdmVyJiMzOTtzIGluY2x1c2lvbiwgZm9sbG93ZWQgYnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLCBhbmQgdGhlbiBwcm9iYWJseSBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpZiBhbnkgLSB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgZmxhZ3MsIG9yIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgZmVhdHVyZXMgdG8gZW5hYmxlLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoaW5ncyBsaWtlIHNlY3VyZSBlbGVtZW50cywgZGlmZmVyZW50IHJlYWRlci93cml0ZXIgbW9kZXMsIG9yIGlmIGl0IGV4cG9zZXMgYSBnZW5lcmljIE5GQyBpbnRlcmZhY2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIG90aGVyIE5GQyBkcml2ZXJzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGludGVyZXN0aW5nIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBORkMgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX01SVkxcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoZSBjb3JlIGRyaXZlciB0byBzdXBwb3J0IE1hcnZlbGwgTkZDIGRldmljZXMuXG4gICA2Olx0XG4gICA3Olx0XHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHN1cHBvcnRcbiAgIDg6XHRcdCAgTWFydmVsbCBORkMgZGV2aWNlIDg4OTcuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5GQ19NUlZMX1VTQlxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyXCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFVTQlxuICAxMzpcdFx0c2VsZWN0IE5GQ19NUlZMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlci5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZGV2aWNlczpcbiAgMTg6XHRcdCAgODg5Ny5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxuICAyMTpcdFx0ICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIE5GQ19NUlZMX1VBUlRcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXJcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgTkZDX05DSV9VQVJUXG4gIDI2Olx0XHRzZWxlY3QgTkZDX01SVkxcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlci5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRldmljZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTkZDIERyaXZlciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIgKGBORkNfTVJWTF9VU0JgKS4gSXQgbG9va3MgbGlrZSBpdCBuYXR1cmFsbHkgbGVhbnMgb24gdGhlIGBORkNfTkNJYCBhbmQgYFVTQmAgY29tcG9uZW50cyDigJMgbWFrZXMgc2Vuc2UuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyBgTkZDX1ZJUlRVQUxfTkNJYCB0aGF0IGhpbmdlcyBvbiBgTkZDX05DSWAuIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBzeXprYWxsZXImIzM5O3MgYmVlbiBwb3VuZGluZyBhd2F5IGF0IE5GQyBwcm90b2NvbHMsIGluY2x1ZGluZyBOQ0khCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGF0YSBmbG93OiBXaGVyZSBhcmUgd2UgY2FsbGluZyBgbmNpX3NlbmRfZGF0YWAsIGFuZCBob3cgZG9lcyB0aGUgY29kZSByZWFjaCBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgPyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmNpX3NlbmRfZGF0YWAuIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBPa2F5LCBub3cgSSBuZWVkIHRvIGFjdHVhbGx5ICpyZWFkKiBgbmNpX3NlbmRfZGF0YWAgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvZGF0YS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHRleGl0OlxuIDE3MjpcdFx0cmV0dXJuIHJjO1xuIDE3MzpcdH1cbiAxNzQ6XHRcbiAxNzU6XHQvKiBTZW5kIE5DSSBkYXRhICovXG4gMTc2Olx0aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNzc6XHR7XG4gMTc4Olx0XHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDE3OTpcdFx0aW50IHJjID0gMDtcbiAxODA6XHRcbiAxODE6XHRcdHByX2RlYnVnKFwmIzM0O2Nvbm5faWQgMHgleCwgcGxlbiAlZFxcblwmIzM0OywgY29ubl9pZCwgc2tiLVx1MDAzZWxlbik7XG4gMTgyOlx0XG4gMTgzOlx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuIDE4NDpcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAxODU6XHRcdFx0cmMgPSAtRVBST1RPO1xuIDE4NjpcdFx0XHRnb3RvIGZyZWVfZXhpdDtcbiAxODc6XHRcdH1cbiAxODg6XHRcbiAxODk6XHRcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXG4gMTkwOlx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gMTkxOlx0XHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gMTkyOlx0XHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiAxOTM6XHRcbiAxOTQ6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIDE5NTpcdFx0fSBlbHNlIHtcbiAxOTY6XHRcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4gMTk3Olx0XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbiAxOTg6XHRcdFx0aWYgKHJjKSB7XG4gMTk5Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwmIzM0Oyk7XG4gMjAwOlx0XHRcdFx0Z290byBmcmVlX2V4aXQ7XG4gMjAxOlx0XHRcdH1cbiAyMDI6XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIDIwNTpcdFx0cXVldWVfd29yayhuZGV2LVx1MDAzZXR4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXR4X3dvcmspO1xuIDIwNjpcdFxuIDIwNzpcdFx0Z290byBleGl0O1xuIDIwODpcdFxuIDIwOTpcdGZyZWVfZXhpdDpcbiAyMTA6XHRcdGtmcmVlX3NrYihza2IpO1xuIDIxMTpcdFxuIDIxMjpcdGV4aXQ6XG4gMjEzOlx0XHRyZXR1cm4gcmM7XG4gMjE0Olx0fVxuIDIxNTpcdEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XG4gMjE2Olx0XG4gMjE3Olx0LyogLS0tLS0tLS0tLS0tLS0tLS0gTkNJIFJYIERhdGEgLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAyMTg6XHRcbiAyMTk6XHRzdGF0aWMgdm9pZCBuY2lfYWRkX3J4X2RhdGFfZnJhZyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgYW5kIFBhdGNoIGluIE5GQyBOQ0kgRGF0YSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBORkMgTkNJIGRhdGEgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBuZWVkcyB0byBiZSBmcmFnbWVudGVkIGlzIGJhc2VkIG9uIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gLiAgSWYgdGhpcyB2YWx1ZSBpcyB6ZXJvICphbmQqIHRoZSBwYWNrZXQgbGVuZ3RoIChgc2tiLSZndDtsZW5gKSBpcyBncmVhdGVyIHRoYW4gemVybywgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCB3aGljaCBjYWxscyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLiBUaGUgY3JpdGljYWwgaXNzdWUgaXMsICpiZWZvcmUqIHRoaXMgcGF0Y2gsIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgZG9lc24mIzM5O3QgcHJvcGVybHkgaGFuZGxlIGEgYG1heF9wa3RfcGF5bG9hZF9sZW5gIG9mIHplcm8uIFRoZSBsb2dpYyBpbnNpZGUgdGhlIGZyYWdtZW50YXRpb24gbG9vcCB3b3VsZCBjYWxjdWxhdGUgYSBmcmFnbWVudCBsZW5ndGggb2YgemVybyByZXBlYXRlZGx5LCBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3AgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSB6ZXJvLWxlbmd0aCBTS0JzIGFuZCBuZXZlciBkZWNyZW1lbnRpbmcgdGhlIGB0b3RhbF9sZW5gLiAgVGhpcyBpcyBhIGRlZmluaXRlIGhhbmcgY29uZGl0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNyYXNoLgoKVGhlIHBhdGNoJiMzOTtzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGFkZHMgYSBjaGVjayB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCB0byBzZWUgaWYgYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVyby4gSWYgaXQgaXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHByZXZlbnRpbmcgdGhlIGxvb3AuICBUaGlzIGRpcmVjdGx5IG1pdGlnYXRlcyB0aGUgaGFuZy4KCk5vdywgd2hlcmUgY291bGQgYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAgYWN0dWFsbHkgYmUgemVybz8gVGhhdCYjMzk7cyB0aGUga2V5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYSBtYWxpY2lvdXMgb3IgY29ycnVwdGVkIHJlc3BvbnNlIG9yIHNldHVwIHBhY2tldCBjb3VsZCBwb3RlbnRpYWxseSBzZXQgdGhpcyB2YWx1ZSwgb3IgcGVyaGFwcyBpdCBjb3VsZCBiZSBtaXNjb25maWd1cmVkIHZpYSBhIHZpcnR1YWwgZGV2aWNlLCBVU0IgZGV2aWNlLCBvciBldmVuIGEgc2ltdWxhdGVkIE5GQ0MuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHZlY3Rvci4gQW5kIHJlbWVtYmVyLCB0aGUgY29kZSBpcyBleGVjdXRlZCB3aGVuIHNlbmRpbmcgZGF0YSBmcm9tIHVzZXJzcGFjZSBzb2NrZXRzLCBsb29wYmFjaywgb3IgYW55IHRyYW5zY2VpdmUgb3BlcmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGtub3cgTkZDIGFuZCBOQ0kgYXJlIHZpcnR1YWxpemVkIHZpYSBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIFVTQiBlbXVsYXRpb24gKGBDT05GSUdfTkZDX01SVkxfVVNCYCksIGFuZCBzb2NrZXQgaW50ZXJmYWNlcyAoZS5nLiwgQUZfTkZDIHJhdyBzb2NrZXQpLiBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZSByZWxldmFudCBjb2RlIGlzIGxvY2F0ZWQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBleHBsb2l0cy4KCk5vdywgd2hpY2ggc3ltYm9scyBzaG91bGQgSSBmb2N1cyBvbj8gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBpcyB0aGUgY29yZSBvZiB0aGUgZml4LCBidXQgaXQmIzM5O3MgKnN0YXRpYyouICBXYWl0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIGFsdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgaW4gYSBgLmNgIGZpbGUgYW5kIGNhbiBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguIFRvIGJlIHNhZmUsIGxldCYjMzk7cyBpbmNsdWRlIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgLiBgbmNpX3NlbmRfZGF0YWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBhbmQgaXQmIzM5O3MgdGhlIGRpcmVjdCBjYWxsZXIuIE90aGVyIGRpcmVjdCBlbnRyeXBvaW50cyBpbmNsdWRlIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfdG1fc2VuZGAsIGBuY2lfbmZjY19sb29wYmFja2AsIGFuZCBgbmNpX2hjaV9zZW5kX2RhdGFgLgoKVGhlcmVmb3JlLCBJIHRoaW5rIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcy4gVGhleSBhcmUgc3BlY2lmaWMgYW5kIG5vbi11YmlxdWl0b3VzLCB3aGljaCBpcyB3aGF0IEkgd2FudC4KCkZpbmFsbHksIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBgZGF0YS5vYCBpcyBwYXJ0IG9mIGBDT05GSUdfTkZDX05DSWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19ORkNgLCBzbyBhcyBsb25nIGFzIE5GQyBOQ0kgaXMgZW5hYmxlZCwgdGhpcyBjb2RlIGlzIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNwoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBORkMvTkNJIENvcmUgU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgcmV2aXNpdGVkIHRoZSBgbmV0L25mYy9uY2kvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE5GQyBOQ0kgc3VwcG9ydC4gSSBub3RlZCB0aGF0IGBORkNfTkNJYCBkZXBlbmRzIG9uIGBORkNgIGFuZCBpcyB0cmlzdGF0ZS4gRnVydGhlcm1vcmUsIHZpcnR1YWwgZGV2aWNlIGFuZCBVU0IgZGV2aWNlIGVtdWxhdGlvbiBkZXBlbmQgb24gYE5GQ19OQ0lgLiBJIHRoZW4gY29uZmlybWVkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIHRoZSBvcHRpb25hbCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAuICBJIGRvdWJsZS1jaGVja2VkIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBmb3JtYXQsIGVuc3VyaW5nIEkmIzM5O20gdXNpbmcgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6ICYjMzQ7TkZDJiMzNDssICYjMzQ7TkZDX05DSSYjMzQ7LgoKTm93IGZvciB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgVGhpcyBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3AgaWYgdGhlIHBheWxvYWQgbGVuZ3RoIGlzIHplcm8uICBUaGlzIGltcGFjdHMgdGhlIGRhdGEgZnJhZ21lbnRhdGlvbiBwYXRoIHdpdGhpbiB0aGUgTkZDL05DSSBjb3JlLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyBvciBVU0IgTkZDIGNvbnRyb2xsZXJzLiBUaGlzIG1lYW5zIGZ1enppbmcgY2FuIGRpcmVjdGx5IHRlc3QgZXJyb3IgaGFuZGxpbmcgYW5kIGlkZW50aWZ5IGFueSBvdGhlciBlZGdlIGNhc2VzIGluIE5DSSYjMzk7cyBib3VuZGFyeSBjb25kaXRpb25zLgoKVGhlcmVmb3JlLCBteSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBSZWFzb25pbmdgOiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIGZyYWdtZW50YXRpb24gcGF0aCBpbiB0aGUgTkZDL05DSSBjb3JlIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFkZGluZyB2YWxpZGF0aW9uIGZvciBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCBpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLCB3aGljaCBwcmV2aW91c2x5IGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcCBpZiB6ZXJvLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aXJ0dWFsIE5DSSBkZXZpY2VzIG9yIFVTQiBORkMgY29udHJvbGxlcnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O05GQyYjMzQ7LCAmIzM0O05GQ19OQ0kmIzM0O11gCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIGlzIDAgZHVyaW5nIE5DSSBUWCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBORkMvTkNJIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE5GQyBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKSBvciBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gTkNJIHBhY2tldCBmcmFnbWVudGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuYwppbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvZGF0YS5jCkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7CWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CiYjNDM7CQlyYyA9IC1FUFJPVE87CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtmcmFnc19xKTsKIAogCXdoaWxlICh0b3RhbF9sZW4pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBOQ0kgRGF0YSBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaC4gVGhlIHJlbGV2YW50IGNvZGUgc2VlbXMgdG8gYmUgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGxvb2sgYXQgdGhlIGZpbGUuIFRpbWUgdG8gZWl0aGVyIHdoaXAgb3V0IGByZWFkLWZpbGVgIG9yIGZpcmUgdXAgYGdyZXBwZXJgLCBkZXBlbmRpbmcgb24gd2hhdCYjMzk7cyBxdWlja2VzdCBhbmQgYXZhaWxhYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIEkgdGhpbmsgdGhlIGNydXggb2YgdGhlIGNoYW5nZXMgaXMgcHJvYmFibHkgYXJvdW5kIGxpbmUgMTE0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBUaW1lIHRvIHJlYWQgYXJvdW5kIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRpZiAoIWNvbm5faW5mbylcbiAgOTE6XHRcdFx0cmV0dXJuIC1FUFJPVE87XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4gIDk0Olx0fVxuICA5NTpcdEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAgOTg6XHRcdFx0XHRcdCAgIF9fdTggY29ubl9pZCxcbiAgOTk6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpIHtcbiAxMDA6XHRcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gMTAxOlx0XHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAxMDI6XHRcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiAxMDM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMTA0Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XG4gMTA1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XG4gMTA2Olx0XHRpbnQgZnJhZ19sZW47XG4gMTA3Olx0XHRpbnQgcmMgPSAwO1xuIDEwODpcdFxuIDEwOTpcdFx0cHJfZGVidWcoXCYjMzQ7Y29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXG5cJiMzNDssIGNvbm5faWQsIHRvdGFsX2xlbik7XG4gMTEwOlx0XG4gMTExOlx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuIDExMjpcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAxMTM6XHRcdFx0cmMgPSAtRVBST1RPO1xuIDExNDpcdFx0XHRnb3RvIGV4aXQ7XG4gMTE1Olx0XHR9XG4gMTE2Olx0XG4gMTE3Olx0XHRpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gMTE4Olx0XHRcdHJjID0gLUVQUk9UTztcbiAxMTk6XHRcdFx0Z290byBleGl0O1xuIDEyMDpcdFx0fVxuIDEyMTpcdFxuIDEyMjpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmZyYWdzX3EpO1xuIDEyMzpcdFxuIDEyNDpcdFx0d2hpbGUgKHRvdGFsX2xlbikge1xuIDEyNTpcdFx0XHRmcmFnX2xlbiA9XG4gMTI2Olx0XHRcdFx0bWluX3QoaW50LCB0b3RhbF9sZW4sIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiAxMjc6XHRcbiAxMjg6XHRcdFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXG4gMTI5Olx0XHRcdFx0XHRcdCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgZnJhZ19sZW4pLFxuIDEzMDpcdFx0XHRcdFx0XHQgR0ZQX0FUT01JQyk7XG4gMTMxOlx0XHRcdGlmIChza2JfZnJhZyA9PSBOVUxMKSB7XG4gMTMyOlx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuIDEzMzpcdFx0XHRcdGdvdG8gZnJlZV9leGl0O1xuIDEzNDpcdFx0XHR9XG4gMTM1Olx0XHRcdHNrYl9yZXNlcnZlKHNrYl9mcmFnLCBOQ0lfREFUQV9IRFJfU0laRSk7XG4gMTM2Olx0XG4gMTM3Olx0XHRcdC8qIGZpcnN0LCBjb3B5IHRoZSBkYXRhICovXG4gMTM4Olx0XHRcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xuIDEzOTpcdFxuIDE0MDpcdFx0XHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXG4gMTQxOlx0XHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYl9mcmFnLFxuIDE0MjpcdFx0XHRcdFx0ICAoKHRvdGFsX2xlbiA9PSBmcmFnX2xlbikgP1xuIDE0MzpcdFx0XHRcdFx0ICAgKE5DSV9QQkZfTEFTVCkgOiAoTkNJX1BCRl9DT05UKSkpO1xuIDE0NDpcdFxuIDE0NTpcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmZyYWdzX3EsIHNrYl9mcmFnKTtcbiAxNDY6XHRcbiAxNDc6XHRcdFx0ZGF0YSAmIzQzOz0gZnJhZ19sZW47XG4gMTQ4Olx0XHRcdHRvdGFsX2xlbiAtPSBmcmFnX2xlbjtcbiAxNDk6XHRcbiAxNTA6XHRcdFx0cHJfZGVidWcoXCYjMzQ7ZnJhZ19sZW4gJWQsIHJlbWFpbmluZyB0b3RhbF9sZW4gJWRcXG5cJiMzNDssXG4gMTUxOlx0XHRcdFx0IGZyYWdfbGVuLCB0b3RhbF9sZW4pO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFxuIDE1NDpcdFx0LyogcXVldWUgYWxsIGZyYWdtZW50cyBhdG9taWNhbGx5ICovXG4gMTU1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xuIDE1NjpcdFxuIDE1NzpcdFx0d2hpbGUgKChza2JfZnJhZyA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZnJhZ3NfcSkpICE9IE5VTEwpXG4gMTU4Olx0XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2JfZnJhZyk7XG4gMTU5Olx0XG4gMTYwOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5kZXYtXHUwMDNldHhfcS5sb2NrLCBmbGFncyk7XG4gMTYxOlx0XG4gMTYyOlx0XHQvKiBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi9cbiAxNjM6XHRcdGtmcmVlX3NrYihza2IpO1xuIDE2NDpcdFxuIDE2NTpcdFx0Z290byBleGl0O1xuIDE2NjpcdFxuIDE2NzpcdGZyZWVfZXhpdDpcbiAxNjg6XHRcdHdoaWxlICgoc2tiX2ZyYWcgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmZyYWdzX3EpKSAhPSBOVUxMKVxuIDE2OTpcdFx0XHRrZnJlZV9za2Ioc2tiX2ZyYWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBJbmZpbml0ZSBMb29wKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gbG9vayBhdCBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYC4gSWYgdGhhdCB2YWx1ZSBoYXBwZW5zIHRvIGJlIHplcm8sIHdoaWNoIGlzIGEgcG9zc2liaWxpdHksIHRoZW4gdXNpbmcgYG1pbl90YCB3aXRoIGB0b3RhbF9sZW5gIHdvdWxkIHJlc3VsdCBpbiBhIHplcm8gdmFsdWUgZm9yIHRoZSBmcmFnbWVudCBsZW5ndGgsIGFzc3VtaW5nIGB0b3RhbF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGF0JiMzOTtzIGEgcHJvYmxlbSBiZWNhdXNlIHRoZSBuZXh0IGxpbmUgY2FsY3VsYXRlcyBgdG90YWxfbGVuIC09IDBgLiBUaGlzIG1lYW5zIHRoYXQgYHRvdGFsX2xlbmAgd291bGQgbmV2ZXIgZGVjcmVtZW50LCBjcmVhdGluZyBhbiBpbmZpbml0ZSBsb29wLiBJJiMzOTttIGd1ZXNzaW5nIFN5emthbGxlciBwcm9iYWJseSBmb3VuZCBhIGh1bmcgdGFzayBvciBzb2Z0IGxvY2t1cCBzdGVtbWluZyBmcm9tIGV4YWN0bHkgdGhpcyBzY2VuYXJpby4gVG8gdmVyaWZ5IGFuZCB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlLCBJIHNob3VsZCBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIHVzZSBgZ2l0IGxvZ2AgdG8gaG9wZWZ1bGx5IHVuY292ZXIgdGhlIHNwZWNpZmljIGlzc3VlIHRoaXMgY29kZSBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGhhbmdzIG9yIGxvb3BzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfcXVldWVfdHhfZGF0YV9mcmFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmM9OTU9RVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvZGF0YS5jLTk4LVx0XHRcdFx0ICAgX191OCBjb25uX2lkLFxuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYz0xNzY9aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVx0XHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXHRcdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIE5GQyBEcml2ZXImIzM5O3MgRGF0YSBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdpdGggYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAuIElmIHRoYXQgdmFsdWUgaXMgemVybywgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgaW4gYSB2dWxuZXJhYmxlIHN0YXRlOgoKYGBgYwp3aGlsZSAodG90YWxfbGVuKSB7CiAgICBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4pOyAvLyBmcmFnX2xlbiA9IDAKICAgIHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgMCksIEdGUF9BVE9NSUMpOwogICAgLi4uCiAgICB0b3RhbF9sZW4gLT0gMDsKYGBgCgpFc3NlbnRpYWxseSwgd2UmIzM5O2QgaGF2ZSBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgYWxsb2NhdGluZyBTS0JzIChzb2NrZXQgYnVmZmVyKSB1bnRpbCB0aGUgc3lzdGVtIHJhbiBvdXQgb2YgbWVtb3J5IG9yIGxvY2tlZCB1cC4gTm90IGdvb2QuCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazoKCmBgYGMKCWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CgkJcmMgPSAtRVBST1RPOwoJCWdvdG8gZXhpdDsKCX0KYGBgCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCAmIzM0O0RvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXM/JiMzNDsgVGhlIHVzdWFsIHN1c3BlY3RzOiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QuIE5vcGUsIG5vcGUsIGFuZCAqZGVmaW5pdGVseSogbm9wZS4gSXQmIzM5O3MgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgKGAtRVBST1RPYCkgYW5kIGV4aXRpbmcsIHNvIHdlJiMzOTtyZSBzYWZlIG9uIHRoYXQgZnJvbnQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgd2hlcmUgYGV4aXQ6YCBsZWFkcy4gUGVla2luZyBhdCBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIHJldmVhbHM6CgpgYGBjCmV4aXQ6CglyZXR1cm4gcmM7CmBgYAoKQW5kIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgbmNpX3NlbmRfZGF0YWA6CgpgYGBjCmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpCnsKCS4uLgoJcmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpOwoJaWYgKHJjKSB7CgkJLi4uCgl9CmBgYAoKU28sIHRoZSBlcnJvciBwcm9wYWdhdGVzIGJhY2sgdXAgdGhlIHN0YWNrLiBUaGlzIGlzIGEgc2Vuc2libGUgYW5kIHNlY3VyZSBoYW5kbGluZyBvZiB0aGUgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGJlaW5nIHplcm8uIFRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgSSB3b3VsZCBuZWVkIHRvIGNhcmVmdWxseSByZWFkIGxpbmVzIDE3MC0yMjAgb2YgYG5ldC9uZmMvbmNpL2RhdGEuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IGF0IGZpcnN0IGdsYW5jZSwgdGhpcyBwYXRjaCBhcHBlYXJzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2RhdGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0ZXhpdDpcbiAxNzI6XHRcdHJldHVybiByYztcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0LyogU2VuZCBOQ0kgZGF0YSAqL1xuIDE3NjpcdGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4gMTc3Olx0e1xuIDE3ODpcdFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiAxNzk6XHRcdGludCByYyA9IDA7XG4gMTgwOlx0XG4gMTgxOlx0XHRwcl9kZWJ1ZyhcJiMzNDtjb25uX2lkIDB4JXgsIHBsZW4gJWRcXG5cJiMzNDssIGNvbm5faWQsIHNrYi1cdTAwM2VsZW4pO1xuIDE4MjpcdFxuIDE4MzpcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbiAxODQ6XHRcdGlmICghY29ubl9pbmZvKSB7XG4gMTg1Olx0XHRcdHJjID0gLUVQUk9UTztcbiAxODY6XHRcdFx0Z290byBmcmVlX2V4aXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xuIDE5MDpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuIDE5MTpcdFx0XHQvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqL1xuIDE5MjpcdFx0XHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2IsIE5DSV9QQkZfTEFTVCk7XG4gMTkzOlx0XG4gMTk0Olx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNldHhfcSwgc2tiKTtcbiAxOTU6XHRcdH0gZWxzZSB7XG4gMTk2Olx0XHRcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xuIDE5NzpcdFx0XHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XG4gMTk4Olx0XHRcdGlmIChyYykge1xuIDE5OTpcdFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXG5cJiMzNDspO1xuIDIwMDpcdFx0XHRcdGdvdG8gZnJlZV9leGl0O1xuIDIwMTpcdFx0XHR9XG4gMjAyOlx0XHR9XG4gMjAzOlx0XG4gMjA0Olx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcbiAyMDU6XHRcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdGdvdG8gZXhpdDtcbiAyMDg6XHRcbiAyMDk6XHRmcmVlX2V4aXQ6XG4gMjEwOlx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyMTE6XHRcbiAyMTI6XHRleGl0OlxuIDIxMzpcdFx0cmV0dXJuIHJjO1xuIDIxNDpcdH1cbiAyMTU6XHRFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xuIDIxNjpcdFxuIDIxNzpcdC8qIC0tLS0tLS0tLS0tLS0tLS0tIE5DSSBSWCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovXG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIHZvaWQgbmNpX2FkZF9yeF9kYXRhX2ZyYWcoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgVGhvcm91Z2ggUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgS01TQU4gaXMgdGhhdCBpdCYjMzk7cyBub3QgbmVlZGVkIGhlcmUsIGFuZCBJJiMzOTt2ZSBub3cgbWV0aWN1bG91c2x5IHJldmlld2VkIHRoZSBzaXR1YXRpb24gdG8gY29uZmlybSB0aGF0LgoKRmlyc3RseSwgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItJmd0O2xlbmApIGlzIHplcm8gYW5kIHRoZSBtYXhpbXVtIHBheWxvYWQgbGVuZ3RoIChgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCkgaXMgYWxzbyB6ZXJvLCB0aGUgb3JpZ2luYWwgY29kZSwgZXZlbiB3aXRoIHRoZSBwYXRjaCwgd291bGQgY29ycmVjdGx5IGhhbmRsZSB0aGlzIOKAkyBlc3NlbnRpYWxseSBhbGxvd2luZyB0aGUgaGVhZGVyIHRvIGJlIGFkZGVkLiBJZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgYW5kIG1heCBwYXlsb2FkIGlzIHplcm8sIHRoZSBwYXRjaCBjb3JyZWN0bHkgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIGdldHRpbmcgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBpc3N1ZS4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSB0eXBpY2FsIGFyZWFzIHRoYXQgS01TQU4gd291bGQgY2F0Y2g6IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIHNvIG5vIGluZm8tbGVha3MgdGhlcmUuIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgc28gbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBsb2dpYyBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVyczsgaW5zdGVhZCwgdGhlIGxvZ2ljIGV4cGxpY2l0bHkgcHJldmVudHMgaXQgaW4gdGhpcyBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoaXMgcGF0Y2ggYWN0dWFsbHkgKnByZXZlbnRzKiBhbiBpbmZpbml0ZSBsb29wIG9yIG90aGVyIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB0aGUgbWF4IHBheWxvYWQgbGVuZ3RoIGlzIHplcm8uCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBjaGFuZ2VzIGRvbiYjMzk7dCBwcmltYXJpbHkgcmlzayB0aGUgc29ydHMgb2YgYnVncyBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoOiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhcyBleHBlY3RlZC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoICpwcmV2ZW50cyogYSBidWcgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYmVoYXZpb3Igb2YgY29uY2VybiwgYW5kIHNpbmNlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgY2hlY2tzIGRvbiYjMzk7dCBhcHBseSwgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQuIFRoZSBjb2RlIGNoYW5nZXMgZG9uJiMzOTt0IGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgT05MWSBiZSBkZXRlY3RlZCBieSBLTVNBTi4KCldpdGggdGhpcyBsZXZlbCBvZiBjbGFyaXR5IGFuZCBjZXJ0YWludHksIEkmIzM5O20gY29tZm9ydGFibGUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5Ljg5NDkwMTY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjUzNDcxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzXCIsXG4gICAgXCJuY2lfc2VuZF9kYXRhXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgbm9uLXplcm8gYmVmb3JlIGVudGVyaW5nIGEgcGFja2V0IGZyYWdtZW50YXRpb24gbG9vcC4gV2hlbiBgbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVybywgdGhlIGxvb3Agd291bGQgZW50ZXIgYW4gaW5maW5pdGUgY3ljbGUgKHNvZnQgbG9ja3VwIC8gT09NKSByZXBlYXRlZGx5IHRyeWluZyB0byBmcmFnbWVudCB0aGUgYnVmZmVyIHdpdGggYSBmcmFnbWVudCBzaXplIG9mIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gaXMgMCBkdXJpbmcgTkNJIFRYIHBhY2tldCBmcmFnbWVudGF0aW9uLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIE5GQy9OQ0kgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggTkZDIHNvY2tldHMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHZpcnR1YWwgTkNJIGRldmljZXMgKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpIG9yIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucyBpbiBOQ0kgcGFja2V0IGZyYWdtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5Ljg5NDkwNzExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNjM2NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjRiZGM5ZDViOTAxZDA0ZGQ0NDJlM2ZkNzExZjQwYzNjNWEwMTE5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcXG5pbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL2RhdGEuY1xcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xcbkBAIC0xMTQsNiArMTE0LDExIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4rXFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuIFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZnJhZ3NfcSk7XFxuIFxcbiBcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMyODI5MTE5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjgyODM0ODk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGJkYzlkNWI5MDFkMDRkZDQ0MmUzZmQ3MTFmNDBjM2M1YTAxMTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICsxMTQsMTEgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK1x0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0XHRyYyA9IC1FUFJPVE87XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMyODI5MzMxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ2MDg4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBORkMgRHJpdmVyIFJlZ3Jlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgbmV3IGBpZmAgc3RhdGVtZW50OiBgaWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikgeyByYyA9IC1FUFJPVE87IGdvdG8gZXhpdDsgfWAuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIHByb3RvY29sIHZpb2xhdGlvbiBpc3N1ZSBkdXJpbmcgTkZDIGRhdGEgdHJhbnNtaXNzaW9uLCBwb3RlbnRpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmcmFnbWVudGVkIHBhY2tldHMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciwgc28gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDExNCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYC4gSSB3aWxsIHVzZSBteSB0b29scyAtIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCAtIHRvIHVuZGVyc3RhbmQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBhbmQgaG93IGl0J3MgdXNlZC4gQmFzZWQgb24gdGhlIG5hbWUgaXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSBtYXhpbXVtIHBheWxvYWQgc2l6ZSB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGNhbiBoYW5kbGUuIElmIHRoaXMgaXMgemVybywgdGhhdCdzIG5vdCByaWdodC4gVGhpcyBjaGVjayBtYWtlcyBzdXJlIHRoYXQgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBpZiBub3QsIHJlamVjdHMgdGhlIHBhY2tldC4gVGhpcyB3aWxsIHByZXZlbnQgYmFkIG1lbW9yeSB3cml0ZXMsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZmllbGQgaXMgc2V0IGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgKmNvdWxkKiBiZSB6ZXJvLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBjb25uX2luZm9gIHN0cnVjdHVyZSBpcyBjcnVjaWFsLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgbWlzc2luZyBpbml0aWFsaXphdGlvbiBzb21ld2hlcmUgb3IgaWYgdGhlcmUncyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGlzbid0IGJlaW5nIG5lZ290aWF0ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTcuNjc0Mzg0NjU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxMDE6XFx0XFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDI6XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gMTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEwNDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XFxuIDEwNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XFxuIDEwNjpcXHRcXHRpbnQgZnJhZ19sZW47XFxuIDEwNzpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHRvdGFsX2xlbik7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDExMjpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxMTM6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoIWNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxMTg6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTk6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuIDEyNTpcXHRcXHRcXHRmcmFnX2xlbiA9XFxuIDEyNjpcXHRcXHRcXHRcXHRtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0XFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbiAxMzA6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9BVE9NSUMpO1xcbiAxMzE6XFx0XFx0XFx0aWYgKHNrYl9mcmFnID09IE5VTEwpIHtcXG4gMTMyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gMTMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxMzQ6XFx0XFx0XFx0fVxcbiAxMzU6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiX2ZyYWcsIE5DSV9EQVRBX0hEUl9TSVpFKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0LyogZmlyc3QsIGNvcHkgdGhlIGRhdGEgKi9cXG4gMTM4OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRcXHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXFxuIDE0MTpcXHRcXHRcXHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcXG4gMTQyOlxcdFxcdFxcdFxcdFxcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cXG4gMTQzOlxcdFxcdFxcdFxcdFxcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2ZnJhZ3NfcSwgc2tiX2ZyYWcpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHRkYXRhICs9IGZyYWdfbGVuO1xcbiAxNDg6XFx0XFx0XFx0dG90YWxfbGVuIC09IGZyYWdfbGVuO1xcbiAxNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjU3LjY3NDQ1NjU3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDc0NTk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gTkZDIE5DSSBEYXRhIEZyYWdtZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB3aGlsZSAodG90YWxfbGVuKWAgbG9vcC4uLiBJIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBmcmFnbWVudCBsZW5ndGggY2FsY3VsYXRpb246IGBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7YC4gSWYgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBzb21laG93IGVuZHMgdXAgYmVpbmcgemVybywgdGhlbiBgZnJhZ19sZW5gIHdpbGwgYWxzbyBiZSB6ZXJvLiBDb25zZXF1ZW50bHksIGB0b3RhbF9sZW4gLT0gZnJhZ19sZW5gIGJlY29tZXMgYHRvdGFsX2xlbiAtPSAwYCwgYW5kIHdlJ3JlIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AhIFRoYXQncyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgZGVuaWFsIG9mIHNlcnZpY2Ugd2FpdGluZyB0byBoYXBwZW4uXG5cbkFoLCB0aGUgcGF0Y2ghIExvb2tzIGxpa2UgaXQgYW50aWNpcGF0ZXMgdGhpcy4gVGhlIGFkZGVkIGNoZWNrIGBpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKWAgaW1tZWRpYXRlbHkgZXhpdHMgd2l0aCBgLUVQUk9UT2AgaWYgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8uIFNtYXJ0IOKAkyBhIHNpbXBsZSwgZWZmZWN0aXZlIHNhZmVndWFyZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGlzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGZlZWRzIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCB0byBnaXZlIGEgcmVhbCBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb2Rl4oCZcyByZWFjaGFiaWxpdHkuIEknbGwgc2VhcmNoIGZvciBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCdzIHVzZWQuIEFuZCwgd2hpbGUgSSdtIGF0IGl0LCBJJ2xsIGxvb2sgZm9yIGBuY2lfc2VuZF9kYXRhYC4gR290dGEgZ2V0IGEgZmlybSBncmFzcCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0ncyBkYXRhIGZsb3cgdG8gYXNzZXNzIHRoZSByZWFsIGltcGFjdCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzEwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDAuNTIxOTE5MDk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ5NjAyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvZGF0YS5jPTk1PUVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxubmV0L25mYy9uY2kvZGF0YS5jLTk2LVxcbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2RhdGEuYy05OC1cXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmM9MTc2PWludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVxcdFxcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xcbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XFx0XFx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpO1xcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXFx0XFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjAyLjY4Njg4NTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU0NjMyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgVHJhbnNtaXNzaW9uIFBhdGggaW4gdGhlIE5DSSBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGludGVybmFsIHRvIHRoYXQgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QgZm9yIGZyYWdtZW50IHF1ZXVlaW5nLiBJIGtub3cgYG5jaV9zZW5kX2RhdGFgIGNhbGxzIGl0LiBOb3csIHdoYXQncyBjYWxsaW5nICp0aGF0KiBmdW5jdGlvbiwgYG5jaV9zZW5kX2RhdGFgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwIHRvIHRoaXMgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoIHdvcmtzIHdpdGhpbiB0aGUgTkNJIHN1Yi1zeXN0ZW0uIEl0J3MgdGltZSB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRob3NlIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNC42ODIzNTA5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzI2NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfc2VuZF9kYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xNTk9c3RhdGljIHZvaWQgZmRwX25jaV9zZXRfZGF0YV9wa3RfY291bnRlcihzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYy0xNzMtICogZmlsZSBpcyBzZWdtZW50ZWQgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZSBwYWNrZXRzLiBJZiB3ZSBnaXZlIHRoZVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoxNzQ6ICogd2hvbGUgZmlybXdhcmUgdG8gbmNpX3NlbmRfZGF0YSBpdCB3aWxsIHNlZ21lbnQgaXQgYW5kIGl0IHdpbGwgc2V0XFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTE3NS0gKiB0aGUgUEJGIGZsYWcgdG8gMHgwMSBzbyB3ZSBuZWVkIHRvIGRvIHRoZSBzZWdtZW50YXRpb24gaGVyZS5cXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xODE9c3RhdGljIGludCBmZHBfbmNpX3NlbmRfcGF0Y2goc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGNvbm5faWQsIHU4IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMjIzLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoyMjQ6XFx0XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyNS1cXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTM3MD1pbnQgbmNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3UxNiBvcGNvZGUsIF9fdTggcGxlbiwgY29uc3Qgdm9pZCAqcGF5bG9hZCk7XFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzcxOmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM3Mi1pbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0zOTc9c3RydWN0IG5jaV9sb29wYmFja19kYXRhIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDEtXFxubmV0L25mYy9uY2kvY29yZS5jOjQwMjpzdGF0aWMgdm9pZCBuY2lfc2VuZF9kYXRhX3JlcShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqb3B0KVxcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDMte1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTQwNS1cXG5uZXQvbmZjL25jaS9jb3JlLmM6NDA2OlxcdG5jaV9zZW5kX2RhdGEobmRldiwgZGF0YS1cXHUwMDNlY29ubl9pZCwgZGF0YS1cXHUwMDNlZGF0YSk7XFxubmV0L25mYy9uY2kvY29yZS5jLTQwNy19XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9NDI1PWludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTQ2NC1cXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCA9IGNvbm5faWQ7XFxubmV0L25mYy9uY2kvY29yZS5jOjQ2NTpcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZsb29wYmFja19kYXRhLFxcbm5ldC9uZmMvbmNpL2NvcmUuYy00NjYtXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTA0MD1zdGF0aWMgaW50IG5jaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEwNzAtXFxubmV0L25mYy9uY2kvY29yZS5jOjEwNzE6XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA3Mi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTA3OD1zdGF0aWMgaW50IG5jaV90bV9zZW5kKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEwODItXFxubmV0L25mYy9uY2kvY29yZS5jOjEwODM6XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA4NC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmM9OTc9c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYy0xNzUtLyogU2VuZCBOQ0kgZGF0YSAqL1xcbm5ldC9uZmMvbmNpL2RhdGEuYzoxNzY6aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9kYXRhLmMtMTc3LXtcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYy0yMTQtfVxcbm5ldC9uZmMvbmNpL2RhdGEuYzoyMTU6RVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTtcXG5uZXQvbmZjL25jaS9kYXRhLmMtMjE2LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9MTQyPXN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xNzgtXFxubmV0L25mYy9uY2kvaGNpLmM6MTc5OlxcdFxcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCwgc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0xODAtXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNi43Njk2MjIyOTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDM1MjYzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5GQyBEYXRhIFRyYW5zbWlzc2lvbiBQYXRod2F5cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgc2VudCBpbiB0aGUgTkZDIHN0YWNrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLiBJdCBzZWVtcyBgbmNpX3NlbmRfZGF0YWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQgcm91dGVzIGRhdGEgdGhyb3VnaCBzZXZlcmFsIHBhdGh3YXlzIGRlcGVuZGluZyBvbiB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLiBgbmNpX3RyYW5zY2VpdmVgIGlzIHRoZSBvYnZpb3VzIG9uZSBmb3IgYSBzdGFuZGFyZCBORkMgdHJhbnNjZWl2ZSwgd2hpY2ggbGlrZWx5IGJvaWxzIGRvd24gdG8gYSByYXcgc29ja2V0LCBgc2VuZG1zZ2AsIG9yIHBvdGVudGlhbGx5IG5ldGxpbmsgZm9yIGNvbW11bmljYXRpb24uIFRoZW4gdGhlcmUncyBgbmNpX3RtX3NlbmRgLCB3aGljaCBpcyBkZWRpY2F0ZWQgZm9yIE5GQyB0YXJnZXQgbW9kZSBvcGVyYXRpb25zLiBXZSd2ZSBnb3QgYG5jaV9uZmNjX2xvb3BiYWNrYCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgYSBuZXRsaW5rLWJhc2VkIGxvb3BiYWNrIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcsIG5pY2UgZm9yIHF1aWNrIGNoZWNrcy4gQW5kIGZpbmFsbHksIGBuY2lfaGNpX3NlbmRfZGF0YWAsIHdoaWNoIHNlZW1zIHJlbGF0ZWQgdG8gdGhlIEhDSSBsYXllci5cblxuSSdtIGFsc28gcG9uZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHZpcnR1YWwgTkZDIGRldmljZXMuIE9mIGNvdXJzZSwgdGhhdCdzIGEga2V5IGFyZWEgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGFzIHN1cHBvcnQgZm9yIHZpcnR1YWwgTkZDIGFuZCBldmVuIHJhdyBzb2NrZXRzLCB3aGljaCBpcyBncmVhdC4gU3BlY2lmaWNhbGx5LCBpdCBjYW4gdXRpbGl6ZSB2aXJ0dWFsIE5GQyBkcml2ZXJzIGxpa2UgYG5mY3NpbWAgd2hpY2ggSSByZWNvZ25pemUsIGl0J3MgdW5kZXIgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvbmZjc2ltLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgVVNCIE5GQyBkb25nbGUgZW11bGF0aW9uIHN1cHBvcnQgdG9vIHZpYSBzeXprYWxsZXIsIGxpa2Ugd2l0aCBgcG41MzNfdXNiYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHdpdGggcmVhbCBoYXJkd2FyZSB0b28uXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG5mY3NpbWAgbGV2ZXJhZ2VzIHRoZSBOQ0kgbGF5ZXIuIE15IGluc3RpbmN0IGlzLCBpdCBoYXMgdG8sIGJ1dCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGVyZSBOQ0kgaXMgYWN0dWFsbHkgdXNlZC4gTmVlZCB0byBiZSBzdXJlIG9mIHRoZSBleGFjdCBhcmNoaXRlY3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTAuMjA0ODg5MTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMTU5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9hbGxvY2F0ZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvZmRwL2ZkcC5jPTY5OT1pbnQgZmRwX25jaV9wcm9iZShzdHJ1Y3QgZmRwX2kyY19waHkgKnBoeSwgY29uc3Qgc3RydWN0IG5mY19waHlfb3BzICpwaHlfb3BzLFxcbi0tXFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMC1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZHBfcHJvcF9vcHMpIFxcdTAwM2UgTkNJX01BWF9QUk9QUklFVEFSWV9DTUQpO1xcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzo3MzE6XFx0bmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNm5jaV9vcHMsIHByb3RvY29scywgdHhfaGVhZHJvb20sXFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMi1cXHRcXHRcXHRcXHQgICB0eF90YWlscm9vbSk7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYz05Mj1zdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpuZmNtcnZsX25jaV9yZWdpc3Rlcl9kZXYoZW51bSBuZmNtcnZsX3BoeSBwaHksXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDAtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQxOlxcdHByaXYtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZuZmNtcnZsX25jaV9vcHMsIHByb3RvY29scyxcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDItXFx0XFx0XFx0XFx0XFx0IGhlYWRyb29tLCB0YWlscm9vbSk7XFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQzLVxcdGlmICghcHJpdi1cXHUwMDNlbmRldikge1xcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jOjE0NDpcXHRcXHRuZmNfZXJyKGRldiwgXFxcIm5jaV9hbGxvY2F0ZV9kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDUtXFx0XFx0cmMgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmM9MTM1PWludCBueHBfbmNpX3Byb2JlKHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvY29yZS5jLTE2Mi1cXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYzoxNjM6XFx0aW5mby1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNm54cF9uY2lfb3BzLCBOWFBfTkNJX05GQ19QUk9UT0NPTFMsXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmMtMTY0LVxcdFxcdFxcdFxcdFxcdCBOWFBfTkNJX0hEUl9MRU4sIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9MTYwPWludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTc2LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jOjE3NzpcXHRpbmZvLVxcdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcXHUwMDI2czNmd3JuNV9uY2lfb3BzLFxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTE3OC1cXHRcXHRTM0ZXUk41X05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvc3QtbmNpL2NvcmUuYz0xMTI9aW50IHN0X25jaV9wcm9iZShzdHJ1Y3QgbGx0X25kbGMgKm5kbGMsIGludCBwaHlfaGVhZHJvb20sXFxuLS1cXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzMi1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShzdF9uY2lfcHJvcF9vcHMpIFxcdTAwM2UgTkNJX01BWF9QUk9QUklFVEFSWV9DTUQpO1xcbmRyaXZlcnMvbmZjL3N0LW5jaS9jb3JlLmM6MTMzOlxcdG5kbGMtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZzdF9uY2lfb3BzLCBwcm90b2NvbHMsXFxuZHJpdmVycy9uZmMvc3QtbmNpL2NvcmUuYy0xMzQtXFx0XFx0XFx0XFx0XFx0cGh5X2hlYWRyb29tLCBwaHlfdGFpbHJvb20pO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0xMzM9c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XFx0dmRldi1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cXHRcXHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MTk2PXN0cnVjdCBuY2lfZGV2IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI3NC0vKiAtLS0tLSBOQ0kgRGV2aWNlcyAtLS0tLSAqL1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjI3NTpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI3Ni1cXHRcXHRcXHRcXHQgICAgX191MzIgc3VwcG9ydGVkX3Byb3RvY29scyxcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTY4LS8qKlxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMTY5OiAqIG5jaV9hbGxvY2F0ZV9kZXZpY2UgLSBhbGxvY2F0ZSBhIG5ldyBuY2kgZGV2aWNlXFxubmV0L25mYy9uY2kvY29yZS5jLTExNzAtICpcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTc1LSAqL1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMTc2OnN0cnVjdCBuY2lfZGV2ICpuY2lfYWxsb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBuY2lfb3BzICpvcHMsXFxubmV0L25mYy9uY2kvY29yZS5jLTExNzctXFx0XFx0XFx0XFx0ICAgIF9fdTMyIHN1cHBvcnRlZF9wcm90b2NvbHMsXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyNi19XFxubmV0L25mYy9uY2kvY29yZS5jOjEyMjc6RVhQT1JUX1NZTUJPTChuY2lfYWxsb2NhdGVfZGV2aWNlKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTEuODY1MDU1NDY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzI4NTgyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBORkMgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBORkMgZHJpdmVycyBpbiB0aGlzIGtlcm5lbC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AuIFRoYXQncyBsaWtlbHkgYSB2aXJ0dWFsIG9yIGdlbmVyaWMgTkZDIGRldmljZSBkcml2ZXIsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bCBmb3IgaW5pdGlhbCBzZXR1cCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZnJhbWV3b3JrLiBBbHNvLCBJJ20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9gLCB3aGljaCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMgY29udHJvbGxlcnMuIEkgc2VlIHRoYXQgdGhlcmUgaXMgYSBVU0IgZHJpdmVyIGZvciB0aGUgbmZjbXJ2bDogYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgIGZpcnN0LiBJdCdzIG9mdGVuIGhlbHBmdWwgdG8gYmVnaW4gd2l0aCBhIG1vcmUgYWJzdHJhY3Qgb3IgZm91bmRhdGlvbmFsIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGludGVyZmFjZXMgYW5kIGhvdyBvdGhlciBtb3JlIHNwZWNpZmljIGRyaXZlcnMgYXJlIGJ1aWx0IHVwb24gaXQuIFRoZW4gSSdsbCBjaGVjayBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AgdG8gc2VlIGhvdyBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGludGVncmF0ZXMgaW50byB0aGlzIGRyaXZlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTQuMDM3OTE2NzI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIFZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0aW9uIGRyaXZlclxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXFxuICAgNjpcXHQgKiBCb25nc3UgSmVvbiBcXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cXHUwMDNlXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXQuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmZjL25jaV9jb3JlLmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxcbiAgMTc6XFx0I2RlZmluZSBWSVJUVUFMX05GQ19QUk9UT0NPTFNcXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX01JRkFSRV9NQVNLIHwgXFxcXFxcbiAgMTk6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19GRUxJQ0FfTUFTSyB8IFxcXFxcXG4gIDIwOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXFxcXG4gIDIxOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXFxcXFxcbiAgMjI6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19JU08xNTY5M19NQVNLKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcXG4gIDI1OlxcdFxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xcbiAgMjY6XFx0XFx0c3RydWN0IG11dGV4IG10eDtcXG4gIDI3OlxcdFxcdHN0cnVjdCBza19idWZmICpzZW5kX2J1ZmY7XFxuICAyODpcXHRcXHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9oZWFkIHdxO1xcbiAgMjk6XFx0XFx0Ym9vbCBydW5uaW5nO1xcbiAgMzA6XFx0fTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0dmRldi1cXHUwMDNlcnVubmluZyA9IHRydWU7XFxuICAzNzpcXHRcXHRyZXR1cm4gMDtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuICA0NTpcXHRcXHRrZnJlZV9za2IodmRldi1cXHUwMDNlc2VuZF9idWZmKTtcXG4gIDQ2OlxcdFxcdHZkZXYtXFx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XFxuICA0NzpcXHRcXHR2ZGV2LVxcdTAwM2VydW5uaW5nID0gZmFsc2U7XFxuICA0ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNC4wMzc5OTY3MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxOTAwMzMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBORkMgRGV2aWNlIFN1cHBvcnQgYW5kIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGB2aXJ0dWFsX25jaWRldmAgaXMgcmVnaXN0ZXJlZCBhcyBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGZ1bmN0aW9ucyBsaWtlIGBzeXpfb3Blbl9kZXYkdmlydHVhbF9uY2lkZXZgIG1lYW5zIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBJIGNhbiBsZXZlcmFnZSBpdHMgZXhpc3RpbmcgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgYXV0b21hdGVkIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5IHdpdGhpbiB0aGlzIHZpcnR1YWwgTkZDIGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBib3RoIE5GQyBhbmQgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRvIHVuZGVyc3RhbmQgaG93IGB2aXJ0dWFsX25jaWRldmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQW5kLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLiBUaGF0J3MgdGhlIFVTQiBkcml2ZXIgZm9yIE1hcnZlbGwgTkZDOyB0aGUgTWFydmVsbCBjaGlwcyBoYXZlIGJlZW4gYXJvdW5kIGEgd2hpbGUsIHNvIHNlZWluZyB0aGF0IG1heSBvZmZlciBzb21lIGhpbnRzIGFib3V0IGFyY2hpdGVjdHVyZSBvciBvdGhlciBkZXNpZ24gY2hvaWNlcywgYW5kIGxpa2VseSBwcm92aWRlcyBhIGJhc2VsaW5lIG9mIGZ1bmN0aW9uYWxpdHkgdG8gcmVmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNi4zNTcwMDI4NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQyNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG5uZXQvbmZjL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE1LVxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgKz0gc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICs9IG5jaV9zcGkub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEzPW5jaV91YXJ0LXkgKz0gdWFydC5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgKz0gbmNpX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNi40MDYwNTMxNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQxNDg3OTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBORkMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBrbm93IHRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCBpdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGZvciB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGRyaXZlcnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSB0aGlua2luZyBJJ2xsIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogZW5hYmxlbWVudCBmbGFncywgbWF5YmUgc29tZSBib2FyZC1zcGVjaWZpYyBvdmVycmlkZXMsIGFuZCBob3BlZnVsbHkgY2xlYXIgZGVwZW5kZW5jaWVzIG9uIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhpZXJhcmNoeSBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyIE5GQyBjb21wb25lbnRzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBoZWFkYWNoZXMhKSBhd2FpdC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBtYWdpYyBoYXBwZW5zLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgTkZDIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxOC44MjA5MzUzOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBTYXkgeWVzIGlmIHlvdSB1c2UgYW4gTkNJIGRyaXZlciB0aGF0IHJlcXVpcmVzIFNQSSBsaW5rIGxheWVyLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkZDX05DSV9VQVJUXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMjc6XFx0XFx0ZGVmYXVsdCBuXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFNheSB5ZXMgaWYgeW91IHVzZSBhbiBOQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgVUFSVCBsaW5rIGxheWVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxOC44MjEwMTMwODJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAyNTcyNTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgaW4gS2NvbmZpZyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgTkZDLXJlbGF0ZWQsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25mYy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGBORkNfVklSVFVBTF9OQ0lgIHN5bWJvbC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQncyBsaWtlbHkgZGVmaW5lZCB0aGVyZSwgYnV0IEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmV0dGVyIHRvIHN0YXJ0IHdpdGggdGhlIGxvdy1oYW5naW5nIGZydWl0IGFuZCBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGlzIHZpcnR1YWwgTkNJIHN1cHBvcnQgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjIwLjg0Njc0MTAzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NjE2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbF9uY2lkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz03Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwMy1cXHQubmFtZSA9IFxcXCJ2aXJ0dWFsX25jaVxcXCIsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XFx0LmZvcHMgPSBcXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cXHQubW9kZSA9IDA2MDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjIwLjg5NDYwOTI4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDg0MDI2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmb3IgTkZDX1ZJUlRVQUxfTkNJKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgTkZDX1ZJUlRVQUxfTkNJYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvbiBjb3JlIE5GQyBpbmZyYXN0cnVjdHVyZSwgcGVyaGFwcyBzcGVjaWZpYyBjaGlwc2V0cyBvciBwbGF0Zm9ybSBkcml2ZXJzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2Ug4oCTIGlzIHRoaXMgZm9yIGEgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdGluZywgZW11bGF0aW5nIGEgcGh5c2ljYWwgcmVhZGVyLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIHByZXNlbmNlIG9mIFwidmlydHVhbFwiIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGEgc2ltdWxhdGlvbiBvciBzb2Z0d2FyZSBhYnN0cmFjdGlvbiBsYXllci4gSSdsbCBiZSBzY2FubmluZyBmb3IgYW55IGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIE5GQy1yZWxhdGVkIG9wdGlvbnMuIEtleSBxdWVzdGlvbnM6IFdoYXQgb3RoZXIgTkZDIGRyaXZlcnMgb3Igc3Vic3lzdGVtcyBkb2VzIGl0IGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIHN5bWJvbHMsIGxpa2UgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIG9yIGEgbW9kdWxlIG5hbWUgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQ/IFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIHN0YWNrIGFuZCB3aGF0IGl0cyBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXRoZXIgSSBuZWVkIHRvIHR3ZWFrIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIHdoZW4gZW5hYmxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjMuMzc4NjM4NTM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyMy40MjYwMjU4ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNzMzNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBORkMgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA1Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZSwgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBkZXBlbmRlbmN5IGRlZmluaXRpb24gcmVsYXRlZCB0byBhbiBORkMgZHJpdmVyIG9yIGZlYXR1cmUuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgTkZDIHN1YnN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHRoaXMgS2NvbmZpZyBhbGxvd3MgbWUgdG8gYmV0dGVyIHRhaWxvciBvdXIgc3lzdGVtIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgYXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjI1LjczMzM2NDkwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxcbiAgNDg6XFx0XFx0ICBSQy1TMzgwIGRvbmdsZS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxcbiAgNTc6XFx0XFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcXG4gIDU5OlxcdFxcdCAgbW9kdWxlLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvZmRwL0tjb25maWdcXFwiXFxuICA2NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcXFwiXFxuICA2NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTMzL0tjb25maWdcXFwiXFxuICA2NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL21pY3JvcmVhZC9LY29uZmlnXFxcIlxcbiAgNjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcXFwiXFxuICA2ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0MjFuZmNhL0tjb25maWdcXFwiXFxuICA2OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyNS43MzM0NDQzMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ5NTkwNzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBuZmNtcnZsIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBNYXJ2ZWxsIE5GQyBkcml2ZXIuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdHJ1Y3R1cmU6IHRoZSBtYWluIEtjb25maWcgc3ltYm9sIGRlZmluaW5nIHRoZSBkcml2ZXIncyBpbmNsdXNpb24sIGZvbGxvd2VkIGJ5IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcywgYW5kIHRoZW4gcHJvYmFibHkgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaWYgYW55IC0gdGhpbmdzIGxpa2UgZGVidWdnaW5nIGZsYWdzLCBvciBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGZlYXR1cmVzIHRvIGVuYWJsZS4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoaW5ncyBsaWtlIHNlY3VyZSBlbGVtZW50cywgZGlmZmVyZW50IHJlYWRlci93cml0ZXIgbW9kZXMsIG9yIGlmIGl0IGV4cG9zZXMgYSBnZW5lcmljIE5GQyBpbnRlcmZhY2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIG90aGVyIE5GQyBkcml2ZXJzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGludGVyZXN0aW5nIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBORkMgc3Vic3lzdGVtLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTMxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozMi4yMjkzNTM3NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkZDX01SVkxcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoZSBjb3JlIGRyaXZlciB0byBzdXBwb3J0IE1hcnZlbGwgTkZDIGRldmljZXMuXFxuICAgNjpcXHRcXG4gICA3OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydFxcbiAgIDg6XFx0XFx0ICBNYXJ2ZWxsIE5GQyBkZXZpY2UgODg5Ny5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5GQ19NUlZMX1VTQlxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDEzOlxcdFxcdHNlbGVjdCBORkNfTVJWTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZGV2aWNlczpcXG4gIDE4OlxcdFxcdCAgODg5Ny5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyXFxuICAyMTpcXHRcXHQgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIE5GQ19NUlZMX1VBUlRcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IE5GQ19OQ0lfVUFSVFxcbiAgMjY6XFx0XFx0c2VsZWN0IE5GQ19NUlZMXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXIuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRldmljZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MzIuMjI5NDE3ODE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NTg3MDY0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIERyaXZlciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyIChgTkZDX01SVkxfVVNCYCkuIEl0IGxvb2tzIGxpa2UgaXQgbmF0dXJhbGx5IGxlYW5zIG9uIHRoZSBgTkZDX05DSWAgYW5kIGBVU0JgIGNvbXBvbmVudHMg4oCTIG1ha2VzIHNlbnNlLiBBbmQgdGhlbiwgdGhlcmUncyBgTkZDX1ZJUlRVQUxfTkNJYCB0aGF0IGhpbmdlcyBvbiBgTkZDX05DSWAuIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBzeXprYWxsZXIncyBiZWVuIHBvdW5kaW5nIGF3YXkgYXQgTkZDIHByb3RvY29scywgaW5jbHVkaW5nIE5DSSFcblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdzogV2hlcmUgYXJlIHdlIGNhbGxpbmcgYG5jaV9zZW5kX2RhdGFgLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgcmVhY2ggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYD8gTGV0J3Mgc3RhcnQgd2l0aCBgbmNpX3NlbmRfZGF0YWAuIFJpZ2h0LCB0aGF0J3MgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIE9rYXksIG5vdyBJIG5lZWQgdG8gYWN0dWFsbHkgKnJlYWQqIGBuY2lfc2VuZF9kYXRhYCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjM1LjA4ODEyNzE3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9kYXRhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0ZXhpdDpcXG4gMTcyOlxcdFxcdHJldHVybiByYztcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0LyogU2VuZCBOQ0kgZGF0YSAqL1xcbiAxNzY6XFx0aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIDE3OTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCBwbGVuICVkXFxcXG5cXFwiLCBjb25uX2lkLCBza2ItXFx1MDAzZWxlbik7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDE4NDpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxODU6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxODY6XFx0XFx0XFx0Z290byBmcmVlX2V4aXQ7XFxuIDE4NzpcXHRcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXFxuIDE5MDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XFxuIDE5MTpcXHRcXHRcXHQvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqL1xcbiAxOTI6XFx0XFx0XFx0bmNpX3B1c2hfZGF0YV9oZHIobmRldiwgY29ubl9pZCwgc2tiLCBOQ0lfUEJGX0xBU1QpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNldHhfcSwgc2tiKTtcXG4gMTk1OlxcdFxcdH0gZWxzZSB7XFxuIDE5NjpcXHRcXHRcXHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cXG4gMTk3OlxcdFxcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcXG4gMTk4OlxcdFxcdFxcdGlmIChyYykge1xcbiAxOTk6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXFxcblxcXCIpO1xcbiAyMDA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2V4aXQ7XFxuIDIwMTpcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHR9XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcXG4gMjA1OlxcdFxcdHF1ZXVlX3dvcmsobmRldi1cXHUwMDNldHhfd3EsIFxcdTAwMjZuZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0Z290byBleGl0O1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRmcmVlX2V4aXQ6XFxuIDIxMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0ZXhpdDpcXG4gMjEzOlxcdFxcdHJldHVybiByYztcXG4gMjE0OlxcdH1cXG4gMjE1OlxcdEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdC8qIC0tLS0tLS0tLS0tLS0tLS0tIE5DSSBSWCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovXFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyB2b2lkIG5jaV9hZGRfcnhfZGF0YV9mcmFnKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozNS4wODgyMDAxOTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODE2OTc3NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGFuZCBQYXRjaCBpbiBORkMgTkNJIERhdGEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgTkZDIE5DSSBkYXRhIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjaGVjayB0byBzZWUgaWYgYSBwYWNrZXQgbmVlZHMgdG8gYmUgZnJhZ21lbnRlZCBpcyBiYXNlZCBvbiBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gLiAgSWYgdGhpcyB2YWx1ZSBpcyB6ZXJvICphbmQqIHRoZSBwYWNrZXQgbGVuZ3RoIChgc2tiLVx1MDAzZWxlbmApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3ZSBlbmQgdXAgaW4gdGhlIGBlbHNlYCBicmFuY2gsIHdoaWNoIGNhbGxzIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AuIFRoZSBjcml0aWNhbCBpc3N1ZSBpcywgKmJlZm9yZSogdGhpcyBwYXRjaCwgYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBkb2Vzbid0IHByb3Blcmx5IGhhbmRsZSBhIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBvZiB6ZXJvLiBUaGUgbG9naWMgaW5zaWRlIHRoZSBmcmFnbWVudGF0aW9uIGxvb3Agd291bGQgY2FsY3VsYXRlIGEgZnJhZ21lbnQgbGVuZ3RoIG9mIHplcm8gcmVwZWF0ZWRseSwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIGF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgemVyby1sZW5ndGggU0tCcyBhbmQgbmV2ZXIgZGVjcmVtZW50aW5nIHRoZSBgdG90YWxfbGVuYC4gIFRoaXMgaXMgYSBkZWZpbml0ZSBoYW5nIGNvbmRpdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBjcmFzaC5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIHRvIHNlZSBpZiBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8uIElmIGl0IGlzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlLCBwcmV2ZW50aW5nIHRoZSBsb29wLiAgVGhpcyBkaXJlY3RseSBtaXRpZ2F0ZXMgdGhlIGhhbmcuXG5cbk5vdywgd2hlcmUgY291bGQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBhY3R1YWxseSBiZSB6ZXJvPyBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGEgbWFsaWNpb3VzIG9yIGNvcnJ1cHRlZCByZXNwb25zZSBvciBzZXR1cCBwYWNrZXQgY291bGQgcG90ZW50aWFsbHkgc2V0IHRoaXMgdmFsdWUsIG9yIHBlcmhhcHMgaXQgY291bGQgYmUgbWlzY29uZmlndXJlZCB2aWEgYSB2aXJ0dWFsIGRldmljZSwgVVNCIGRldmljZSwgb3IgZXZlbiBhIHNpbXVsYXRlZCBORkNDLiBUaGlzIGlzIHRoZSBjcml0aWNhbCB2ZWN0b3IuIEFuZCByZW1lbWJlciwgdGhlIGNvZGUgaXMgZXhlY3V0ZWQgd2hlbiBzZW5kaW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2Ugc29ja2V0cywgbG9vcGJhY2ssIG9yIGFueSB0cmFuc2NlaXZlIG9wZXJhdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGtub3cgTkZDIGFuZCBOQ0kgYXJlIHZpcnR1YWxpemVkIHZpYSBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIFVTQiBlbXVsYXRpb24gKGBDT05GSUdfTkZDX01SVkxfVVNCYCksIGFuZCBzb2NrZXQgaW50ZXJmYWNlcyAoZS5nLiwgQUZfTkZDIHJhdyBzb2NrZXQpLiBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZSByZWxldmFudCBjb2RlIGlzIGxvY2F0ZWQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIGV4cGxvaXRzLlxuXG5Ob3csIHdoaWNoIHN5bWJvbHMgc2hvdWxkIEkgZm9jdXMgb24/IGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCwgYnV0IGl0J3MgKnN0YXRpYyouICBXYWl0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIGFsdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIGluIGEgYC5jYCBmaWxlIGFuZCBjYW4gaGF2ZSBhIHN5bWJvbCBpbiB2bWxpbnV4LiBUbyBiZSBzYWZlLCBsZXQncyBpbmNsdWRlIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgLiBgbmNpX3NlbmRfZGF0YWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBhbmQgaXQncyB0aGUgZGlyZWN0IGNhbGxlci4gT3RoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIGluY2x1ZGUgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV90bV9zZW5kYCwgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYW5kIGBuY2lfaGNpX3NlbmRfZGF0YWAuXG5cblRoZXJlZm9yZSwgSSB0aGluayBib3RoIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgYW5kIGBuY2lfc2VuZF9kYXRhYCBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMuIFRoZXkgYXJlIHNwZWNpZmljIGFuZCBub24tdWJpcXVpdG91cywgd2hpY2ggaXMgd2hhdCBJIHdhbnQuXG5cbkZpbmFsbHksIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBgZGF0YS5vYCBpcyBwYXJ0IG9mIGBDT05GSUdfTkZDX05DSWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19ORkNgLCBzbyBhcyBsb25nIGFzIE5GQyBOQ0kgaXMgZW5hYmxlZCwgdGhpcyBjb2RlIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDMuMjU3OTc5ODc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0ODMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL0tjb25maWctNS1cXG5uZXQvbmZjL0tjb25maWc6NjptZW51Y29uZmlnIE5GQ1xcbm5ldC9uZmMvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDMuNDI4NDc5NDMxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxMDcxNDA1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBORkMvTkNJIENvcmUgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIHJldmlzaXRlZCB0aGUgYG5ldC9uZmMvbmNpL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBORkMgTkNJIHN1cHBvcnQuIEkgbm90ZWQgdGhhdCBgTkZDX05DSWAgZGVwZW5kcyBvbiBgTkZDYCBhbmQgaXMgdHJpc3RhdGUuIEZ1cnRoZXJtb3JlLCB2aXJ0dWFsIGRldmljZSBhbmQgVVNCIGRldmljZSBlbXVsYXRpb24gZGVwZW5kIG9uIGBORkNfTkNJYC4gSSB0aGVuIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX05GQ2AsIGBDT05GSUdfTkZDX05DSWAsIGFuZCB0aGUgb3B0aW9uYWwgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLiAgSSBkb3VibGUtY2hlY2tlZCB0aGUgXCJFbmFibGVDb25maWdzXCIgZm9ybWF0LCBlbnN1cmluZyBJJ20gdXNpbmcgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6IFwiTkZDXCIsIFwiTkZDX05DSVwiLlxuXG5Ob3cgZm9yIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wIGlmIHRoZSBwYXlsb2FkIGxlbmd0aCBpcyB6ZXJvLiAgVGhpcyBpbXBhY3RzIHRoZSBkYXRhIGZyYWdtZW50YXRpb24gcGF0aCB3aXRoaW4gdGhlIE5GQy9OQ0kgY29yZSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHZpcnR1YWwgTkNJIGRldmljZXMgb3IgVVNCIE5GQyBjb250cm9sbGVycy4gVGhpcyBtZWFucyBmdXp6aW5nIGNhbiBkaXJlY3RseSB0ZXN0IGVycm9yIGhhbmRsaW5nIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgZWRnZSBjYXNlcyBpbiBOQ0kncyBib3VuZGFyeSBjb25kaXRpb25zLlxuXG5UaGVyZWZvcmUsIG15IGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYFJlYXNvbmluZ2A6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgZnJhZ21lbnRhdGlvbiBwYXRoIGluIHRoZSBORkMvTkNJIGNvcmUgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHZhbGlkYXRpb24gZm9yIGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCwgd2hpY2ggcHJldmlvdXNseSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaWYgemVyby4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmlydHVhbCBOQ0kgZGV2aWNlcyBvciBVU0IgTkZDIGNvbnRyb2xsZXJzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIiwgXCJuY2lfc2VuZF9kYXRhXCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk5GQ1wiLCBcIk5GQ19OQ0lcIl1gXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTM3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo0OC41MzU2MjMwODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfcXVldWVfdHhfZGF0YV9mcmFnc1wiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKCkgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIGlzIDAgZHVyaW5nIE5DSSBUWCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBORkMvTkNJIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE5GQyBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKSBvciBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gTkNJIHBhY2tldCBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo0OC42MTE3OTc1NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTM2NTY0NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDguNjEyNDU3ODE3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc1MzU4OTc5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGJkYzlkNWI5MDFkMDRkZDQ0MmUzZmQ3MTFmNDBjM2M1YTAxMTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICsxMTQsMTEgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK1x0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0XHRyYyA9IC1FUFJPVE87XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjQ4LjYxMjQ1ODg4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDIwMjIxODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZDIE5DSSBEYXRhIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSByZWxldmFudCBjb2RlIHNlZW1zIHRvIGJlIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBsb29rIGF0IHRoZSBmaWxlLiBUaW1lIHRvIGVpdGhlciB3aGlwIG91dCBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCwgZGVwZW5kaW5nIG9uIHdoYXQncyBxdWlja2VzdCBhbmQgYXZhaWxhYmxlLiBMZXQncyBzZWUuLi4gSSB0aGluayB0aGUgY3J1eCBvZiB0aGUgY2hhbmdlcyBpcyBwcm9iYWJseSBhcm91bmQgbGluZSAxMTQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbi4gVGltZSB0byByZWFkIGFyb3VuZCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjUzLjYzMjY4MzYwMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9kYXRhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0aWYgKCFjb25uX2luZm8pXFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0cmV0dXJuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuICA5ODpcXHRcXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuICA5OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XFxuIDEwMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxMDE6XFx0XFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDI6XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gMTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEwNDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XFxuIDEwNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XFxuIDEwNjpcXHRcXHRpbnQgZnJhZ19sZW47XFxuIDEwNzpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHRvdGFsX2xlbik7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDExMjpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxMTM6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoIWNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxMTg6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTk6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuIDEyNTpcXHRcXHRcXHRmcmFnX2xlbiA9XFxuIDEyNjpcXHRcXHRcXHRcXHRtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0XFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbiAxMzA6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9BVE9NSUMpO1xcbiAxMzE6XFx0XFx0XFx0aWYgKHNrYl9mcmFnID09IE5VTEwpIHtcXG4gMTMyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gMTMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxMzQ6XFx0XFx0XFx0fVxcbiAxMzU6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiX2ZyYWcsIE5DSV9EQVRBX0hEUl9TSVpFKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0LyogZmlyc3QsIGNvcHkgdGhlIGRhdGEgKi9cXG4gMTM4OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRcXHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXFxuIDE0MTpcXHRcXHRcXHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcXG4gMTQyOlxcdFxcdFxcdFxcdFxcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cXG4gMTQzOlxcdFxcdFxcdFxcdFxcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2ZnJhZ3NfcSwgc2tiX2ZyYWcpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHRkYXRhICs9IGZyYWdfbGVuO1xcbiAxNDg6XFx0XFx0XFx0dG90YWxfbGVuIC09IGZyYWdfbGVuO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZnJhZ19sZW4gJWQsIHJlbWFpbmluZyB0b3RhbF9sZW4gJWRcXFxcblxcXCIsXFxuIDE1MTpcXHRcXHRcXHRcXHQgZnJhZ19sZW4sIHRvdGFsX2xlbik7XFxuIDE1MjpcXHRcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdC8qIHF1ZXVlIGFsbCBmcmFnbWVudHMgYXRvbWljYWxseSAqL1xcbiAxNTU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHR3aGlsZSAoKHNrYl9mcmFnID0gX19za2JfZGVxdWV1ZShcXHUwMDI2ZnJhZ3NfcSkpICE9IE5VTEwpXFxuIDE1ODpcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZuZGV2LVxcdTAwM2V0eF9xLCBza2JfZnJhZyk7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi9cXG4gMTYzOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRnb3RvIGV4aXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdGZyZWVfZXhpdDpcXG4gMTY4OlxcdFxcdHdoaWxlICgoc2tiX2ZyYWcgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZmcmFnc19xKSkgIT0gTlVMTClcXG4gMTY5OlxcdFxcdFxcdGtmcmVlX3NrYihza2JfZnJhZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjUzLjYzMjc3OTcyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyMTgyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBJbmZpbml0ZSBMb29wKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIGxvb2sgYXQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYC4gSWYgdGhhdCB2YWx1ZSBoYXBwZW5zIHRvIGJlIHplcm8sIHdoaWNoIGlzIGEgcG9zc2liaWxpdHksIHRoZW4gdXNpbmcgYG1pbl90YCB3aXRoIGB0b3RhbF9sZW5gIHdvdWxkIHJlc3VsdCBpbiBhIHplcm8gdmFsdWUgZm9yIHRoZSBmcmFnbWVudCBsZW5ndGgsIGFzc3VtaW5nIGB0b3RhbF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGF0J3MgYSBwcm9ibGVtIGJlY2F1c2UgdGhlIG5leHQgbGluZSBjYWxjdWxhdGVzIGB0b3RhbF9sZW4gLT0gMGAuIFRoaXMgbWVhbnMgdGhhdCBgdG90YWxfbGVuYCB3b3VsZCBuZXZlciBkZWNyZW1lbnQsIGNyZWF0aW5nIGFuIGluZmluaXRlIGxvb3AuIEknbSBndWVzc2luZyBTeXprYWxsZXIgcHJvYmFibHkgZm91bmQgYSBodW5nIHRhc2sgb3Igc29mdCBsb2NrdXAgc3RlbW1pbmcgZnJvbSBleGFjdGx5IHRoaXMgc2NlbmFyaW8uIFRvIHZlcmlmeSBhbmQgdW5kZXJzdGFuZCB0aGUgcm9vdCBjYXVzZSwgSSBzaG91bGQgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2xsIHVzZSBgZ2l0IGxvZ2AgdG8gaG9wZWZ1bGx5IHVuY292ZXIgdGhlIHNwZWNpZmljIGlzc3VlIHRoaXMgY29kZSBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGhhbmdzIG9yIGxvb3BzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTUuOTA0OTY1NjY4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA0MDgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL2RhdGEuYz05NT1FWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cXG5uZXQvbmZjL25jaS9kYXRhLmM6OTc6c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9kYXRhLmMtOTgtXFx0XFx0XFx0XFx0ICAgX191OCBjb25uX2lkLFxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jPTE3Nj1pbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jLTE5Ni1cXHRcXHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cXG5uZXQvbmZjL25jaS9kYXRhLmM6MTk3OlxcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk4LVxcdFxcdGlmIChyYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo1Ni4xODUzODA5NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcxODc3OTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgRHJpdmVyJ3MgRGF0YSBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyB3aXRoIGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAuIElmIHRoYXQgdmFsdWUgaXMgemVybywgd2UndmUgZ290IGEgcHJvYmxlbS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBpbiBhIHZ1bG5lcmFibGUgc3RhdGU6XG5cbmBgYGNcbndoaWxlICh0b3RhbF9sZW4pIHtcbiAgICBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7IC8vIGZyYWdfbGVuID0gMFxuICAgIHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LCAoTkNJX0RBVEFfSERSX1NJWkUgKyAwKSwgR0ZQX0FUT01JQyk7XG4gICAgLi4uXG4gICAgdG90YWxfbGVuIC09IDA7XG5gYGBcblxuRXNzZW50aWFsbHksIHdlJ2QgaGF2ZSBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgYWxsb2NhdGluZyBTS0JzIChzb2NrZXQgYnVmZmVyKSB1bnRpbCB0aGUgc3lzdGVtIHJhbiBvdXQgb2YgbWVtb3J5IG9yIGxvY2tlZCB1cC4gTm90IGdvb2QuXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOlxuXG5gYGBjXG5cdGlmICghY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcblx0XHRyYyA9IC1FUFJPVE87XG5cdFx0Z290byBleGl0O1xuXHR9XG5gYGBcblxuTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgXCJEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzP1wiIFRoZSB1c3VhbCBzdXNwZWN0czogdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QuIE5vcGUsIG5vcGUsIGFuZCAqZGVmaW5pdGVseSogbm9wZS4gSXQncyByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSAoYC1FUFJPVE9gKSBhbmQgZXhpdGluZywgc28gd2UncmUgc2FmZSBvbiB0aGF0IGZyb250LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB3aGVyZSBgZXhpdDpgIGxlYWRzLiBQZWVraW5nIGF0IGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgcmV2ZWFsczpcblxuYGBgY1xuZXhpdDpcblx0cmV0dXJuIHJjO1xuYGBgXG5cbkFuZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG5jaV9zZW5kX2RhdGFgOlxuXG5gYGBjXG5pbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxue1xuXHQuLi5cblx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpO1xuXHRpZiAocmMpIHtcblx0XHQuLi5cblx0fVxuYGBgXG5cblNvLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyBiYWNrIHVwIHRoZSBzdGFjay4gVGhpcyBpcyBhIHNlbnNpYmxlIGFuZCBzZWN1cmUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBiZWluZyB6ZXJvLiBUbyBiZSBjb21wbGV0ZWx5IGNlcnRhaW4sIEkgd291bGQgbmVlZCB0byBjYXJlZnVsbHkgcmVhZCBsaW5lcyAxNzAtMjIwIG9mIGBuZXQvbmZjL25jaS9kYXRhLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIHRoaXMgcGF0Y2ggYXBwZWFycyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MDQxNjQyNjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdGV4aXQ6XFxuIDE3MjpcXHRcXHRyZXR1cm4gcmM7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdC8qIFNlbmQgTkNJIGRhdGEgKi9cXG4gMTc2OlxcdGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE3NzpcXHR7XFxuIDE3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxNzk6XFx0XFx0aW50IHJjID0gMDtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0cHJfZGVidWcoXFxcImNvbm5faWQgMHgleCwgcGxlbiAlZFxcXFxuXFxcIiwgY29ubl9pZCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xcbiAxODQ6XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4gMTg1OlxcdFxcdFxcdHJjID0gLUVQUk9UTztcXG4gMTg2OlxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xcbiAxOTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxOTE6XFx0XFx0XFx0Lyogbm8gbmVlZCB0byBmcmFnbWVudCBwYWNrZXQgKi9cXG4gMTkyOlxcdFxcdFxcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EsIHNrYik7XFxuIDE5NTpcXHRcXHR9IGVsc2Uge1xcbiAxOTY6XFx0XFx0XFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXFxuIDE5NzpcXHRcXHRcXHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuIDE5ODpcXHRcXHRcXHRpZiAocmMpIHtcXG4gMTk5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGZyYWdtZW50IHR4IGRhdGEgcGFja2V0XFxcXG5cXFwiKTtcXG4gMjAwOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAyMDE6XFx0XFx0XFx0fVxcbiAyMDI6XFx0XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCA9IGNvbm5faWQ7XFxuIDIwNTpcXHRcXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXR4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNldHhfd29yayk7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdGdvdG8gZXhpdDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0ZnJlZV9leGl0OlxcbiAyMTA6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdGV4aXQ6XFxuIDIxMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xcbiAyMTY6XFx0XFxuIDIxNzpcXHQvKiAtLS0tLS0tLS0tLS0tLS0tLSBOQ0kgUlggRGF0YSAtLS0tLS0tLS0tLS0tLS0tLSAqL1xcbiAyMTg6XFx0XFxuIDIxOTpcXHRzdGF0aWMgdm9pZCBuY2lfYWRkX3J4X2RhdGFfZnJhZyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDAuOTA0MjQ2OTUzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyNDQwNzYxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBUaG9yb3VnaCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgS01TQU4gaXMgdGhhdCBpdCdzIG5vdCBuZWVkZWQgaGVyZSwgYW5kIEkndmUgbm93IG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGUgc2l0dWF0aW9uIHRvIGNvbmZpcm0gdGhhdC5cblxuRmlyc3RseSwgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItXHUwMDNlbGVuYCkgaXMgemVybyBhbmQgdGhlIG1heGltdW0gcGF5bG9hZCBsZW5ndGggKGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmApIGlzIGFsc28gemVybywgdGhlIG9yaWdpbmFsIGNvZGUsIGV2ZW4gd2l0aCB0aGUgcGF0Y2gsIHdvdWxkIGNvcnJlY3RseSBoYW5kbGUgdGhpcyDigJMgZXNzZW50aWFsbHkgYWxsb3dpbmcgdGhlIGhlYWRlciB0byBiZSBhZGRlZC4gSWYgdGhlIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBtYXggcGF5bG9hZCBpcyB6ZXJvLCB0aGUgcGF0Y2ggY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgaXNzdWUuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHR5cGljYWwgYXJlYXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaDogbm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gbm8gaW5mby1sZWFrcyB0aGVyZS4gYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHNvIG5vIHJlbGlhbmNlIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUncyBubyB3YXkgdGhlIGxvZ2ljIGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzOyBpbnN0ZWFkLCB0aGUgbG9naWMgZXhwbGljaXRseSBwcmV2ZW50cyBpdCBpbiB0aGlzIHNwZWNpZmljIGVkZ2UgY2FzZS4gVGhpcyBwYXRjaCBhY3R1YWxseSAqcHJldmVudHMqIGFuIGluZmluaXRlIGxvb3Agb3Igb3RoZXIgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciB3aGVuIHRoZSBtYXggcGF5bG9hZCBsZW5ndGggaXMgemVyby5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBjaGFuZ2VzIGRvbid0IHByaW1hcmlseSByaXNrIHRoZSBzb3J0cyBvZiBidWdzIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMgd291bGQgY2F0Y2g6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gVGhlIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGFzIGV4cGVjdGVkLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBwcmV2ZW50cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCAqcHJldmVudHMqIGEgYnVnIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYmVoYXZpb3Igb2YgY29uY2VybiwgYW5kIHNpbmNlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgY2hlY2tzIGRvbid0IGFwcGx5LCBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZC4gVGhlIGNvZGUgY2hhbmdlcyBkb24ndCBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIE9OTFkgYmUgZGV0ZWN0ZWQgYnkgS01TQU4uXG5cbldpdGggdGhpcyBsZXZlbCBvZiBjbGFyaXR5IGFuZCBjZXJ0YWludHksIEknbSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTYsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDYuMTQ4MzI2MTM3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgbm9uLXplcm8gYmVmb3JlIGVudGVyaW5nIGEgcGFja2V0IGZyYWdtZW50YXRpb24gbG9vcC4gV2hlbiBgbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVybywgdGhlIGxvb3Agd291bGQgZW50ZXIgYW4gaW5maW5pdGUgY3ljbGUgKHNvZnQgbG9ja3VwIC8gT09NKSByZXBlYXRlZGx5IHRyeWluZyB0byBmcmFnbWVudCB0aGUgYnVmZmVyIHdpdGggYSBmcmFnbWVudCBzaXplIG9mIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNhbml0eSBjaGVjayBpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKWAgdG8gZW5zdXJlIGBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgbm9yIGRvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlIGlzc3VlIGFkZHJlc3NlZCBpcyBhbiBpbmZpbml0ZSBsb29wIC8gZGVuaWFsIG9mIHNlcnZpY2UsIHdoaWNoIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2h6k8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:31:38 +0000 UTC FinishedAt: 2026-09-13 10:35:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI" ], "series_id": "7156c77e-e202-4e94-b140-5f3d1a9e5ee4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_queue_tx_data_frags", "nci_send_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4mIzQzO1x0XHRyYyA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuYwppbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvZGF0YS5jCkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7CWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CiYjNDM7CQlyYyA9IC1FUFJPVE87CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtmcmFnc19xKTsKIAogCXdoaWxlICh0b3RhbF9sZW4pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTkZDIERyaXZlciBSZWdyZXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBjaGVjayB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgaWZgIHN0YXRlbWVudDogYGlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7IHJjID0gLUVQUk9UTzsgZ290byBleGl0OyB9YC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgbWlnaHQgYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3IgcHJvdG9jb2wgdmlvbGF0aW9uIGlzc3VlIGR1cmluZyBORkMgZGF0YSB0cmFuc21pc3Npb24sIHBvdGVudGlhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgcGFja2V0cy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMTQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIEkgd2lsbCB1c2UgbXkgdG9vbHMgLSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgLSB0byB1bmRlcnN0YW5kIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gdGhlIG5hbWUgaXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSBtYXhpbXVtIHBheWxvYWQgc2l6ZSB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGNhbiBoYW5kbGUuIElmIHRoaXMgaXMgemVybywgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFRoaXMgY2hlY2sgbWFrZXMgc3VyZSB0aGF0IGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgaWYgbm90LCByZWplY3RzIHRoZSBwYWNrZXQuIFRoaXMgd2lsbCBwcmV2ZW50IGJhZCBtZW1vcnkgd3JpdGVzLCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZpZWxkIGlzIHNldCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGl0ICpjb3VsZCogYmUgemVyby4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBgY29ubl9pbmZvYCBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSBtaXNzaW5nIGluaXRpYWxpemF0aW9uIHNvbWV3aGVyZSBvciBpZiB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGlzbiYjMzk7dCBiZWluZyBuZWdvdGlhdGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2RhdGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDEwMTpcdFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gMTAyOlx0XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gc2tiLVx1MDAzZWRhdGE7XG4gMTAzOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEwNDpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBmcmFnc19xO1xuIDEwNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnO1xuIDEwNjpcdFx0aW50IGZyYWdfbGVuO1xuIDEwNzpcdFx0aW50IHJjID0gMDtcbiAxMDg6XHRcbiAxMDk6XHRcdHByX2RlYnVnKFwmIzM0O2Nvbm5faWQgMHgleCwgdG90YWxfbGVuICVkXFxuXCYjMzQ7LCBjb25uX2lkLCB0b3RhbF9sZW4pO1xuIDExMDpcdFxuIDExMTpcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbiAxMTI6XHRcdGlmICghY29ubl9pbmZvKSB7XG4gMTEzOlx0XHRcdHJjID0gLUVQUk9UTztcbiAxMTQ6XHRcdFx0Z290byBleGl0O1xuIDExNTpcdFx0fVxuIDExNjpcdFxuIDExNzpcdFx0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuIDExODpcdFx0XHRyYyA9IC1FUFJPVE87XG4gMTE5Olx0XHRcdGdvdG8gZXhpdDtcbiAxMjA6XHRcdH1cbiAxMjE6XHRcbiAxMjI6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiAxMjU6XHRcdFx0ZnJhZ19sZW4gPVxuIDEyNjpcdFx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4gMTI3Olx0XG4gMTI4Olx0XHRcdHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LFxuIDEyOTpcdFx0XHRcdFx0XHQgKE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGZyYWdfbGVuKSxcbiAxMzA6XHRcdFx0XHRcdFx0IEdGUF9BVE9NSUMpO1xuIDEzMTpcdFx0XHRpZiAoc2tiX2ZyYWcgPT0gTlVMTCkge1xuIDEzMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbiAxMzM6XHRcdFx0XHRnb3RvIGZyZWVfZXhpdDtcbiAxMzQ6XHRcdFx0fVxuIDEzNTpcdFx0XHRza2JfcmVzZXJ2ZShza2JfZnJhZywgTkNJX0RBVEFfSERSX1NJWkUpO1xuIDEzNjpcdFxuIDEzNzpcdFx0XHQvKiBmaXJzdCwgY29weSB0aGUgZGF0YSAqL1xuIDEzODpcdFx0XHRza2JfcHV0X2RhdGEoc2tiX2ZyYWcsIGRhdGEsIGZyYWdfbGVuKTtcbiAxMzk6XHRcbiAxNDA6XHRcdFx0Lyogc2Vjb25kLCBzZXQgdGhlIGhlYWRlciAqL1xuIDE0MTpcdFx0XHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcbiAxNDI6XHRcdFx0XHRcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cbiAxNDM6XHRcdFx0XHRcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmFnc19xLCBza2JfZnJhZyk7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRcdGRhdGEgJiM0Mzs9IGZyYWdfbGVuO1xuIDE0ODpcdFx0XHR0b3RhbF9sZW4gLT0gZnJhZ19sZW47XG4gMTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgTkNJIERhdGEgRnJhZ21lbnQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgd2hpbGUgKHRvdGFsX2xlbilgIGxvb3AuLi4gSSBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB0aGUgZnJhZ21lbnQgbGVuZ3RoIGNhbGN1bGF0aW9uOiBgZnJhZ19sZW4gPSBtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKTtgLiBJZiBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCBzb21laG93IGVuZHMgdXAgYmVpbmcgemVybywgdGhlbiBgZnJhZ19sZW5gIHdpbGwgYWxzbyBiZSB6ZXJvLiBDb25zZXF1ZW50bHksIGB0b3RhbF9sZW4gLT0gZnJhZ19sZW5gIGJlY29tZXMgYHRvdGFsX2xlbiAtPSAwYCwgYW5kIHdlJiMzOTtyZSBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wISBUaGF0JiMzOTtzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IOKAkyBkZW5pYWwgb2Ygc2VydmljZSB3YWl0aW5nIHRvIGhhcHBlbi4KCkFoLCB0aGUgcGF0Y2ghIExvb2tzIGxpa2UgaXQgYW50aWNpcGF0ZXMgdGhpcy4gVGhlIGFkZGVkIGNoZWNrIGBpZiAoIWNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbilgIGltbWVkaWF0ZWx5IGV4aXRzIHdpdGggYC1FUFJPVE9gIGlmIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLiBTbWFydCDigJMgYSBzaW1wbGUsIGVmZmVjdGl2ZSBzYWZlZ3VhcmQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXJlIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgaXMgY2FsbGVkIGZyb20gYW5kIHdoYXQgZmVlZHMgaW50byB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIHRvIGdpdmUgYSByZWFsIGFzc2Vzc21lbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNvZGXigJlzIHJlYWNoYWJpbGl0eS4gSSYjMzk7bGwgc2VhcmNoIGZvciBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCYjMzk7cyB1c2VkLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIGxvb2sgZm9yIGBuY2lfc2VuZF9kYXRhYC4gR290dGEgZ2V0IGEgZmlybSBncmFzcCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0mIzM5O3MgZGF0YSBmbG93IHRvIGFzc2VzcyB0aGUgcmVhbCBpbXBhY3Qgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfcXVldWVfdHhfZGF0YV9mcmFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmM9OTU9RVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvZGF0YS5jLTk4LVx0XHRcdFx0ICAgX191OCBjb25uX2lkLFxuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYz0xNzY9aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVx0XHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXHRcdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFRyYW5zbWlzc2lvbiBQYXRoIGluIHRoZSBOQ0kgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgYHN0YXRpY2AgZnVuY3Rpb24gaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBtb2R1bGUsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZm9yIGZyYWdtZW50IHF1ZXVlaW5nLiBJIGtub3cgYG5jaV9zZW5kX2RhdGFgIGNhbGxzIGl0LiBOb3csIHdoYXQmIzM5O3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24sIGBuY2lfc2VuZF9kYXRhYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB1cCB0byB0aGlzIHBvaW50IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCB3b3JrcyB3aXRoaW4gdGhlIE5DSSBzdWItc3lzdGVtLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhvc2UgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfc2VuZF9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xNTk9c3RhdGljIHZvaWQgZmRwX25jaV9zZXRfZGF0YV9wa3RfY291bnRlcihzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMTczLSAqIGZpbGUgaXMgc2VnbWVudGVkIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUgcGFja2V0cy4gSWYgd2UgZ2l2ZSB0aGVcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoxNzQ6ICogd2hvbGUgZmlybXdhcmUgdG8gbmNpX3NlbmRfZGF0YSBpdCB3aWxsIHNlZ21lbnQgaXQgYW5kIGl0IHdpbGwgc2V0XG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMTc1LSAqIHRoZSBQQkYgZmxhZyB0byAweDAxIHNvIHdlIG5lZWQgdG8gZG8gdGhlIHNlZ21lbnRhdGlvbiBoZXJlLlxuLS1cbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xODE9c3RhdGljIGludCBmZHBfbmNpX3NlbmRfcGF0Y2goc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGNvbm5faWQsIHU4IHR5cGUpXG4tLVxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyMy1cbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoyMjQ6XHRcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyNS1cbi0tXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaD0zNzA9aW50IG5jaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191MTYgb3Bjb2RlLCBfX3U4IHBsZW4sIGNvbnN0IHZvaWQgKnBheWxvYWQpO1xuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzcxOmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMzcyLWludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0zOTc9c3RydWN0IG5jaV9sb29wYmFja19kYXRhIHtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtNDAxLVxubmV0L25mYy9uY2kvY29yZS5jOjQwMjpzdGF0aWMgdm9pZCBuY2lfc2VuZF9kYXRhX3JlcShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqb3B0KVxubmV0L25mYy9uY2kvY29yZS5jLTQwMy17XG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTQwNS1cbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDY6XHRuY2lfc2VuZF9kYXRhKG5kZXYsIGRhdGEtXHUwMDNlY29ubl9pZCwgZGF0YS1cdTAwM2VkYXRhKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDctfVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz00MjU9aW50IG5jaV9uZmNjX2xvb3BiYWNrKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTQ2NC1cdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xubmV0L25mYy9uY2kvY29yZS5jOjQ2NTpcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2bG9vcGJhY2tfZGF0YSxcbm5ldC9uZmMvbmNpL2NvcmUuYy00NjYtXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEwNDA9c3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA3MC1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxMDcxOlx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMDcyLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMDc4PXN0YXRpYyBpbnQgbmNpX3RtX3NlbmQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEwODItXG5uZXQvbmZjL25jaS9jb3JlLmM6MTA4MzpcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTA4NC1cdGlmIChyYylcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmM9OTc9c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTc1LS8qIFNlbmQgTkNJIGRhdGEgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxNzY6aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL2RhdGEuYy0xNzcte1xuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYy0yMTQtfVxubmV0L25mYy9uY2kvZGF0YS5jOjIxNTpFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xubmV0L25mYy9uY2kvZGF0YS5jLTIxNi1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYz0xNDI9c3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0xNzgtXG5uZXQvbmZjL25jaS9oY2kuYzoxNzk6XHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cdTAwM2Vjb25uX2lkLCBza2IpO1xubmV0L25mYy9uY2kvaGNpLmMtMTgwLVx0XHRpZiAociBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5GQyBEYXRhIFRyYW5zbWlzc2lvbiBQYXRod2F5cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGRhdGEgZ2V0cyBzZW50IGluIHRoZSBORkMgc3RhY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AuIEl0IHNlZW1zIGBuY2lfc2VuZF9kYXRhYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCByb3V0ZXMgZGF0YSB0aHJvdWdoIHNldmVyYWwgcGF0aHdheXMgZGVwZW5kaW5nIG9uIHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uIGBuY2lfdHJhbnNjZWl2ZWAgaXMgdGhlIG9idmlvdXMgb25lIGZvciBhIHN0YW5kYXJkIE5GQyB0cmFuc2NlaXZlLCB3aGljaCBsaWtlbHkgYm9pbHMgZG93biB0byBhIHJhdyBzb2NrZXQsIGBzZW5kbXNnYCwgb3IgcG90ZW50aWFsbHkgbmV0bGluayBmb3IgY29tbXVuaWNhdGlvbi4gVGhlbiB0aGVyZSYjMzk7cyBgbmNpX3RtX3NlbmRgLCB3aGljaCBpcyBkZWRpY2F0ZWQgZm9yIE5GQyB0YXJnZXQgbW9kZSBvcGVyYXRpb25zLiBXZSYjMzk7dmUgZ290IGBuY2lfbmZjY19sb29wYmFja2Agd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBhIG5ldGxpbmstYmFzZWQgbG9vcGJhY2sgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZywgbmljZSBmb3IgcXVpY2sgY2hlY2tzLiBBbmQgZmluYWxseSwgYG5jaV9oY2lfc2VuZF9kYXRhYCwgd2hpY2ggc2VlbXMgcmVsYXRlZCB0byB0aGUgSENJIGxheWVyLgoKSSYjMzk7bSBhbHNvIHBvbmRlcmluZyB0aGUgcG90ZW50aWFsIGZvciB2aXJ0dWFsIE5GQyBkZXZpY2VzLiBPZiBjb3Vyc2UsIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSBmb3IgdGVzdGluZyBhbmQgZnV6emluZy4gSSBrbm93IHN5emthbGxlciBoYXMgc3VwcG9ydCBmb3IgdmlydHVhbCBORkMgYW5kIGV2ZW4gcmF3IHNvY2tldHMsIHdoaWNoIGlzIGdyZWF0LiBTcGVjaWZpY2FsbHksIGl0IGNhbiB1dGlsaXplIHZpcnR1YWwgTkZDIGRyaXZlcnMgbGlrZSBgbmZjc2ltYCB3aGljaCBJIHJlY29nbml6ZSwgaXQmIzM5O3MgdW5kZXIgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvbmZjc2ltLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgVVNCIE5GQyBkb25nbGUgZW11bGF0aW9uIHN1cHBvcnQgdG9vIHZpYSBzeXprYWxsZXIsIGxpa2Ugd2l0aCBgcG41MzNfdXNiYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHdpdGggcmVhbCBoYXJkd2FyZSB0b28uCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBuZmNzaW1gIGxldmVyYWdlcyB0aGUgTkNJIGxheWVyLiBNeSBpbnN0aW5jdCBpcywgaXQgaGFzIHRvLCBidXQgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZmMvdmlydHVhbC9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoZXJlIE5DSSBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGJlIHN1cmUgb2YgdGhlIGV4YWN0IGFyY2hpdGVjdHVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX2FsbG9jYXRlX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9mZHAvZmRwLmM9Njk5PWludCBmZHBfbmNpX3Byb2JlKHN0cnVjdCBmZHBfaTJjX3BoeSAqcGh5LCBjb25zdCBzdHJ1Y3QgbmZjX3BoeV9vcHMgKnBoeV9vcHMsXG4tLVxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMC1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZkcF9wcm9wX29wcykgXHUwMDNlIE5DSV9NQVhfUFJPUFJJRVRBUllfQ01EKTtcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzo3MzE6XHRuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZuY2lfb3BzLCBwcm90b2NvbHMsIHR4X2hlYWRyb29tLFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMi1cdFx0XHRcdCAgIHR4X3RhaWxyb29tKTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYz05Mj1zdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpuZmNtcnZsX25jaV9yZWdpc3Rlcl9kZXYoZW51bSBuZmNtcnZsX3BoeSBwaHksXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQwLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQxOlx0cHJpdi1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZuZmNtcnZsX25jaV9vcHMsIHByb3RvY29scyxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTE0Mi1cdFx0XHRcdFx0IGhlYWRyb29tLCB0YWlscm9vbSk7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDMtXHRpZiAoIXByaXYtXHUwMDNlbmRldikge1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQ0Olx0XHRuZmNfZXJyKGRldiwgXCYjMzQ7bmNpX2FsbG9jYXRlX2RldmljZSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQ1LVx0XHRyYyA9IC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmM9MTM1PWludCBueHBfbmNpX3Byb2JlKHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYy0xNjItXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYzoxNjM6XHRpbmZvLVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNm54cF9uY2lfb3BzLCBOWFBfTkNJX05GQ19QUk9UT0NPTFMsXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYy0xNjQtXHRcdFx0XHRcdCBOWFBfTkNJX0hEUl9MRU4sIDApO1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE2MD1pbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNzYtXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzoxNzc6XHRpbmZvLVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNnMzZndybjVfbmNpX29wcyxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTE3OC1cdFx0UzNGV1JONV9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jPTExMj1pbnQgc3RfbmNpX3Byb2JlKHN0cnVjdCBsbHRfbmRsYyAqbmRsYywgaW50IHBoeV9oZWFkcm9vbSxcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzMi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHN0X25jaV9wcm9wX29wcykgXHUwMDNlIE5DSV9NQVhfUFJPUFJJRVRBUllfQ01EKTtcbmRyaXZlcnMvbmZjL3N0LW5jaS9jb3JlLmM6MTMzOlx0bmRsYy1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZzdF9uY2lfb3BzLCBwcm90b2NvbHMsXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzNC1cdFx0XHRcdFx0cGh5X2hlYWRyb29tLCBwaHlfdGFpbHJvb20pO1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MTMzPXN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcdHZkZXYtXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXHRcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MTk2PXN0cnVjdCBuY2lfZGV2IHtcbi0tXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yNzQtLyogLS0tLS0gTkNJIERldmljZXMgLS0tLS0gKi9cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjI3NTpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMjc2LVx0XHRcdFx0ICAgIF9fdTMyIHN1cHBvcnRlZF9wcm90b2NvbHMsXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTExNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfb3BzIG5jaV9uZmNfb3BzID0ge1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTY4LS8qKlxubmV0L25mYy9uY2kvY29yZS5jOjExNjk6ICogbmNpX2FsbG9jYXRlX2RldmljZSAtIGFsbG9jYXRlIGEgbmV3IG5jaSBkZXZpY2Vcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTcwLSAqXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTExNzUtICovXG5uZXQvbmZjL25jaS9jb3JlLmM6MTE3NjpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxubmV0L25mYy9uY2kvY29yZS5jLTExNzctXHRcdFx0XHQgICAgX191MzIgc3VwcG9ydGVkX3Byb3RvY29scyxcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyNi19XG5uZXQvbmZjL25jaS9jb3JlLmM6MTIyNzpFWFBPUlRfU1lNQk9MKG5jaV9hbGxvY2F0ZV9kZXZpY2UpO1xubmV0L25mYy9uY2kvY29yZS5jLTEyMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBORkMgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkZDIGRyaXZlcnMgaW4gdGhpcyBrZXJuZWwuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgLiBUaGF0JiMzOTtzIGxpa2VseSBhIHZpcnR1YWwgb3IgZ2VuZXJpYyBORkMgZGV2aWNlIGRyaXZlciwgd2hpY2ggY291bGQgYmUgdXNlZnVsIGZvciBpbml0aWFsIHNldHVwIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBmcmFtZXdvcmsuIEFsc28sIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9gLCB3aGljaCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMgY29udHJvbGxlcnMuIEkgc2VlIHRoYXQgdGhlcmUgaXMgYSBVU0IgZHJpdmVyIGZvciB0aGUgbmZjbXJ2bDogYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLgoKTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jYCBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBiZWdpbiB3aXRoIGEgbW9yZSBhYnN0cmFjdCBvciBmb3VuZGF0aW9uYWwgZHJpdmVyIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaW50ZXJmYWNlcyBhbmQgaG93IG90aGVyIG1vcmUgc3BlY2lmaWMgZHJpdmVycyBhcmUgYnVpbHQgdXBvbiBpdC4gVGhlbiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AgdG8gc2VlIGhvdyBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGludGVncmF0ZXMgaW50byB0aGlzIGRyaXZlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXG4gICA2Olx0ICogQm9uZ3N1IEplb24gXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxuICAxNzpcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxuICAxODpcdFx0XHRcdFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXG4gIDE5Olx0XHRcdFx0XHQgTkZDX1BST1RPX0ZFTElDQV9NQVNLIHwgXFxcbiAgMjA6XHRcdFx0XHRcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXG4gIDIxOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gIDIyOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gIDIzOlx0XG4gIDI0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG4gIDI1Olx0XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbiAgMjY6XHRcdHN0cnVjdCBtdXRleCBtdHg7XG4gIDI3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xuICAyODpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcbiAgMjk6XHRcdGJvb2wgcnVubmluZztcbiAgMzA6XHR9O1xuICAzMTpcdFxuICAzMjpcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiAgMzM6XHR7XG4gIDM0Olx0XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuICAzNTpcdFxuICAzNjpcdFx0dmRldi1cdTAwM2VydW5uaW5nID0gdHJ1ZTtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuICA0MTpcdHtcbiAgNDI6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNDU6XHRcdGtmcmVlX3NrYih2ZGV2LVx1MDAzZXNlbmRfYnVmZik7XG4gIDQ2Olx0XHR2ZGV2LVx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XG4gIDQ3Olx0XHR2ZGV2LVx1MDAzZXJ1bm5pbmcgPSBmYWxzZTtcbiAgNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gTkZDIERldmljZSBTdXBwb3J0IGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYHZpcnR1YWxfbmNpZGV2YCBpcyByZWdpc3RlcmVkIGFzIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgZnVuY3Rpb25zIGxpa2UgYHN5el9vcGVuX2RldiR2aXJ0dWFsX25jaWRldmAgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBJIGNhbiBsZXZlcmFnZSBpdHMgZXhpc3RpbmcgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgYXV0b21hdGVkIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5IHdpdGhpbiB0aGlzIHZpcnR1YWwgTkZDIGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBib3RoIE5GQyBhbmQgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRvIHVuZGVyc3RhbmQgaG93IGB2aXJ0dWFsX25jaWRldmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQW5kLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLiBUaGF0JiMzOTtzIHRoZSBVU0IgZHJpdmVyIGZvciBNYXJ2ZWxsIE5GQzsgdGhlIE1hcnZlbGwgY2hpcHMgaGF2ZSBiZWVuIGFyb3VuZCBhIHdoaWxlLCBzbyBzZWVpbmcgdGhhdCBtYXkgb2ZmZXIgc29tZSBoaW50cyBhYm91dCBhcmNoaXRlY3R1cmUgb3Igb3RoZXIgZGVzaWduIGNob2ljZXMsIGFuZCBsaWtlbHkgcHJvdmlkZXMgYSBiYXNlbGluZSBvZiBmdW5jdGlvbmFsaXR5IHRvIHJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORkNcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcbm5ldC9uZmMvbmNpL0tjb25maWc6MTQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBVQVJUIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZS01LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEwPW5jaV9zcGkteSAmIzQzOz0gc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfTkNJX1NQSSkgJiM0Mzs9IG5jaV9zcGkub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtMTItXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICYjNDM7PSB1YXJ0Lm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICYjNDM7PSBuY2lfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZHJpdmVycyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gb3RoZXIgTkZDIGNvbXBvbmVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19OQ0lcbiAgIDM6XHRcdGRlcGVuZHMgb24gTkZDXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAgODpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIE5DSSBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xuICAxMTpcdFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZSAobmNpKS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkZDX05DSV9TUElcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4gIDE1Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBTUEkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAyMDpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgU2F5IHllcyBpZiB5b3UgdXNlIGFuIE5DSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBTUEkgbGluayBsYXllci5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkZDX05DSV9VQVJUXG4gIDI1Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFRUWVxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDI3Olx0XHRkZWZhdWx0IG5cbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgU2F5IHllcyBpZiB5b3UgdXNlIGFuIE5DSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBVQVJUIGxpbmsgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDIwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBORkMtcmVsYXRlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYE5GQ19WSVJUVUFMX05DSWAgc3ltYm9sLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgdGhlcmUsIGJ1dCBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZXR0ZXIgdG8gc3RhcnQgd2l0aCB0aGUgbG93LWhhbmdpbmcgZnJ1aXQgYW5kIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGlzIHZpcnR1YWwgTkNJIHN1cHBvcnQgaXMgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydHVhbF9uY2lkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcdCYjNDM7PSBzdDk1aGYvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVx0JiM0Mzs9IHZpcnR1YWxfbmNpZGV2Lm9cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXHRcdFx0XHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXHRcdFx0XHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2My1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc3LVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkxLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkzLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcdC5yZWFkID0gdmlydHVhbF9uY2lkZXZfcmVhZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk1Olx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NjpcdC5vcGVuID0gdmlydHVhbF9uY2lkZXZfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3Olx0LnJlbGVhc2UgPSB2aXJ0dWFsX25jaWRldl9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk4Olx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTk5LX07XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDMtXHQubmFtZSA9IFwmIzM0O3ZpcnR1YWxfbmNpXCYjMzQ7LFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XHQuZm9wcyA9IFx1MDAyNnZpcnR1YWxfbmNpZGV2X2ZvcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cdC5tb2RlID0gMDYwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmb3IgTkZDX1ZJUlRVQUxfTkNJKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBORkNfVklSVFVBTF9OQ0lgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvbiBjb3JlIE5GQyBpbmZyYXN0cnVjdHVyZSwgcGVyaGFwcyBzcGVjaWZpYyBjaGlwc2V0cyBvciBwbGF0Zm9ybSBkcml2ZXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIOKAkyBpcyB0aGlzIGZvciBhIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3RpbmcsIGVtdWxhdGluZyBhIHBoeXNpY2FsIHJlYWRlciwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBwcmVzZW5jZSBvZiAmIzM0O3ZpcnR1YWwmIzM0OyBzdWdnZXN0cyBpdCBtaWdodCBiZSBhIHNpbXVsYXRpb24gb3Igc29mdHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIEkmIzM5O2xsIGJlIHNjYW5uaW5nIGZvciBhbnkgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgTkZDLXJlbGF0ZWQgb3B0aW9ucy4gS2V5IHF1ZXN0aW9uczogV2hhdCBvdGhlciBORkMgZHJpdmVycyBvciBzdWJzeXN0ZW1zIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scywgbGlrZSBhIGRldmljZSB0cmVlIGJpbmRpbmcgb3IgYSBtb2R1bGUgbmFtZSB0aGF0IEkgc2hvdWxkIGtlZXAgaW4gbWluZD8gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIHN0YWNrIGFuZCB3aGF0IGl0cyBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXRoZXIgSSBuZWVkIHRvIHR3ZWFrIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIHdoZW4gZW5hYmxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTkZDIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNTIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLCBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiByZWxhdGVkIHRvIGFuIE5GQyBkcml2ZXIgb3IgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgTkZDIHN1YnN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHRoaXMgS2NvbmZpZyBhbGxvd3MgbWUgdG8gYmV0dGVyIHRhaWxvciBvdXIgc3lzdGVtIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTb255IFBvcnQtMTAwIGNoaXAgYmFzZWQgVVNCIGRldmljZXMgc3VjaCBhcyB0aGVcbiAgNDg6XHRcdCAgUkMtUzM4MCBkb25nbGUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXG4gIDU3Olx0XHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuICA1OTpcdFx0ICBtb2R1bGUuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL2ZkcC9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcJiMzNDtcbiAgNjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvcG41MzMvS2NvbmZpZ1wmIzM0O1xuICA2NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9taWNyb3JlYWQvS2NvbmZpZ1wmIzM0O1xuICA2NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcJiMzNDtcbiAgNjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvc3QyMW5mY2EvS2NvbmZpZ1wmIzM0O1xuICA2OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbmZjbXJ2bCBLY29uZmlnIEZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBNYXJ2ZWxsIE5GQyBkcml2ZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3RydWN0dXJlOiB0aGUgbWFpbiBLY29uZmlnIHN5bWJvbCBkZWZpbmluZyB0aGUgZHJpdmVyJiMzOTtzIGluY2x1c2lvbiwgZm9sbG93ZWQgYnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLCBhbmQgdGhlbiBwcm9iYWJseSBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpZiBhbnkgLSB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgZmxhZ3MsIG9yIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgZmVhdHVyZXMgdG8gZW5hYmxlLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoaW5ncyBsaWtlIHNlY3VyZSBlbGVtZW50cywgZGlmZmVyZW50IHJlYWRlci93cml0ZXIgbW9kZXMsIG9yIGlmIGl0IGV4cG9zZXMgYSBnZW5lcmljIE5GQyBpbnRlcmZhY2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIG90aGVyIE5GQyBkcml2ZXJzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGludGVyZXN0aW5nIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBORkMgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX01SVkxcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIFRoZSBjb3JlIGRyaXZlciB0byBzdXBwb3J0IE1hcnZlbGwgTkZDIGRldmljZXMuXG4gICA2Olx0XG4gICA3Olx0XHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHN1cHBvcnRcbiAgIDg6XHRcdCAgTWFydmVsbCBORkMgZGV2aWNlIDg4OTcuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5GQ19NUlZMX1VTQlxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyXCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFVTQlxuICAxMzpcdFx0c2VsZWN0IE5GQ19NUlZMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlci5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZGV2aWNlczpcbiAgMTg6XHRcdCAgODg5Ny5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxuICAyMTpcdFx0ICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIE5GQ19NUlZMX1VBUlRcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXJcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgTkZDX05DSV9VQVJUXG4gIDI2Olx0XHRzZWxlY3QgTkZDX01SVkxcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlci5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRldmljZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTkZDIERyaXZlciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIgKGBORkNfTVJWTF9VU0JgKS4gSXQgbG9va3MgbGlrZSBpdCBuYXR1cmFsbHkgbGVhbnMgb24gdGhlIGBORkNfTkNJYCBhbmQgYFVTQmAgY29tcG9uZW50cyDigJMgbWFrZXMgc2Vuc2UuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyBgTkZDX1ZJUlRVQUxfTkNJYCB0aGF0IGhpbmdlcyBvbiBgTkZDX05DSWAuIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBzeXprYWxsZXImIzM5O3MgYmVlbiBwb3VuZGluZyBhd2F5IGF0IE5GQyBwcm90b2NvbHMsIGluY2x1ZGluZyBOQ0khCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGF0YSBmbG93OiBXaGVyZSBhcmUgd2UgY2FsbGluZyBgbmNpX3NlbmRfZGF0YWAsIGFuZCBob3cgZG9lcyB0aGUgY29kZSByZWFjaCBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgPyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmNpX3NlbmRfZGF0YWAuIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBPa2F5LCBub3cgSSBuZWVkIHRvIGFjdHVhbGx5ICpyZWFkKiBgbmNpX3NlbmRfZGF0YWAgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvZGF0YS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHRleGl0OlxuIDE3MjpcdFx0cmV0dXJuIHJjO1xuIDE3MzpcdH1cbiAxNzQ6XHRcbiAxNzU6XHQvKiBTZW5kIE5DSSBkYXRhICovXG4gMTc2Olx0aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNzc6XHR7XG4gMTc4Olx0XHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDE3OTpcdFx0aW50IHJjID0gMDtcbiAxODA6XHRcbiAxODE6XHRcdHByX2RlYnVnKFwmIzM0O2Nvbm5faWQgMHgleCwgcGxlbiAlZFxcblwmIzM0OywgY29ubl9pZCwgc2tiLVx1MDAzZWxlbik7XG4gMTgyOlx0XG4gMTgzOlx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuIDE4NDpcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAxODU6XHRcdFx0cmMgPSAtRVBST1RPO1xuIDE4NjpcdFx0XHRnb3RvIGZyZWVfZXhpdDtcbiAxODc6XHRcdH1cbiAxODg6XHRcbiAxODk6XHRcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXG4gMTkwOlx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gMTkxOlx0XHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gMTkyOlx0XHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiAxOTM6XHRcbiAxOTQ6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIDE5NTpcdFx0fSBlbHNlIHtcbiAxOTY6XHRcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4gMTk3Olx0XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbiAxOTg6XHRcdFx0aWYgKHJjKSB7XG4gMTk5Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwmIzM0Oyk7XG4gMjAwOlx0XHRcdFx0Z290byBmcmVlX2V4aXQ7XG4gMjAxOlx0XHRcdH1cbiAyMDI6XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIDIwNTpcdFx0cXVldWVfd29yayhuZGV2LVx1MDAzZXR4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXR4X3dvcmspO1xuIDIwNjpcdFxuIDIwNzpcdFx0Z290byBleGl0O1xuIDIwODpcdFxuIDIwOTpcdGZyZWVfZXhpdDpcbiAyMTA6XHRcdGtmcmVlX3NrYihza2IpO1xuIDIxMTpcdFxuIDIxMjpcdGV4aXQ6XG4gMjEzOlx0XHRyZXR1cm4gcmM7XG4gMjE0Olx0fVxuIDIxNTpcdEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XG4gMjE2Olx0XG4gMjE3Olx0LyogLS0tLS0tLS0tLS0tLS0tLS0gTkNJIFJYIERhdGEgLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAyMTg6XHRcbiAyMTk6XHRzdGF0aWMgdm9pZCBuY2lfYWRkX3J4X2RhdGFfZnJhZyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgYW5kIFBhdGNoIGluIE5GQyBOQ0kgRGF0YSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBORkMgTkNJIGRhdGEgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBuZWVkcyB0byBiZSBmcmFnbWVudGVkIGlzIGJhc2VkIG9uIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gLiAgSWYgdGhpcyB2YWx1ZSBpcyB6ZXJvICphbmQqIHRoZSBwYWNrZXQgbGVuZ3RoIChgc2tiLSZndDtsZW5gKSBpcyBncmVhdGVyIHRoYW4gemVybywgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCB3aGljaCBjYWxscyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLiBUaGUgY3JpdGljYWwgaXNzdWUgaXMsICpiZWZvcmUqIHRoaXMgcGF0Y2gsIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgZG9lc24mIzM5O3QgcHJvcGVybHkgaGFuZGxlIGEgYG1heF9wa3RfcGF5bG9hZF9sZW5gIG9mIHplcm8uIFRoZSBsb2dpYyBpbnNpZGUgdGhlIGZyYWdtZW50YXRpb24gbG9vcCB3b3VsZCBjYWxjdWxhdGUgYSBmcmFnbWVudCBsZW5ndGggb2YgemVybyByZXBlYXRlZGx5LCBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3AgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSB6ZXJvLWxlbmd0aCBTS0JzIGFuZCBuZXZlciBkZWNyZW1lbnRpbmcgdGhlIGB0b3RhbF9sZW5gLiAgVGhpcyBpcyBhIGRlZmluaXRlIGhhbmcgY29uZGl0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNyYXNoLgoKVGhlIHBhdGNoJiMzOTtzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGFkZHMgYSBjaGVjayB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCB0byBzZWUgaWYgYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVyby4gSWYgaXQgaXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHByZXZlbnRpbmcgdGhlIGxvb3AuICBUaGlzIGRpcmVjdGx5IG1pdGlnYXRlcyB0aGUgaGFuZy4KCk5vdywgd2hlcmUgY291bGQgYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAgYWN0dWFsbHkgYmUgemVybz8gVGhhdCYjMzk7cyB0aGUga2V5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYSBtYWxpY2lvdXMgb3IgY29ycnVwdGVkIHJlc3BvbnNlIG9yIHNldHVwIHBhY2tldCBjb3VsZCBwb3RlbnRpYWxseSBzZXQgdGhpcyB2YWx1ZSwgb3IgcGVyaGFwcyBpdCBjb3VsZCBiZSBtaXNjb25maWd1cmVkIHZpYSBhIHZpcnR1YWwgZGV2aWNlLCBVU0IgZGV2aWNlLCBvciBldmVuIGEgc2ltdWxhdGVkIE5GQ0MuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHZlY3Rvci4gQW5kIHJlbWVtYmVyLCB0aGUgY29kZSBpcyBleGVjdXRlZCB3aGVuIHNlbmRpbmcgZGF0YSBmcm9tIHVzZXJzcGFjZSBzb2NrZXRzLCBsb29wYmFjaywgb3IgYW55IHRyYW5zY2VpdmUgb3BlcmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGtub3cgTkZDIGFuZCBOQ0kgYXJlIHZpcnR1YWxpemVkIHZpYSBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIFVTQiBlbXVsYXRpb24gKGBDT05GSUdfTkZDX01SVkxfVVNCYCksIGFuZCBzb2NrZXQgaW50ZXJmYWNlcyAoZS5nLiwgQUZfTkZDIHJhdyBzb2NrZXQpLiBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZSByZWxldmFudCBjb2RlIGlzIGxvY2F0ZWQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBleHBsb2l0cy4KCk5vdywgd2hpY2ggc3ltYm9scyBzaG91bGQgSSBmb2N1cyBvbj8gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBpcyB0aGUgY29yZSBvZiB0aGUgZml4LCBidXQgaXQmIzM5O3MgKnN0YXRpYyouICBXYWl0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIGFsdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgaW4gYSBgLmNgIGZpbGUgYW5kIGNhbiBoYXZlIGEgc3ltYm9sIGluIHZtbGludXguIFRvIGJlIHNhZmUsIGxldCYjMzk7cyBpbmNsdWRlIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgLiBgbmNpX3NlbmRfZGF0YWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBhbmQgaXQmIzM5O3MgdGhlIGRpcmVjdCBjYWxsZXIuIE90aGVyIGRpcmVjdCBlbnRyeXBvaW50cyBpbmNsdWRlIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfdG1fc2VuZGAsIGBuY2lfbmZjY19sb29wYmFja2AsIGFuZCBgbmNpX2hjaV9zZW5kX2RhdGFgLgoKVGhlcmVmb3JlLCBJIHRoaW5rIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcy4gVGhleSBhcmUgc3BlY2lmaWMgYW5kIG5vbi11YmlxdWl0b3VzLCB3aGljaCBpcyB3aGF0IEkgd2FudC4KCkZpbmFsbHksIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBgZGF0YS5vYCBpcyBwYXJ0IG9mIGBDT05GSUdfTkZDX05DSWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19ORkNgLCBzbyBhcyBsb25nIGFzIE5GQyBOQ0kgaXMgZW5hYmxlZCwgdGhpcyBjb2RlIGlzIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNwoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBORkMvTkNJIENvcmUgU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgcmV2aXNpdGVkIHRoZSBgbmV0L25mYy9uY2kvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE5GQyBOQ0kgc3VwcG9ydC4gSSBub3RlZCB0aGF0IGBORkNfTkNJYCBkZXBlbmRzIG9uIGBORkNgIGFuZCBpcyB0cmlzdGF0ZS4gRnVydGhlcm1vcmUsIHZpcnR1YWwgZGV2aWNlIGFuZCBVU0IgZGV2aWNlIGVtdWxhdGlvbiBkZXBlbmQgb24gYE5GQ19OQ0lgLiBJIHRoZW4gY29uZmlybWVkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIHRoZSBvcHRpb25hbCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAuICBJIGRvdWJsZS1jaGVja2VkIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBmb3JtYXQsIGVuc3VyaW5nIEkmIzM5O20gdXNpbmcgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6ICYjMzQ7TkZDJiMzNDssICYjMzQ7TkZDX05DSSYjMzQ7LgoKTm93IGZvciB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgVGhpcyBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3AgaWYgdGhlIHBheWxvYWQgbGVuZ3RoIGlzIHplcm8uICBUaGlzIGltcGFjdHMgdGhlIGRhdGEgZnJhZ21lbnRhdGlvbiBwYXRoIHdpdGhpbiB0aGUgTkZDL05DSSBjb3JlLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyBvciBVU0IgTkZDIGNvbnRyb2xsZXJzLiBUaGlzIG1lYW5zIGZ1enppbmcgY2FuIGRpcmVjdGx5IHRlc3QgZXJyb3IgaGFuZGxpbmcgYW5kIGlkZW50aWZ5IGFueSBvdGhlciBlZGdlIGNhc2VzIGluIE5DSSYjMzk7cyBib3VuZGFyeSBjb25kaXRpb25zLgoKVGhlcmVmb3JlLCBteSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBSZWFzb25pbmdgOiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIGZyYWdtZW50YXRpb24gcGF0aCBpbiB0aGUgTkZDL05DSSBjb3JlIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFkZGluZyB2YWxpZGF0aW9uIGZvciBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCBpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgLCB3aGljaCBwcmV2aW91c2x5IGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcCBpZiB6ZXJvLiBUaGlzIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aXJ0dWFsIE5DSSBkZXZpY2VzIG9yIFVTQiBORkMgY29udHJvbGxlcnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O05GQyYjMzQ7LCAmIzM0O05GQ19OQ0kmIzM0O11gCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIGlzIDAgZHVyaW5nIE5DSSBUWCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBORkMvTkNJIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE5GQyBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKSBvciBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gTkNJIHBhY2tldCBmcmFnbWVudGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YmRjOWQ1YjkwMWQwNGRkNDQyZTNmZDcxMWY0MGMzYzVhMDExOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuYwppbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvZGF0YS5jCkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7CWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CiYjNDM7CQlyYyA9IC1FUFJPVE87CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtmcmFnc19xKTsKIAogCXdoaWxlICh0b3RhbF9sZW4pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBOQ0kgRGF0YSBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaC4gVGhlIHJlbGV2YW50IGNvZGUgc2VlbXMgdG8gYmUgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGxvb2sgYXQgdGhlIGZpbGUuIFRpbWUgdG8gZWl0aGVyIHdoaXAgb3V0IGByZWFkLWZpbGVgIG9yIGZpcmUgdXAgYGdyZXBwZXJgLCBkZXBlbmRpbmcgb24gd2hhdCYjMzk7cyBxdWlja2VzdCBhbmQgYXZhaWxhYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIEkgdGhpbmsgdGhlIGNydXggb2YgdGhlIGNoYW5nZXMgaXMgcHJvYmFibHkgYXJvdW5kIGxpbmUgMTE0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBUaW1lIHRvIHJlYWQgYXJvdW5kIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRpZiAoIWNvbm5faW5mbylcbiAgOTE6XHRcdFx0cmV0dXJuIC1FUFJPVE87XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4gIDk0Olx0fVxuICA5NTpcdEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAgOTg6XHRcdFx0XHRcdCAgIF9fdTggY29ubl9pZCxcbiAgOTk6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpIHtcbiAxMDA6XHRcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gMTAxOlx0XHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAxMDI6XHRcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiAxMDM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMTA0Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XG4gMTA1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XG4gMTA2Olx0XHRpbnQgZnJhZ19sZW47XG4gMTA3Olx0XHRpbnQgcmMgPSAwO1xuIDEwODpcdFxuIDEwOTpcdFx0cHJfZGVidWcoXCYjMzQ7Y29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXG5cJiMzNDssIGNvbm5faWQsIHRvdGFsX2xlbik7XG4gMTEwOlx0XG4gMTExOlx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuIDExMjpcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAxMTM6XHRcdFx0cmMgPSAtRVBST1RPO1xuIDExNDpcdFx0XHRnb3RvIGV4aXQ7XG4gMTE1Olx0XHR9XG4gMTE2Olx0XG4gMTE3Olx0XHRpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gMTE4Olx0XHRcdHJjID0gLUVQUk9UTztcbiAxMTk6XHRcdFx0Z290byBleGl0O1xuIDEyMDpcdFx0fVxuIDEyMTpcdFxuIDEyMjpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmZyYWdzX3EpO1xuIDEyMzpcdFxuIDEyNDpcdFx0d2hpbGUgKHRvdGFsX2xlbikge1xuIDEyNTpcdFx0XHRmcmFnX2xlbiA9XG4gMTI2Olx0XHRcdFx0bWluX3QoaW50LCB0b3RhbF9sZW4sIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiAxMjc6XHRcbiAxMjg6XHRcdFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXG4gMTI5Olx0XHRcdFx0XHRcdCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgZnJhZ19sZW4pLFxuIDEzMDpcdFx0XHRcdFx0XHQgR0ZQX0FUT01JQyk7XG4gMTMxOlx0XHRcdGlmIChza2JfZnJhZyA9PSBOVUxMKSB7XG4gMTMyOlx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuIDEzMzpcdFx0XHRcdGdvdG8gZnJlZV9leGl0O1xuIDEzNDpcdFx0XHR9XG4gMTM1Olx0XHRcdHNrYl9yZXNlcnZlKHNrYl9mcmFnLCBOQ0lfREFUQV9IRFJfU0laRSk7XG4gMTM2Olx0XG4gMTM3Olx0XHRcdC8qIGZpcnN0LCBjb3B5IHRoZSBkYXRhICovXG4gMTM4Olx0XHRcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xuIDEzOTpcdFxuIDE0MDpcdFx0XHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXG4gMTQxOlx0XHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYl9mcmFnLFxuIDE0MjpcdFx0XHRcdFx0ICAoKHRvdGFsX2xlbiA9PSBmcmFnX2xlbikgP1xuIDE0MzpcdFx0XHRcdFx0ICAgKE5DSV9QQkZfTEFTVCkgOiAoTkNJX1BCRl9DT05UKSkpO1xuIDE0NDpcdFxuIDE0NTpcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmZyYWdzX3EsIHNrYl9mcmFnKTtcbiAxNDY6XHRcbiAxNDc6XHRcdFx0ZGF0YSAmIzQzOz0gZnJhZ19sZW47XG4gMTQ4Olx0XHRcdHRvdGFsX2xlbiAtPSBmcmFnX2xlbjtcbiAxNDk6XHRcbiAxNTA6XHRcdFx0cHJfZGVidWcoXCYjMzQ7ZnJhZ19sZW4gJWQsIHJlbWFpbmluZyB0b3RhbF9sZW4gJWRcXG5cJiMzNDssXG4gMTUxOlx0XHRcdFx0IGZyYWdfbGVuLCB0b3RhbF9sZW4pO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFxuIDE1NDpcdFx0LyogcXVldWUgYWxsIGZyYWdtZW50cyBhdG9taWNhbGx5ICovXG4gMTU1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xuIDE1NjpcdFxuIDE1NzpcdFx0d2hpbGUgKChza2JfZnJhZyA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZnJhZ3NfcSkpICE9IE5VTEwpXG4gMTU4Olx0XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2JfZnJhZyk7XG4gMTU5Olx0XG4gMTYwOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5kZXYtXHUwMDNldHhfcS5sb2NrLCBmbGFncyk7XG4gMTYxOlx0XG4gMTYyOlx0XHQvKiBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi9cbiAxNjM6XHRcdGtmcmVlX3NrYihza2IpO1xuIDE2NDpcdFxuIDE2NTpcdFx0Z290byBleGl0O1xuIDE2NjpcdFxuIDE2NzpcdGZyZWVfZXhpdDpcbiAxNjg6XHRcdHdoaWxlICgoc2tiX2ZyYWcgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmZyYWdzX3EpKSAhPSBOVUxMKVxuIDE2OTpcdFx0XHRrZnJlZV9za2Ioc2tiX2ZyYWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBJbmZpbml0ZSBMb29wKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gbG9vayBhdCBgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYC4gSWYgdGhhdCB2YWx1ZSBoYXBwZW5zIHRvIGJlIHplcm8sIHdoaWNoIGlzIGEgcG9zc2liaWxpdHksIHRoZW4gdXNpbmcgYG1pbl90YCB3aXRoIGB0b3RhbF9sZW5gIHdvdWxkIHJlc3VsdCBpbiBhIHplcm8gdmFsdWUgZm9yIHRoZSBmcmFnbWVudCBsZW5ndGgsIGFzc3VtaW5nIGB0b3RhbF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGF0JiMzOTtzIGEgcHJvYmxlbSBiZWNhdXNlIHRoZSBuZXh0IGxpbmUgY2FsY3VsYXRlcyBgdG90YWxfbGVuIC09IDBgLiBUaGlzIG1lYW5zIHRoYXQgYHRvdGFsX2xlbmAgd291bGQgbmV2ZXIgZGVjcmVtZW50LCBjcmVhdGluZyBhbiBpbmZpbml0ZSBsb29wLiBJJiMzOTttIGd1ZXNzaW5nIFN5emthbGxlciBwcm9iYWJseSBmb3VuZCBhIGh1bmcgdGFzayBvciBzb2Z0IGxvY2t1cCBzdGVtbWluZyBmcm9tIGV4YWN0bHkgdGhpcyBzY2VuYXJpby4gVG8gdmVyaWZ5IGFuZCB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlLCBJIHNob3VsZCBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIHVzZSBgZ2l0IGxvZ2AgdG8gaG9wZWZ1bGx5IHVuY292ZXIgdGhlIHNwZWNpZmljIGlzc3VlIHRoaXMgY29kZSBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGhhbmdzIG9yIGxvb3BzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfcXVldWVfdHhfZGF0YV9mcmFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9kYXRhLmM9OTU9RVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvZGF0YS5jLTk4LVx0XHRcdFx0ICAgX191OCBjb25uX2lkLFxuLS1cbm5ldC9uZmMvbmNpL2RhdGEuYz0xNzY9aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVx0XHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXHRcdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIE5GQyBEcml2ZXImIzM5O3MgRGF0YSBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdpdGggYGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbmAuIElmIHRoYXQgdmFsdWUgaXMgemVybywgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0uIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgaW4gYSB2dWxuZXJhYmxlIHN0YXRlOgoKYGBgYwp3aGlsZSAodG90YWxfbGVuKSB7CiAgICBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4pOyAvLyBmcmFnX2xlbiA9IDAKICAgIHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgMCksIEdGUF9BVE9NSUMpOwogICAgLi4uCiAgICB0b3RhbF9sZW4gLT0gMDsKYGBgCgpFc3NlbnRpYWxseSwgd2UmIzM5O2QgaGF2ZSBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgYWxsb2NhdGluZyBTS0JzIChzb2NrZXQgYnVmZmVyKSB1bnRpbCB0aGUgc3lzdGVtIHJhbiBvdXQgb2YgbWVtb3J5IG9yIGxvY2tlZCB1cC4gTm90IGdvb2QuCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazoKCmBgYGMKCWlmICghY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKSB7CgkJcmMgPSAtRVBST1RPOwoJCWdvdG8gZXhpdDsKCX0KYGBgCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCAmIzM0O0RvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXM/JiMzNDsgVGhlIHVzdWFsIHN1c3BlY3RzOiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QuIE5vcGUsIG5vcGUsIGFuZCAqZGVmaW5pdGVseSogbm9wZS4gSXQmIzM5O3MgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgKGAtRVBST1RPYCkgYW5kIGV4aXRpbmcsIHNvIHdlJiMzOTtyZSBzYWZlIG9uIHRoYXQgZnJvbnQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgd2hlcmUgYGV4aXQ6YCBsZWFkcy4gUGVla2luZyBhdCBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIHJldmVhbHM6CgpgYGBjCmV4aXQ6CglyZXR1cm4gcmM7CmBgYAoKQW5kIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgbmNpX3NlbmRfZGF0YWA6CgpgYGBjCmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpCnsKCS4uLgoJcmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpOwoJaWYgKHJjKSB7CgkJLi4uCgl9CmBgYAoKU28sIHRoZSBlcnJvciBwcm9wYWdhdGVzIGJhY2sgdXAgdGhlIHN0YWNrLiBUaGlzIGlzIGEgc2Vuc2libGUgYW5kIHNlY3VyZSBoYW5kbGluZyBvZiB0aGUgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGJlaW5nIHplcm8uIFRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgSSB3b3VsZCBuZWVkIHRvIGNhcmVmdWxseSByZWFkIGxpbmVzIDE3MC0yMjAgb2YgYG5ldC9uZmMvbmNpL2RhdGEuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IGF0IGZpcnN0IGdsYW5jZSwgdGhpcyBwYXRjaCBhcHBlYXJzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2RhdGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0ZXhpdDpcbiAxNzI6XHRcdHJldHVybiByYztcbiAxNzM6XHR9XG4gMTc0Olx0XG4gMTc1Olx0LyogU2VuZCBOQ0kgZGF0YSAqL1xuIDE3NjpcdGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4gMTc3Olx0e1xuIDE3ODpcdFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiAxNzk6XHRcdGludCByYyA9IDA7XG4gMTgwOlx0XG4gMTgxOlx0XHRwcl9kZWJ1ZyhcJiMzNDtjb25uX2lkIDB4JXgsIHBsZW4gJWRcXG5cJiMzNDssIGNvbm5faWQsIHNrYi1cdTAwM2VsZW4pO1xuIDE4MjpcdFxuIDE4MzpcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbiAxODQ6XHRcdGlmICghY29ubl9pbmZvKSB7XG4gMTg1Olx0XHRcdHJjID0gLUVQUk9UTztcbiAxODY6XHRcdFx0Z290byBmcmVlX2V4aXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xuIDE5MDpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuIDE5MTpcdFx0XHQvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqL1xuIDE5MjpcdFx0XHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2IsIE5DSV9QQkZfTEFTVCk7XG4gMTkzOlx0XG4gMTk0Olx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNldHhfcSwgc2tiKTtcbiAxOTU6XHRcdH0gZWxzZSB7XG4gMTk2Olx0XHRcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xuIDE5NzpcdFx0XHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XG4gMTk4Olx0XHRcdGlmIChyYykge1xuIDE5OTpcdFx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXG5cJiMzNDspO1xuIDIwMDpcdFx0XHRcdGdvdG8gZnJlZV9leGl0O1xuIDIwMTpcdFx0XHR9XG4gMjAyOlx0XHR9XG4gMjAzOlx0XG4gMjA0Olx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcbiAyMDU6XHRcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdGdvdG8gZXhpdDtcbiAyMDg6XHRcbiAyMDk6XHRmcmVlX2V4aXQ6XG4gMjEwOlx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyMTE6XHRcbiAyMTI6XHRleGl0OlxuIDIxMzpcdFx0cmV0dXJuIHJjO1xuIDIxNDpcdH1cbiAyMTU6XHRFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xuIDIxNjpcdFxuIDIxNzpcdC8qIC0tLS0tLS0tLS0tLS0tLS0tIE5DSSBSWCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovXG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIHZvaWQgbmNpX2FkZF9yeF9kYXRhX2ZyYWcoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgVGhvcm91Z2ggUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgS01TQU4gaXMgdGhhdCBpdCYjMzk7cyBub3QgbmVlZGVkIGhlcmUsIGFuZCBJJiMzOTt2ZSBub3cgbWV0aWN1bG91c2x5IHJldmlld2VkIHRoZSBzaXR1YXRpb24gdG8gY29uZmlybSB0aGF0LgoKRmlyc3RseSwgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItJmd0O2xlbmApIGlzIHplcm8gYW5kIHRoZSBtYXhpbXVtIHBheWxvYWQgbGVuZ3RoIChgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuYCkgaXMgYWxzbyB6ZXJvLCB0aGUgb3JpZ2luYWwgY29kZSwgZXZlbiB3aXRoIHRoZSBwYXRjaCwgd291bGQgY29ycmVjdGx5IGhhbmRsZSB0aGlzIOKAkyBlc3NlbnRpYWxseSBhbGxvd2luZyB0aGUgaGVhZGVyIHRvIGJlIGFkZGVkLiBJZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgYW5kIG1heCBwYXlsb2FkIGlzIHplcm8sIHRoZSBwYXRjaCBjb3JyZWN0bHkgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIGdldHRpbmcgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBpc3N1ZS4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoZSB0eXBpY2FsIGFyZWFzIHRoYXQgS01TQU4gd291bGQgY2F0Y2g6IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIHNvIG5vIGluZm8tbGVha3MgdGhlcmUuIGBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgc28gbm8gcmVsaWFuY2Ugb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBsb2dpYyBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVyczsgaW5zdGVhZCwgdGhlIGxvZ2ljIGV4cGxpY2l0bHkgcHJldmVudHMgaXQgaW4gdGhpcyBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoaXMgcGF0Y2ggYWN0dWFsbHkgKnByZXZlbnRzKiBhbiBpbmZpbml0ZSBsb29wIG9yIG90aGVyIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB0aGUgbWF4IHBheWxvYWQgbGVuZ3RoIGlzIHplcm8uCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBjaGFuZ2VzIGRvbiYjMzk7dCBwcmltYXJpbHkgcmlzayB0aGUgc29ydHMgb2YgYnVncyBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoOiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhcyBleHBlY3RlZC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoICpwcmV2ZW50cyogYSBidWcgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYmVoYXZpb3Igb2YgY29uY2VybiwgYW5kIHNpbmNlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgY2hlY2tzIGRvbiYjMzk7dCBhcHBseSwgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQuIFRoZSBjb2RlIGNoYW5nZXMgZG9uJiMzOTt0IGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgT05MWSBiZSBkZXRlY3RlZCBieSBLTVNBTi4KCldpdGggdGhpcyBsZXZlbCBvZiBjbGFyaXR5IGFuZCBjZXJ0YWludHksIEkmIzM5O20gY29tZm9ydGFibGUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5Ljg5NDkwMTY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjUzNDcxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzXCIsXG4gICAgXCJuY2lfc2VuZF9kYXRhXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgbm9uLXplcm8gYmVmb3JlIGVudGVyaW5nIGEgcGFja2V0IGZyYWdtZW50YXRpb24gbG9vcC4gV2hlbiBgbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVybywgdGhlIGxvb3Agd291bGQgZW50ZXIgYW4gaW5maW5pdGUgY3ljbGUgKHNvZnQgbG9ja3VwIC8gT09NKSByZXBlYXRlZGx5IHRyeWluZyB0byBmcmFnbWVudCB0aGUgYnVmZmVyIHdpdGggYSBmcmFnbWVudCBzaXplIG9mIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gaXMgMCBkdXJpbmcgTkNJIFRYIHBhY2tldCBmcmFnbWVudGF0aW9uLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIE5GQy9OQ0kgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggTkZDIHNvY2tldHMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHZpcnR1YWwgTkNJIGRldmljZXMgKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpIG9yIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucyBpbiBOQ0kgcGFja2V0IGZyYWdtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjM5Ljg5NDkwNzExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNjM2NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjRiZGM5ZDViOTAxZDA0ZGQ0NDJlM2ZkNzExZjQwYzNjNWEwMTE5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcXG5pbmRleCA0MjUzZWRlYTVjOGRiLi5iNTQ5Y2VmN2RjMmU0IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL2RhdGEuY1xcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xcbkBAIC0xMTQsNiArMTE0LDExIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4rXFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuIFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZnJhZ3NfcSk7XFxuIFxcbiBcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMyODI5MTE5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjgyODM0ODk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGJkYzlkNWI5MDFkMDRkZDQ0MmUzZmQ3MTFmNDBjM2M1YTAxMTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICsxMTQsMTEgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK1x0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0XHRyYyA9IC1FUFJPVE87XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQwLjMyODI5MzMxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ2MDg4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBORkMgRHJpdmVyIFJlZ3Jlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgbmV3IGBpZmAgc3RhdGVtZW50OiBgaWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikgeyByYyA9IC1FUFJPVE87IGdvdG8gZXhpdDsgfWAuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IG9yIHByb3RvY29sIHZpb2xhdGlvbiBpc3N1ZSBkdXJpbmcgTkZDIGRhdGEgdHJhbnNtaXNzaW9uLCBwb3RlbnRpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmcmFnbWVudGVkIHBhY2tldHMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciwgc28gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDExNCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYC4gSSB3aWxsIHVzZSBteSB0b29scyAtIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCAtIHRvIHVuZGVyc3RhbmQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBhbmQgaG93IGl0J3MgdXNlZC4gQmFzZWQgb24gdGhlIG5hbWUgaXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSBtYXhpbXVtIHBheWxvYWQgc2l6ZSB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGNhbiBoYW5kbGUuIElmIHRoaXMgaXMgemVybywgdGhhdCdzIG5vdCByaWdodC4gVGhpcyBjaGVjayBtYWtlcyBzdXJlIHRoYXQgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBpZiBub3QsIHJlamVjdHMgdGhlIHBhY2tldC4gVGhpcyB3aWxsIHByZXZlbnQgYmFkIG1lbW9yeSB3cml0ZXMsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZmllbGQgaXMgc2V0IGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgKmNvdWxkKiBiZSB6ZXJvLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBjb25uX2luZm9gIHN0cnVjdHVyZSBpcyBjcnVjaWFsLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgbWlzc2luZyBpbml0aWFsaXphdGlvbiBzb21ld2hlcmUgb3IgaWYgdGhlcmUncyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGlzbid0IGJlaW5nIG5lZ290aWF0ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTcuNjc0Mzg0NjU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxMDE6XFx0XFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDI6XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gMTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEwNDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XFxuIDEwNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XFxuIDEwNjpcXHRcXHRpbnQgZnJhZ19sZW47XFxuIDEwNzpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHRvdGFsX2xlbik7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDExMjpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxMTM6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoIWNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxMTg6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTk6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuIDEyNTpcXHRcXHRcXHRmcmFnX2xlbiA9XFxuIDEyNjpcXHRcXHRcXHRcXHRtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0XFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbiAxMzA6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9BVE9NSUMpO1xcbiAxMzE6XFx0XFx0XFx0aWYgKHNrYl9mcmFnID09IE5VTEwpIHtcXG4gMTMyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gMTMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxMzQ6XFx0XFx0XFx0fVxcbiAxMzU6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiX2ZyYWcsIE5DSV9EQVRBX0hEUl9TSVpFKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0LyogZmlyc3QsIGNvcHkgdGhlIGRhdGEgKi9cXG4gMTM4OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRcXHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXFxuIDE0MTpcXHRcXHRcXHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcXG4gMTQyOlxcdFxcdFxcdFxcdFxcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cXG4gMTQzOlxcdFxcdFxcdFxcdFxcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2ZnJhZ3NfcSwgc2tiX2ZyYWcpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHRkYXRhICs9IGZyYWdfbGVuO1xcbiAxNDg6XFx0XFx0XFx0dG90YWxfbGVuIC09IGZyYWdfbGVuO1xcbiAxNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjU3LjY3NDQ1NjU3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDc0NTk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gTkZDIE5DSSBEYXRhIEZyYWdtZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB3aGlsZSAodG90YWxfbGVuKWAgbG9vcC4uLiBJIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBmcmFnbWVudCBsZW5ndGggY2FsY3VsYXRpb246IGBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7YC4gSWYgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBzb21laG93IGVuZHMgdXAgYmVpbmcgemVybywgdGhlbiBgZnJhZ19sZW5gIHdpbGwgYWxzbyBiZSB6ZXJvLiBDb25zZXF1ZW50bHksIGB0b3RhbF9sZW4gLT0gZnJhZ19sZW5gIGJlY29tZXMgYHRvdGFsX2xlbiAtPSAwYCwgYW5kIHdlJ3JlIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AhIFRoYXQncyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgZGVuaWFsIG9mIHNlcnZpY2Ugd2FpdGluZyB0byBoYXBwZW4uXG5cbkFoLCB0aGUgcGF0Y2ghIExvb2tzIGxpa2UgaXQgYW50aWNpcGF0ZXMgdGhpcy4gVGhlIGFkZGVkIGNoZWNrIGBpZiAoIWNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKWAgaW1tZWRpYXRlbHkgZXhpdHMgd2l0aCBgLUVQUk9UT2AgaWYgYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8uIFNtYXJ0IOKAkyBhIHNpbXBsZSwgZWZmZWN0aXZlIHNhZmVndWFyZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGlzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGZlZWRzIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCB0byBnaXZlIGEgcmVhbCBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb2Rl4oCZcyByZWFjaGFiaWxpdHkuIEknbGwgc2VhcmNoIGZvciBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCdzIHVzZWQuIEFuZCwgd2hpbGUgSSdtIGF0IGl0LCBJJ2xsIGxvb2sgZm9yIGBuY2lfc2VuZF9kYXRhYC4gR290dGEgZ2V0IGEgZmlybSBncmFzcCBvZiB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0ncyBkYXRhIGZsb3cgdG8gYXNzZXNzIHRoZSByZWFsIGltcGFjdCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzEwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDAuNTIxOTE5MDk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ5NjAyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvZGF0YS5jPTk1PUVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxubmV0L25mYy9uY2kvZGF0YS5jLTk2LVxcbm5ldC9uZmMvbmNpL2RhdGEuYzo5NzpzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2RhdGEuYy05OC1cXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmM9MTc2PWludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk2LVxcdFxcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xcbm5ldC9uZmMvbmNpL2RhdGEuYzoxOTc6XFx0XFx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpO1xcbm5ldC9uZmMvbmNpL2RhdGEuYy0xOTgtXFx0XFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjAyLjY4Njg4NTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU0NjMyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgVHJhbnNtaXNzaW9uIFBhdGggaW4gdGhlIE5DSSBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGludGVybmFsIHRvIHRoYXQgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QgZm9yIGZyYWdtZW50IHF1ZXVlaW5nLiBJIGtub3cgYG5jaV9zZW5kX2RhdGFgIGNhbGxzIGl0LiBOb3csIHdoYXQncyBjYWxsaW5nICp0aGF0KiBmdW5jdGlvbiwgYG5jaV9zZW5kX2RhdGFgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwIHRvIHRoaXMgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoIHdvcmtzIHdpdGhpbiB0aGUgTkNJIHN1Yi1zeXN0ZW0uIEl0J3MgdGltZSB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRob3NlIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNC42ODIzNTA5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzI2NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfc2VuZF9kYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xNTk9c3RhdGljIHZvaWQgZmRwX25jaV9zZXRfZGF0YV9wa3RfY291bnRlcihzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYy0xNzMtICogZmlsZSBpcyBzZWdtZW50ZWQgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZSBwYWNrZXRzLiBJZiB3ZSBnaXZlIHRoZVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoxNzQ6ICogd2hvbGUgZmlybXdhcmUgdG8gbmNpX3NlbmRfZGF0YSBpdCB3aWxsIHNlZ21lbnQgaXQgYW5kIGl0IHdpbGwgc2V0XFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTE3NS0gKiB0aGUgUEJGIGZsYWcgdG8gMHgwMSBzbyB3ZSBuZWVkIHRvIGRvIHRoZSBzZWdtZW50YXRpb24gaGVyZS5cXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYz0xODE9c3RhdGljIGludCBmZHBfbmNpX3NlbmRfcGF0Y2goc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGNvbm5faWQsIHU4IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25mYy9mZHAvZmRwLmMtMjIzLVxcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzoyMjQ6XFx0XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTIyNS1cXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTM3MD1pbnQgbmNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3UxNiBvcGNvZGUsIF9fdTggcGxlbiwgY29uc3Qgdm9pZCAqcGF5bG9hZCk7XFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzcxOmludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM3Mi1pbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0zOTc9c3RydWN0IG5jaV9sb29wYmFja19kYXRhIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDEtXFxubmV0L25mYy9uY2kvY29yZS5jOjQwMjpzdGF0aWMgdm9pZCBuY2lfc2VuZF9kYXRhX3JlcShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqb3B0KVxcbm5ldC9uZmMvbmNpL2NvcmUuYy00MDMte1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTQwNS1cXG5uZXQvbmZjL25jaS9jb3JlLmM6NDA2OlxcdG5jaV9zZW5kX2RhdGEobmRldiwgZGF0YS1cXHUwMDNlY29ubl9pZCwgZGF0YS1cXHUwMDNlZGF0YSk7XFxubmV0L25mYy9uY2kvY29yZS5jLTQwNy19XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9NDI1PWludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTQ2NC1cXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCA9IGNvbm5faWQ7XFxubmV0L25mYy9uY2kvY29yZS5jOjQ2NTpcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZsb29wYmFja19kYXRhLFxcbm5ldC9uZmMvbmNpL2NvcmUuYy00NjYtXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTA0MD1zdGF0aWMgaW50IG5jaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEwNzAtXFxubmV0L25mYy9uY2kvY29yZS5jOjEwNzE6XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA3Mi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTA3OD1zdGF0aWMgaW50IG5jaV90bV9zZW5kKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEwODItXFxubmV0L25mYy9uY2kvY29yZS5jOjEwODM6XFx0cmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTA4NC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL25jaS9kYXRhLmM9OTc9c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYy0xNzUtLyogU2VuZCBOQ0kgZGF0YSAqL1xcbm5ldC9uZmMvbmNpL2RhdGEuYzoxNzY6aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9kYXRhLmMtMTc3LXtcXG4tLVxcbm5ldC9uZmMvbmNpL2RhdGEuYy0yMTQtfVxcbm5ldC9uZmMvbmNpL2RhdGEuYzoyMTU6RVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTtcXG5uZXQvbmZjL25jaS9kYXRhLmMtMjE2LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9MTQyPXN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xNzgtXFxubmV0L25mYy9uY2kvaGNpLmM6MTc5OlxcdFxcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCwgc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0xODAtXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNi43Njk2MjIyOTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDM1MjYzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5GQyBEYXRhIFRyYW5zbWlzc2lvbiBQYXRod2F5cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgc2VudCBpbiB0aGUgTkZDIHN0YWNrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLiBJdCBzZWVtcyBgbmNpX3NlbmRfZGF0YWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQgcm91dGVzIGRhdGEgdGhyb3VnaCBzZXZlcmFsIHBhdGh3YXlzIGRlcGVuZGluZyBvbiB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLiBgbmNpX3RyYW5zY2VpdmVgIGlzIHRoZSBvYnZpb3VzIG9uZSBmb3IgYSBzdGFuZGFyZCBORkMgdHJhbnNjZWl2ZSwgd2hpY2ggbGlrZWx5IGJvaWxzIGRvd24gdG8gYSByYXcgc29ja2V0LCBgc2VuZG1zZ2AsIG9yIHBvdGVudGlhbGx5IG5ldGxpbmsgZm9yIGNvbW11bmljYXRpb24uIFRoZW4gdGhlcmUncyBgbmNpX3RtX3NlbmRgLCB3aGljaCBpcyBkZWRpY2F0ZWQgZm9yIE5GQyB0YXJnZXQgbW9kZSBvcGVyYXRpb25zLiBXZSd2ZSBnb3QgYG5jaV9uZmNjX2xvb3BiYWNrYCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgYSBuZXRsaW5rLWJhc2VkIGxvb3BiYWNrIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcsIG5pY2UgZm9yIHF1aWNrIGNoZWNrcy4gQW5kIGZpbmFsbHksIGBuY2lfaGNpX3NlbmRfZGF0YWAsIHdoaWNoIHNlZW1zIHJlbGF0ZWQgdG8gdGhlIEhDSSBsYXllci5cblxuSSdtIGFsc28gcG9uZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHZpcnR1YWwgTkZDIGRldmljZXMuIE9mIGNvdXJzZSwgdGhhdCdzIGEga2V5IGFyZWEgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGFzIHN1cHBvcnQgZm9yIHZpcnR1YWwgTkZDIGFuZCBldmVuIHJhdyBzb2NrZXRzLCB3aGljaCBpcyBncmVhdC4gU3BlY2lmaWNhbGx5LCBpdCBjYW4gdXRpbGl6ZSB2aXJ0dWFsIE5GQyBkcml2ZXJzIGxpa2UgYG5mY3NpbWAgd2hpY2ggSSByZWNvZ25pemUsIGl0J3MgdW5kZXIgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvbmZjc2ltLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgVVNCIE5GQyBkb25nbGUgZW11bGF0aW9uIHN1cHBvcnQgdG9vIHZpYSBzeXprYWxsZXIsIGxpa2Ugd2l0aCBgcG41MzNfdXNiYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHdpdGggcmVhbCBoYXJkd2FyZSB0b28uXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG5mY3NpbWAgbGV2ZXJhZ2VzIHRoZSBOQ0kgbGF5ZXIuIE15IGluc3RpbmN0IGlzLCBpdCBoYXMgdG8sIGJ1dCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmZjL3ZpcnR1YWwvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGVyZSBOQ0kgaXMgYWN0dWFsbHkgdXNlZC4gTmVlZCB0byBiZSBzdXJlIG9mIHRoZSBleGFjdCBhcmNoaXRlY3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTAuMjA0ODg5MTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMTU5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9hbGxvY2F0ZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvZmRwL2ZkcC5jPTY5OT1pbnQgZmRwX25jaV9wcm9iZShzdHJ1Y3QgZmRwX2kyY19waHkgKnBoeSwgY29uc3Qgc3RydWN0IG5mY19waHlfb3BzICpwaHlfb3BzLFxcbi0tXFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMC1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZHBfcHJvcF9vcHMpIFxcdTAwM2UgTkNJX01BWF9QUk9QUklFVEFSWV9DTUQpO1xcbmRyaXZlcnMvbmZjL2ZkcC9mZHAuYzo3MzE6XFx0bmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNm5jaV9vcHMsIHByb3RvY29scywgdHhfaGVhZHJvb20sXFxuZHJpdmVycy9uZmMvZmRwL2ZkcC5jLTczMi1cXHRcXHRcXHRcXHQgICB0eF90YWlscm9vbSk7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYz05Mj1zdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpuZmNtcnZsX25jaV9yZWdpc3Rlcl9kZXYoZW51bSBuZmNtcnZsX3BoeSBwaHksXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDAtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTQxOlxcdHByaXYtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZuZmNtcnZsX25jaV9vcHMsIHByb3RvY29scyxcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDItXFx0XFx0XFx0XFx0XFx0IGhlYWRyb29tLCB0YWlscm9vbSk7XFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTQzLVxcdGlmICghcHJpdi1cXHUwMDNlbmRldikge1xcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jOjE0NDpcXHRcXHRuZmNfZXJyKGRldiwgXFxcIm5jaV9hbGxvY2F0ZV9kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xNDUtXFx0XFx0cmMgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmM9MTM1PWludCBueHBfbmNpX3Byb2JlKHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvY29yZS5jLTE2Mi1cXG5kcml2ZXJzL25mYy9ueHAtbmNpL2NvcmUuYzoxNjM6XFx0aW5mby1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNm54cF9uY2lfb3BzLCBOWFBfTkNJX05GQ19QUk9UT0NPTFMsXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9jb3JlLmMtMTY0LVxcdFxcdFxcdFxcdFxcdCBOWFBfTkNJX0hEUl9MRU4sIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9MTYwPWludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTc2LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jOjE3NzpcXHRpbmZvLVxcdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcXHUwMDI2czNmd3JuNV9uY2lfb3BzLFxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTE3OC1cXHRcXHRTM0ZXUk41X05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvc3QtbmNpL2NvcmUuYz0xMTI9aW50IHN0X25jaV9wcm9iZShzdHJ1Y3QgbGx0X25kbGMgKm5kbGMsIGludCBwaHlfaGVhZHJvb20sXFxuLS1cXG5kcml2ZXJzL25mYy9zdC1uY2kvY29yZS5jLTEzMi1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShzdF9uY2lfcHJvcF9vcHMpIFxcdTAwM2UgTkNJX01BWF9QUk9QUklFVEFSWV9DTUQpO1xcbmRyaXZlcnMvbmZjL3N0LW5jaS9jb3JlLmM6MTMzOlxcdG5kbGMtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZzdF9uY2lfb3BzLCBwcm90b2NvbHMsXFxuZHJpdmVycy9uZmMvc3QtbmNpL2NvcmUuYy0xMzQtXFx0XFx0XFx0XFx0XFx0cGh5X2hlYWRyb29tLCBwaHlfdGFpbHJvb20pO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0xMzM9c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XFx0dmRldi1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cXHRcXHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MTk2PXN0cnVjdCBuY2lfZGV2IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI3NC0vKiAtLS0tLSBOQ0kgRGV2aWNlcyAtLS0tLSAqL1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjI3NTpzdHJ1Y3QgbmNpX2RldiAqbmNpX2FsbG9jYXRlX2RldmljZShjb25zdCBzdHJ1Y3QgbmNpX29wcyAqb3BzLFxcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI3Ni1cXHRcXHRcXHRcXHQgICAgX191MzIgc3VwcG9ydGVkX3Byb3RvY29scyxcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTY4LS8qKlxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMTY5OiAqIG5jaV9hbGxvY2F0ZV9kZXZpY2UgLSBhbGxvY2F0ZSBhIG5ldyBuY2kgZGV2aWNlXFxubmV0L25mYy9uY2kvY29yZS5jLTExNzAtICpcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTc1LSAqL1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMTc2OnN0cnVjdCBuY2lfZGV2ICpuY2lfYWxsb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBuY2lfb3BzICpvcHMsXFxubmV0L25mYy9uY2kvY29yZS5jLTExNzctXFx0XFx0XFx0XFx0ICAgIF9fdTMyIHN1cHBvcnRlZF9wcm90b2NvbHMsXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyNi19XFxubmV0L25mYy9uY2kvY29yZS5jOjEyMjc6RVhQT1JUX1NZTUJPTChuY2lfYWxsb2NhdGVfZGV2aWNlKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTEuODY1MDU1NDY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzI4NTgyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBORkMgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBORkMgZHJpdmVycyBpbiB0aGlzIGtlcm5lbC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AuIFRoYXQncyBsaWtlbHkgYSB2aXJ0dWFsIG9yIGdlbmVyaWMgTkZDIGRldmljZSBkcml2ZXIsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bCBmb3IgaW5pdGlhbCBzZXR1cCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZnJhbWV3b3JrLiBBbHNvLCBJJ20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9gLCB3aGljaCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMgY29udHJvbGxlcnMuIEkgc2VlIHRoYXQgdGhlcmUgaXMgYSBVU0IgZHJpdmVyIGZvciB0aGUgbmZjbXJ2bDogYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgIGZpcnN0LiBJdCdzIG9mdGVuIGhlbHBmdWwgdG8gYmVnaW4gd2l0aCBhIG1vcmUgYWJzdHJhY3Qgb3IgZm91bmRhdGlvbmFsIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGludGVyZmFjZXMgYW5kIGhvdyBvdGhlciBtb3JlIHNwZWNpZmljIGRyaXZlcnMgYXJlIGJ1aWx0IHVwb24gaXQuIFRoZW4gSSdsbCBjaGVjayBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AgdG8gc2VlIGhvdyBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGludGVncmF0ZXMgaW50byB0aGlzIGRyaXZlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTQuMDM3OTE2NzI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIFZpcnR1YWwgTkNJIGRldmljZSBzaW11bGF0aW9uIGRyaXZlclxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXFxuICAgNjpcXHQgKiBCb25nc3UgSmVvbiBcXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cXHUwMDNlXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXQuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmZjL25jaV9jb3JlLmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxcbiAgMTc6XFx0I2RlZmluZSBWSVJUVUFMX05GQ19QUk9UT0NPTFNcXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX01JRkFSRV9NQVNLIHwgXFxcXFxcbiAgMTk6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19GRUxJQ0FfTUFTSyB8IFxcXFxcXG4gIDIwOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXFxcXG4gIDIxOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXFxcXFxcbiAgMjI6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19JU08xNTY5M19NQVNLKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcXG4gIDI1OlxcdFxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xcbiAgMjY6XFx0XFx0c3RydWN0IG11dGV4IG10eDtcXG4gIDI3OlxcdFxcdHN0cnVjdCBza19idWZmICpzZW5kX2J1ZmY7XFxuICAyODpcXHRcXHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9oZWFkIHdxO1xcbiAgMjk6XFx0XFx0Ym9vbCBydW5uaW5nO1xcbiAgMzA6XFx0fTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiAgMzM6XFx0e1xcbiAgMzQ6XFx0XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0dmRldi1cXHUwMDNlcnVubmluZyA9IHRydWU7XFxuICAzNzpcXHRcXHRyZXR1cm4gMDtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuICA0NTpcXHRcXHRrZnJlZV9za2IodmRldi1cXHUwMDNlc2VuZF9idWZmKTtcXG4gIDQ2OlxcdFxcdHZkZXYtXFx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XFxuICA0NzpcXHRcXHR2ZGV2LVxcdTAwM2VydW5uaW5nID0gZmFsc2U7XFxuICA0ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNC4wMzc5OTY3MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxOTAwMzMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBORkMgRGV2aWNlIFN1cHBvcnQgYW5kIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGB2aXJ0dWFsX25jaWRldmAgaXMgcmVnaXN0ZXJlZCBhcyBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGZ1bmN0aW9ucyBsaWtlIGBzeXpfb3Blbl9kZXYkdmlydHVhbF9uY2lkZXZgIG1lYW5zIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBJIGNhbiBsZXZlcmFnZSBpdHMgZXhpc3RpbmcgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgYXV0b21hdGVkIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5IHdpdGhpbiB0aGlzIHZpcnR1YWwgTkZDIGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBib3RoIE5GQyBhbmQgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRvIHVuZGVyc3RhbmQgaG93IGB2aXJ0dWFsX25jaWRldmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gQW5kLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUsIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmNgLiBUaGF0J3MgdGhlIFVTQiBkcml2ZXIgZm9yIE1hcnZlbGwgTkZDOyB0aGUgTWFydmVsbCBjaGlwcyBoYXZlIGJlZW4gYXJvdW5kIGEgd2hpbGUsIHNvIHNlZWluZyB0aGF0IG1heSBvZmZlciBzb21lIGhpbnRzIGFib3V0IGFyY2hpdGVjdHVyZSBvciBvdGhlciBkZXNpZ24gY2hvaWNlcywgYW5kIGxpa2VseSBwcm92aWRlcyBhIGJhc2VsaW5lIG9mIGZ1bmN0aW9uYWxpdHkgdG8gcmVmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNi4zNTcwMDI4NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQyNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG5uZXQvbmZjL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE1LVxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgKz0gc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICs9IG5jaV9zcGkub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEzPW5jaV91YXJ0LXkgKz0gdWFydC5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgKz0gbmNpX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxNi40MDYwNTMxNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQxNDg3OTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBORkMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBrbm93IHRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCBpdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGZvciB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGRyaXZlcnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSB0aGlua2luZyBJJ2xsIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogZW5hYmxlbWVudCBmbGFncywgbWF5YmUgc29tZSBib2FyZC1zcGVjaWZpYyBvdmVycmlkZXMsIGFuZCBob3BlZnVsbHkgY2xlYXIgZGVwZW5kZW5jaWVzIG9uIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhpZXJhcmNoeSBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyIE5GQyBjb21wb25lbnRzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBoZWFkYWNoZXMhKSBhd2FpdC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBtYWdpYyBoYXBwZW5zLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgTkZDIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxOC44MjA5MzUzOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBTYXkgeWVzIGlmIHlvdSB1c2UgYW4gTkNJIGRyaXZlciB0aGF0IHJlcXVpcmVzIFNQSSBsaW5rIGxheWVyLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkZDX05DSV9VQVJUXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMjc6XFx0XFx0ZGVmYXVsdCBuXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFNheSB5ZXMgaWYgeW91IHVzZSBhbiBOQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgVUFSVCBsaW5rIGxheWVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxOC44MjEwMTMwODJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAyNTcyNTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbCBOQ0kgaW4gS2NvbmZpZyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgTkZDLXJlbGF0ZWQsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25mYy9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGBORkNfVklSVFVBTF9OQ0lgIHN5bWJvbC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQncyBsaWtlbHkgZGVmaW5lZCB0aGVyZSwgYnV0IEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmV0dGVyIHRvIHN0YXJ0IHdpdGggdGhlIGxvdy1oYW5naW5nIGZydWl0IGFuZCBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGlzIHZpcnR1YWwgTkNJIHN1cHBvcnQgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjIwLjg0Njc0MTAzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NjE2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbF9uY2lkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz03Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwMy1cXHQubmFtZSA9IFxcXCJ2aXJ0dWFsX25jaVxcXCIsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XFx0LmZvcHMgPSBcXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cXHQubW9kZSA9IDA2MDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjIwLjg5NDYwOTI4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDg0MDI2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBmb3IgTkZDX1ZJUlRVQUxfTkNJKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgTkZDX1ZJUlRVQUxfTkNJYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvbiBjb3JlIE5GQyBpbmZyYXN0cnVjdHVyZSwgcGVyaGFwcyBzcGVjaWZpYyBjaGlwc2V0cyBvciBwbGF0Zm9ybSBkcml2ZXJzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2Ug4oCTIGlzIHRoaXMgZm9yIGEgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdGluZywgZW11bGF0aW5nIGEgcGh5c2ljYWwgcmVhZGVyLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIHByZXNlbmNlIG9mIFwidmlydHVhbFwiIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGEgc2ltdWxhdGlvbiBvciBzb2Z0d2FyZSBhYnN0cmFjdGlvbiBsYXllci4gSSdsbCBiZSBzY2FubmluZyBmb3IgYW55IGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIE5GQy1yZWxhdGVkIG9wdGlvbnMuIEtleSBxdWVzdGlvbnM6IFdoYXQgb3RoZXIgTkZDIGRyaXZlcnMgb3Igc3Vic3lzdGVtcyBkb2VzIGl0IGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIHN5bWJvbHMsIGxpa2UgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIG9yIGEgbW9kdWxlIG5hbWUgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQ/IFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIHN0YWNrIGFuZCB3aGF0IGl0cyBjb3JlIGZ1bmN0aW9uYWxpdGllcyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXRoZXIgSSBuZWVkIHRvIHR3ZWFrIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIHdoZW4gZW5hYmxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjMuMzc4NjM4NTM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXFx0Kz0gdmlydHVhbF9uY2lkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyMy40MjYwMjU4ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNzMzNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBORkMgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA1Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZSwgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBkZXBlbmRlbmN5IGRlZmluaXRpb24gcmVsYXRlZCB0byBhbiBORkMgZHJpdmVyIG9yIGZlYXR1cmUuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgTkZDIHN1YnN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHRoaXMgS2NvbmZpZyBhbGxvd3MgbWUgdG8gYmV0dGVyIHRhaWxvciBvdXIgc3lzdGVtIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgYXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjI1LjczMzM2NDkwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxcbiAgNDg6XFx0XFx0ICBSQy1TMzgwIGRvbmdsZS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxcbiAgNTc6XFx0XFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcXG4gIDU5OlxcdFxcdCAgbW9kdWxlLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvZmRwL0tjb25maWdcXFwiXFxuICA2NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcXFwiXFxuICA2NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTMzL0tjb25maWdcXFwiXFxuICA2NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL21pY3JvcmVhZC9LY29uZmlnXFxcIlxcbiAgNjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcXFwiXFxuICA2ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0MjFuZmNhL0tjb25maWdcXFwiXFxuICA2OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyNS43MzM0NDQzMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ5NTkwNzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBuZmNtcnZsIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyBNYXJ2ZWxsIE5GQyBkcml2ZXIuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdHJ1Y3R1cmU6IHRoZSBtYWluIEtjb25maWcgc3ltYm9sIGRlZmluaW5nIHRoZSBkcml2ZXIncyBpbmNsdXNpb24sIGZvbGxvd2VkIGJ5IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcywgYW5kIHRoZW4gcHJvYmFibHkgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaWYgYW55IC0gdGhpbmdzIGxpa2UgZGVidWdnaW5nIGZsYWdzLCBvciBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGZlYXR1cmVzIHRvIGVuYWJsZS4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoaW5ncyBsaWtlIHNlY3VyZSBlbGVtZW50cywgZGlmZmVyZW50IHJlYWRlci93cml0ZXIgbW9kZXMsIG9yIGlmIGl0IGV4cG9zZXMgYSBnZW5lcmljIE5GQyBpbnRlcmZhY2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIG90aGVyIE5GQyBkcml2ZXJzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGludGVyZXN0aW5nIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBORkMgc3Vic3lzdGVtLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTMxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozMi4yMjkzNTM3NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkZDX01SVkxcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoZSBjb3JlIGRyaXZlciB0byBzdXBwb3J0IE1hcnZlbGwgTkZDIGRldmljZXMuXFxuICAgNjpcXHRcXG4gICA3OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydFxcbiAgIDg6XFx0XFx0ICBNYXJ2ZWxsIE5GQyBkZXZpY2UgODg5Ny5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5GQ19NUlZMX1VTQlxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDEzOlxcdFxcdHNlbGVjdCBORkNfTVJWTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZGV2aWNlczpcXG4gIDE4OlxcdFxcdCAgODg5Ny5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyXFxuICAyMTpcXHRcXHQgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIE5GQ19NUlZMX1VBUlRcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IE5GQ19OQ0lfVUFSVFxcbiAgMjY6XFx0XFx0c2VsZWN0IE5GQ19NUlZMXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXIuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTWFydmVsbCBORkMtb3Zlci1VQVJUIGRldmljZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MzIuMjI5NDE3ODE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NTg3MDY0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIERyaXZlciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyIChgTkZDX01SVkxfVVNCYCkuIEl0IGxvb2tzIGxpa2UgaXQgbmF0dXJhbGx5IGxlYW5zIG9uIHRoZSBgTkZDX05DSWAgYW5kIGBVU0JgIGNvbXBvbmVudHMg4oCTIG1ha2VzIHNlbnNlLiBBbmQgdGhlbiwgdGhlcmUncyBgTkZDX1ZJUlRVQUxfTkNJYCB0aGF0IGhpbmdlcyBvbiBgTkZDX05DSWAuIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBzeXprYWxsZXIncyBiZWVuIHBvdW5kaW5nIGF3YXkgYXQgTkZDIHByb3RvY29scywgaW5jbHVkaW5nIE5DSSFcblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdzogV2hlcmUgYXJlIHdlIGNhbGxpbmcgYG5jaV9zZW5kX2RhdGFgLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgcmVhY2ggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYD8gTGV0J3Mgc3RhcnQgd2l0aCBgbmNpX3NlbmRfZGF0YWAuIFJpZ2h0LCB0aGF0J3MgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AuIE9rYXksIG5vdyBJIG5lZWQgdG8gYWN0dWFsbHkgKnJlYWQqIGBuY2lfc2VuZF9kYXRhYCBpbiBgbmV0L25mYy9uY2kvZGF0YS5jYCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjM1LjA4ODEyNzE3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9kYXRhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0ZXhpdDpcXG4gMTcyOlxcdFxcdHJldHVybiByYztcXG4gMTczOlxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0LyogU2VuZCBOQ0kgZGF0YSAqL1xcbiAxNzY6XFx0aW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIDE3OTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCBwbGVuICVkXFxcXG5cXFwiLCBjb25uX2lkLCBza2ItXFx1MDAzZWxlbik7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDE4NDpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxODU6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxODY6XFx0XFx0XFx0Z290byBmcmVlX2V4aXQ7XFxuIDE4NzpcXHRcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXFxuIDE5MDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYz0gY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XFxuIDE5MTpcXHRcXHRcXHQvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqL1xcbiAxOTI6XFx0XFx0XFx0bmNpX3B1c2hfZGF0YV9oZHIobmRldiwgY29ubl9pZCwgc2tiLCBOQ0lfUEJGX0xBU1QpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNldHhfcSwgc2tiKTtcXG4gMTk1OlxcdFxcdH0gZWxzZSB7XFxuIDE5NjpcXHRcXHRcXHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cXG4gMTk3OlxcdFxcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcXG4gMTk4OlxcdFxcdFxcdGlmIChyYykge1xcbiAxOTk6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXFxcblxcXCIpO1xcbiAyMDA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2V4aXQ7XFxuIDIwMTpcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHR9XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcXG4gMjA1OlxcdFxcdHF1ZXVlX3dvcmsobmRldi1cXHUwMDNldHhfd3EsIFxcdTAwMjZuZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0Z290byBleGl0O1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRmcmVlX2V4aXQ6XFxuIDIxMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0ZXhpdDpcXG4gMjEzOlxcdFxcdHJldHVybiByYztcXG4gMjE0OlxcdH1cXG4gMjE1OlxcdEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdC8qIC0tLS0tLS0tLS0tLS0tLS0tIE5DSSBSWCBEYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovXFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyB2b2lkIG5jaV9hZGRfcnhfZGF0YV9mcmFnKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozNS4wODgyMDAxOTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODE2OTc3NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGFuZCBQYXRjaCBpbiBORkMgTkNJIERhdGEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgTkZDIE5DSSBkYXRhIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjaGVjayB0byBzZWUgaWYgYSBwYWNrZXQgbmVlZHMgdG8gYmUgZnJhZ21lbnRlZCBpcyBiYXNlZCBvbiBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gLiAgSWYgdGhpcyB2YWx1ZSBpcyB6ZXJvICphbmQqIHRoZSBwYWNrZXQgbGVuZ3RoIChgc2tiLVx1MDAzZWxlbmApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3ZSBlbmQgdXAgaW4gdGhlIGBlbHNlYCBicmFuY2gsIHdoaWNoIGNhbGxzIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AuIFRoZSBjcml0aWNhbCBpc3N1ZSBpcywgKmJlZm9yZSogdGhpcyBwYXRjaCwgYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBkb2Vzbid0IHByb3Blcmx5IGhhbmRsZSBhIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBvZiB6ZXJvLiBUaGUgbG9naWMgaW5zaWRlIHRoZSBmcmFnbWVudGF0aW9uIGxvb3Agd291bGQgY2FsY3VsYXRlIGEgZnJhZ21lbnQgbGVuZ3RoIG9mIHplcm8gcmVwZWF0ZWRseSwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIGF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgemVyby1sZW5ndGggU0tCcyBhbmQgbmV2ZXIgZGVjcmVtZW50aW5nIHRoZSBgdG90YWxfbGVuYC4gIFRoaXMgaXMgYSBkZWZpbml0ZSBoYW5nIGNvbmRpdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBjcmFzaC5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIHdpdGhpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NgIHRvIHNlZSBpZiBgY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8uIElmIGl0IGlzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlLCBwcmV2ZW50aW5nIHRoZSBsb29wLiAgVGhpcyBkaXJlY3RseSBtaXRpZ2F0ZXMgdGhlIGhhbmcuXG5cbk5vdywgd2hlcmUgY291bGQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBhY3R1YWxseSBiZSB6ZXJvPyBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGEgbWFsaWNpb3VzIG9yIGNvcnJ1cHRlZCByZXNwb25zZSBvciBzZXR1cCBwYWNrZXQgY291bGQgcG90ZW50aWFsbHkgc2V0IHRoaXMgdmFsdWUsIG9yIHBlcmhhcHMgaXQgY291bGQgYmUgbWlzY29uZmlndXJlZCB2aWEgYSB2aXJ0dWFsIGRldmljZSwgVVNCIGRldmljZSwgb3IgZXZlbiBhIHNpbXVsYXRlZCBORkNDLiBUaGlzIGlzIHRoZSBjcml0aWNhbCB2ZWN0b3IuIEFuZCByZW1lbWJlciwgdGhlIGNvZGUgaXMgZXhlY3V0ZWQgd2hlbiBzZW5kaW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2Ugc29ja2V0cywgbG9vcGJhY2ssIG9yIGFueSB0cmFuc2NlaXZlIG9wZXJhdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGtub3cgTkZDIGFuZCBOQ0kgYXJlIHZpcnR1YWxpemVkIHZpYSBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIFVTQiBlbXVsYXRpb24gKGBDT05GSUdfTkZDX01SVkxfVVNCYCksIGFuZCBzb2NrZXQgaW50ZXJmYWNlcyAoZS5nLiwgQUZfTkZDIHJhdyBzb2NrZXQpLiBTbywgeWVzLCBpdCBzZWVtcyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZSByZWxldmFudCBjb2RlIGlzIGxvY2F0ZWQgaW4gYG5ldC9uZmMvbmNpL2RhdGEuY2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIGV4cGxvaXRzLlxuXG5Ob3csIHdoaWNoIHN5bWJvbHMgc2hvdWxkIEkgZm9jdXMgb24/IGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCwgYnV0IGl0J3MgKnN0YXRpYyouICBXYWl0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIGFsdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIGluIGEgYC5jYCBmaWxlIGFuZCBjYW4gaGF2ZSBhIHN5bWJvbCBpbiB2bWxpbnV4LiBUbyBiZSBzYWZlLCBsZXQncyBpbmNsdWRlIGJvdGggYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCBhbmQgYG5jaV9zZW5kX2RhdGFgLiBgbmNpX3NlbmRfZGF0YWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBhbmQgaXQncyB0aGUgZGlyZWN0IGNhbGxlci4gT3RoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIGluY2x1ZGUgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV90bV9zZW5kYCwgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYW5kIGBuY2lfaGNpX3NlbmRfZGF0YWAuXG5cblRoZXJlZm9yZSwgSSB0aGluayBib3RoIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgYW5kIGBuY2lfc2VuZF9kYXRhYCBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMuIFRoZXkgYXJlIHNwZWNpZmljIGFuZCBub24tdWJpcXVpdG91cywgd2hpY2ggaXMgd2hhdCBJIHdhbnQuXG5cbkZpbmFsbHksIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBgZGF0YS5vYCBpcyBwYXJ0IG9mIGBDT05GSUdfTkZDX05DSWAsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19ORkNgLCBzbyBhcyBsb25nIGFzIE5GQyBOQ0kgaXMgZW5hYmxlZCwgdGhpcyBjb2RlIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDMuMjU3OTc5ODc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0ODMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL0tjb25maWctNS1cXG5uZXQvbmZjL0tjb25maWc6NjptZW51Y29uZmlnIE5GQ1xcbm5ldC9uZmMvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDMuNDI4NDc5NDMxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxMDcxNDA1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDb25maWd1cmF0aW9uIGZvciBORkMvTkNJIENvcmUgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIHJldmlzaXRlZCB0aGUgYG5ldC9uZmMvbmNpL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBORkMgTkNJIHN1cHBvcnQuIEkgbm90ZWQgdGhhdCBgTkZDX05DSWAgZGVwZW5kcyBvbiBgTkZDYCBhbmQgaXMgdHJpc3RhdGUuIEZ1cnRoZXJtb3JlLCB2aXJ0dWFsIGRldmljZSBhbmQgVVNCIGRldmljZSBlbXVsYXRpb24gZGVwZW5kIG9uIGBORkNfTkNJYC4gSSB0aGVuIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX05GQ2AsIGBDT05GSUdfTkZDX05DSWAsIGFuZCB0aGUgb3B0aW9uYWwgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLiAgSSBkb3VibGUtY2hlY2tlZCB0aGUgXCJFbmFibGVDb25maWdzXCIgZm9ybWF0LCBlbnN1cmluZyBJJ20gdXNpbmcgdGhlIGZsYWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg6IFwiTkZDXCIsIFwiTkZDX05DSVwiLlxuXG5Ob3cgZm9yIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCB3aXRoaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wIGlmIHRoZSBwYXlsb2FkIGxlbmd0aCBpcyB6ZXJvLiAgVGhpcyBpbXBhY3RzIHRoZSBkYXRhIGZyYWdtZW50YXRpb24gcGF0aCB3aXRoaW4gdGhlIE5GQy9OQ0kgY29yZSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHZpcnR1YWwgTkNJIGRldmljZXMgb3IgVVNCIE5GQyBjb250cm9sbGVycy4gVGhpcyBtZWFucyBmdXp6aW5nIGNhbiBkaXJlY3RseSB0ZXN0IGVycm9yIGhhbmRsaW5nIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgZWRnZSBjYXNlcyBpbiBOQ0kncyBib3VuZGFyeSBjb25kaXRpb25zLlxuXG5UaGVyZWZvcmUsIG15IGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYFJlYXNvbmluZ2A6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgZnJhZ21lbnRhdGlvbiBwYXRoIGluIHRoZSBORkMvTkNJIGNvcmUgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHZhbGlkYXRpb24gZm9yIGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzYCwgd2hpY2ggcHJldmlvdXNseSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaWYgemVyby4gVGhpcyBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmlydHVhbCBOQ0kgZGV2aWNlcyBvciBVU0IgTkZDIGNvbnRyb2xsZXJzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIiwgXCJuY2lfc2VuZF9kYXRhXCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk5GQ1wiLCBcIk5GQ19OQ0lcIl1gXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTM3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo0OC41MzU2MjMwODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiBpcyAwIGR1cmluZyBOQ0kgVFggcGFja2V0IGZyYWdtZW50YXRpb24uIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgTkZDL05DSSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBORkMgc29ja2V0cywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSkgb3IgZW11bGF0ZWQgVVNCIGRldmljZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBib3VuZGFyeSBjb25kaXRpb25zIGluIE5DSSBwYWNrZXQgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfcXVldWVfdHhfZGF0YV9mcmFnc1wiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKCkgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIGlzIDAgZHVyaW5nIE5DSSBUWCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBORkMvTkNJIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE5GQyBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKSBvciBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gTkNJIHBhY2tldCBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo0OC42MTE3OTc1NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTM2NTY0NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDguNjEyNDU3ODE3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc1MzU4OTc5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzYW5pdHkgY2hlY2sgaW4gYG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKClgIHRvIGVuc3VyZSBgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBub24temVybyBiZWZvcmUgZW50ZXJpbmcgYSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBsb29wLiBXaGVuIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyB6ZXJvLCB0aGUgbG9vcCB3b3VsZCBlbnRlciBhbiBpbmZpbml0ZSBjeWNsZSAoc29mdCBsb2NrdXAgLyBPT00pIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIGZyYWdtZW50IHRoZSBidWZmZXIgd2l0aCBhIGZyYWdtZW50IHNpemUgb2YgMC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG5vciBkb2VzIGl0IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBpc3N1ZSBhZGRyZXNzZWQgaXMgYW4gaW5maW5pdGUgbG9vcCAvIGRlbmlhbCBvZiBzZXJ2aWNlLCB3aGljaCBkb2VzIG5vdCBwcmVzZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGJkYzlkNWI5MDFkMDRkZDQ0MmUzZmQ3MTFmNDBjM2M1YTAxMTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcbmluZGV4IDQyNTNlZGVhNWM4ZGIuLmI1NDljZWY3ZGMyZTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9kYXRhLmNcbisrKyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuQEAgLTExNCw2ICsxMTQsMTEgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK1x0aWYgKCFjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0XHRyYyA9IC1FUFJPVE87XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjQ4LjYxMjQ1ODg4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDIwMjIxODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZDIE5DSSBEYXRhIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSByZWxldmFudCBjb2RlIHNlZW1zIHRvIGJlIGluIGBuZXQvbmZjL25jaS9kYXRhLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBsb29rIGF0IHRoZSBmaWxlLiBUaW1lIHRvIGVpdGhlciB3aGlwIG91dCBgcmVhZC1maWxlYCBvciBmaXJlIHVwIGBncmVwcGVyYCwgZGVwZW5kaW5nIG9uIHdoYXQncyBxdWlja2VzdCBhbmQgYXZhaWxhYmxlLiBMZXQncyBzZWUuLi4gSSB0aGluayB0aGUgY3J1eCBvZiB0aGUgY2hhbmdlcyBpcyBwcm9iYWJseSBhcm91bmQgbGluZSAxMTQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbi4gVGltZSB0byByZWFkIGFyb3VuZCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjUzLjYzMjY4MzYwMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9kYXRhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0aWYgKCFjb25uX2luZm8pXFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0cmV0dXJuIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuICA5ODpcXHRcXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuICA5OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XFxuIDEwMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxMDE6XFx0XFx0aW50IHRvdGFsX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDI6XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gMTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEwNDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzX3E7XFxuIDEwNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7XFxuIDEwNjpcXHRcXHRpbnQgZnJhZ19sZW47XFxuIDEwNzpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRwcl9kZWJ1ZyhcXFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHRvdGFsX2xlbik7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuIDExMjpcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAxMTM6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAoIWNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxMTg6XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbiAxMTk6XFx0XFx0XFx0Z290byBleGl0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHR3aGlsZSAodG90YWxfbGVuKSB7XFxuIDEyNTpcXHRcXHRcXHRmcmFnX2xlbiA9XFxuIDEyNjpcXHRcXHRcXHRcXHRtaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0XFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbiAxMzA6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9BVE9NSUMpO1xcbiAxMzE6XFx0XFx0XFx0aWYgKHNrYl9mcmFnID09IE5VTEwpIHtcXG4gMTMyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gMTMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxMzQ6XFx0XFx0XFx0fVxcbiAxMzU6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiX2ZyYWcsIE5DSV9EQVRBX0hEUl9TSVpFKTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0LyogZmlyc3QsIGNvcHkgdGhlIGRhdGEgKi9cXG4gMTM4OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2JfZnJhZywgZGF0YSwgZnJhZ19sZW4pO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRcXHQvKiBzZWNvbmQsIHNldCB0aGUgaGVhZGVyICovXFxuIDE0MTpcXHRcXHRcXHRuY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2JfZnJhZyxcXG4gMTQyOlxcdFxcdFxcdFxcdFxcdCAgKCh0b3RhbF9sZW4gPT0gZnJhZ19sZW4pID9cXG4gMTQzOlxcdFxcdFxcdFxcdFxcdCAgIChOQ0lfUEJGX0xBU1QpIDogKE5DSV9QQkZfQ09OVCkpKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2ZnJhZ3NfcSwgc2tiX2ZyYWcpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHRkYXRhICs9IGZyYWdfbGVuO1xcbiAxNDg6XFx0XFx0XFx0dG90YWxfbGVuIC09IGZyYWdfbGVuO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZnJhZ19sZW4gJWQsIHJlbWFpbmluZyB0b3RhbF9sZW4gJWRcXFxcblxcXCIsXFxuIDE1MTpcXHRcXHRcXHRcXHQgZnJhZ19sZW4sIHRvdGFsX2xlbik7XFxuIDE1MjpcXHRcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdC8qIHF1ZXVlIGFsbCBmcmFnbWVudHMgYXRvbWljYWxseSAqL1xcbiAxNTU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHR3aGlsZSAoKHNrYl9mcmFnID0gX19za2JfZGVxdWV1ZShcXHUwMDI2ZnJhZ3NfcSkpICE9IE5VTEwpXFxuIDE1ODpcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZuZGV2LVxcdTAwM2V0eF9xLCBza2JfZnJhZyk7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EubG9jaywgZmxhZ3MpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi9cXG4gMTYzOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRnb3RvIGV4aXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdGZyZWVfZXhpdDpcXG4gMTY4OlxcdFxcdHdoaWxlICgoc2tiX2ZyYWcgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZmcmFnc19xKSkgIT0gTlVMTClcXG4gMTY5OlxcdFxcdFxcdGtmcmVlX3NrYihza2JfZnJhZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjUzLjYzMjc3OTcyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyMTgyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBJbmZpbml0ZSBMb29wKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIGxvb2sgYXQgYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYC4gSWYgdGhhdCB2YWx1ZSBoYXBwZW5zIHRvIGJlIHplcm8sIHdoaWNoIGlzIGEgcG9zc2liaWxpdHksIHRoZW4gdXNpbmcgYG1pbl90YCB3aXRoIGB0b3RhbF9sZW5gIHdvdWxkIHJlc3VsdCBpbiBhIHplcm8gdmFsdWUgZm9yIHRoZSBmcmFnbWVudCBsZW5ndGgsIGFzc3VtaW5nIGB0b3RhbF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGF0J3MgYSBwcm9ibGVtIGJlY2F1c2UgdGhlIG5leHQgbGluZSBjYWxjdWxhdGVzIGB0b3RhbF9sZW4gLT0gMGAuIFRoaXMgbWVhbnMgdGhhdCBgdG90YWxfbGVuYCB3b3VsZCBuZXZlciBkZWNyZW1lbnQsIGNyZWF0aW5nIGFuIGluZmluaXRlIGxvb3AuIEknbSBndWVzc2luZyBTeXprYWxsZXIgcHJvYmFibHkgZm91bmQgYSBodW5nIHRhc2sgb3Igc29mdCBsb2NrdXAgc3RlbW1pbmcgZnJvbSBleGFjdGx5IHRoaXMgc2NlbmFyaW8uIFRvIHZlcmlmeSBhbmQgdW5kZXJzdGFuZCB0aGUgcm9vdCBjYXVzZSwgSSBzaG91bGQgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2xsIHVzZSBgZ2l0IGxvZ2AgdG8gaG9wZWZ1bGx5IHVuY292ZXIgdGhlIHNwZWNpZmljIGlzc3VlIHRoaXMgY29kZSBhZGRyZXNzZXMsIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGhhbmdzIG9yIGxvb3BzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTUuOTA0OTY1NjY4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA0MDgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL2RhdGEuYz05NT1FWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xcbm5ldC9uZmMvbmNpL2RhdGEuYy05Ni1cXG5uZXQvbmZjL25jaS9kYXRhLmM6OTc6c3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9kYXRhLmMtOTgtXFx0XFx0XFx0XFx0ICAgX191OCBjb25uX2lkLFxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jPTE3Nj1pbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvZGF0YS5jLTE5Ni1cXHRcXHQvKiBmcmFnbWVudCBwYWNrZXQgYW5kIHF1ZXVlIHRoZSBmcmFnbWVudHMgKi9cXG5uZXQvbmZjL25jaS9kYXRhLmM6MTk3OlxcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcXG5uZXQvbmZjL25jaS9kYXRhLmMtMTk4LVxcdFxcdGlmIChyYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDo1Ni4xODUzODA5NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcxODc3OTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgRHJpdmVyJ3MgRGF0YSBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyB3aXRoIGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAuIElmIHRoYXQgdmFsdWUgaXMgemVybywgd2UndmUgZ290IGEgcHJvYmxlbS4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBpbiBhIHZ1bG5lcmFibGUgc3RhdGU6XG5cbmBgYGNcbndoaWxlICh0b3RhbF9sZW4pIHtcbiAgICBmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7IC8vIGZyYWdfbGVuID0gMFxuICAgIHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LCAoTkNJX0RBVEFfSERSX1NJWkUgKyAwKSwgR0ZQX0FUT01JQyk7XG4gICAgLi4uXG4gICAgdG90YWxfbGVuIC09IDA7XG5gYGBcblxuRXNzZW50aWFsbHksIHdlJ2QgaGF2ZSBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgYWxsb2NhdGluZyBTS0JzIChzb2NrZXQgYnVmZmVyKSB1bnRpbCB0aGUgc3lzdGVtIHJhbiBvdXQgb2YgbWVtb3J5IG9yIGxvY2tlZCB1cC4gTm90IGdvb2QuXG5cblRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOlxuXG5gYGBjXG5cdGlmICghY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcblx0XHRyYyA9IC1FUFJPVE87XG5cdFx0Z290byBleGl0O1xuXHR9XG5gYGBcblxuTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgXCJEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzP1wiIFRoZSB1c3VhbCBzdXNwZWN0czogdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QuIE5vcGUsIG5vcGUsIGFuZCAqZGVmaW5pdGVseSogbm9wZS4gSXQncyByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSAoYC1FUFJPVE9gKSBhbmQgZXhpdGluZywgc28gd2UncmUgc2FmZSBvbiB0aGF0IGZyb250LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB3aGVyZSBgZXhpdDpgIGxlYWRzLiBQZWVraW5nIGF0IGBuY2lfcXVldWVfdHhfZGF0YV9mcmFnc2AgcmV2ZWFsczpcblxuYGBgY1xuZXhpdDpcblx0cmV0dXJuIHJjO1xuYGBgXG5cbkFuZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG5jaV9zZW5kX2RhdGFgOlxuXG5gYGBjXG5pbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxue1xuXHQuLi5cblx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IpO1xuXHRpZiAocmMpIHtcblx0XHQuLi5cblx0fVxuYGBgXG5cblNvLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyBiYWNrIHVwIHRoZSBzdGFjay4gVGhpcyBpcyBhIHNlbnNpYmxlIGFuZCBzZWN1cmUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfcGt0X3BheWxvYWRfbGVuYCBiZWluZyB6ZXJvLiBUbyBiZSBjb21wbGV0ZWx5IGNlcnRhaW4sIEkgd291bGQgbmVlZCB0byBjYXJlZnVsbHkgcmVhZCBsaW5lcyAxNzAtMjIwIG9mIGBuZXQvbmZjL25jaS9kYXRhLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIHRoaXMgcGF0Y2ggYXBwZWFycyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MDQxNjQyNjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdGV4aXQ6XFxuIDE3MjpcXHRcXHRyZXR1cm4gcmM7XFxuIDE3MzpcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdC8qIFNlbmQgTkNJIGRhdGEgKi9cXG4gMTc2OlxcdGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE3NzpcXHR7XFxuIDE3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAxNzk6XFx0XFx0aW50IHJjID0gMDtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0cHJfZGVidWcoXFxcImNvbm5faWQgMHgleCwgcGxlbiAlZFxcXFxuXFxcIiwgY29ubl9pZCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xcbiAxODQ6XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4gMTg1OlxcdFxcdFxcdHJjID0gLUVQUk9UTztcXG4gMTg2OlxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xcbiAxOTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xcbiAxOTE6XFx0XFx0XFx0Lyogbm8gbmVlZCB0byBmcmFnbWVudCBwYWNrZXQgKi9cXG4gMTkyOlxcdFxcdFxcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EsIHNrYik7XFxuIDE5NTpcXHRcXHR9IGVsc2Uge1xcbiAxOTY6XFx0XFx0XFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXFxuIDE5NzpcXHRcXHRcXHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuIDE5ODpcXHRcXHRcXHRpZiAocmMpIHtcXG4gMTk5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGZyYWdtZW50IHR4IGRhdGEgcGFja2V0XFxcXG5cXFwiKTtcXG4gMjAwOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9leGl0O1xcbiAyMDE6XFx0XFx0XFx0fVxcbiAyMDI6XFx0XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCA9IGNvbm5faWQ7XFxuIDIwNTpcXHRcXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXR4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNldHhfd29yayk7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdGdvdG8gZXhpdDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0ZnJlZV9leGl0OlxcbiAyMTA6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdGV4aXQ6XFxuIDIxMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRFWFBPUlRfU1lNQk9MKG5jaV9zZW5kX2RhdGEpO1xcbiAyMTY6XFx0XFxuIDIxNzpcXHQvKiAtLS0tLS0tLS0tLS0tLS0tLSBOQ0kgUlggRGF0YSAtLS0tLS0tLS0tLS0tLS0tLSAqL1xcbiAyMTg6XFx0XFxuIDIxOTpcXHRzdGF0aWMgdm9pZCBuY2lfYWRkX3J4X2RhdGFfZnJhZyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDAuOTA0MjQ2OTUzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyNDQwNzYxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBUaG9yb3VnaCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgS01TQU4gaXMgdGhhdCBpdCdzIG5vdCBuZWVkZWQgaGVyZSwgYW5kIEkndmUgbm93IG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGUgc2l0dWF0aW9uIHRvIGNvbmZpcm0gdGhhdC5cblxuRmlyc3RseSwgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItXHUwMDNlbGVuYCkgaXMgemVybyBhbmQgdGhlIG1heGltdW0gcGF5bG9hZCBsZW5ndGggKGBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmApIGlzIGFsc28gemVybywgdGhlIG9yaWdpbmFsIGNvZGUsIGV2ZW4gd2l0aCB0aGUgcGF0Y2gsIHdvdWxkIGNvcnJlY3RseSBoYW5kbGUgdGhpcyDigJMgZXNzZW50aWFsbHkgYWxsb3dpbmcgdGhlIGhlYWRlciB0byBiZSBhZGRlZC4gSWYgdGhlIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBtYXggcGF5bG9hZCBpcyB6ZXJvLCB0aGUgcGF0Y2ggY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgaXNzdWUuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHR5cGljYWwgYXJlYXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaDogbm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gbm8gaW5mby1sZWFrcyB0aGVyZS4gYGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHNvIG5vIHJlbGlhbmNlIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUncyBubyB3YXkgdGhlIGxvZ2ljIGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzOyBpbnN0ZWFkLCB0aGUgbG9naWMgZXhwbGljaXRseSBwcmV2ZW50cyBpdCBpbiB0aGlzIHNwZWNpZmljIGVkZ2UgY2FzZS4gVGhpcyBwYXRjaCBhY3R1YWxseSAqcHJldmVudHMqIGFuIGluZmluaXRlIGxvb3Agb3Igb3RoZXIgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciB3aGVuIHRoZSBtYXggcGF5bG9hZCBsZW5ndGggaXMgemVyby5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgY29kZSBjaGFuZ2VzIGRvbid0IHByaW1hcmlseSByaXNrIHRoZSBzb3J0cyBvZiBidWdzIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMgd291bGQgY2F0Y2g6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gVGhlIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGFzIGV4cGVjdGVkLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBwcmV2ZW50cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCAqcHJldmVudHMqIGEgYnVnIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYmVoYXZpb3Igb2YgY29uY2VybiwgYW5kIHNpbmNlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgY2hlY2tzIGRvbid0IGFwcGx5LCBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZC4gVGhlIGNvZGUgY2hhbmdlcyBkb24ndCBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIE9OTFkgYmUgZGV0ZWN0ZWQgYnkgS01TQU4uXG5cbldpdGggdGhpcyBsZXZlbCBvZiBjbGFyaXR5IGFuZCBjZXJ0YWludHksIEknbSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTYsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDYuMTQ4MzI2MTM3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2FuaXR5IGNoZWNrIGluIGBuY2lfcXVldWVfdHhfZGF0YV9mcmFncygpYCB0byBlbnN1cmUgYGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgbm9uLXplcm8gYmVmb3JlIGVudGVyaW5nIGEgcGFja2V0IGZyYWdtZW50YXRpb24gbG9vcC4gV2hlbiBgbWF4X3BrdF9wYXlsb2FkX2xlbmAgaXMgemVybywgdGhlIGxvb3Agd291bGQgZW50ZXIgYW4gaW5maW5pdGUgY3ljbGUgKHNvZnQgbG9ja3VwIC8gT09NKSByZXBlYXRlZGx5IHRyeWluZyB0byBmcmFnbWVudCB0aGUgYnVmZmVyIHdpdGggYSBmcmFnbWVudCBzaXplIG9mIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBub3IgZG9lcyBpdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgaXNzdWUgYWRkcmVzc2VkIGlzIGFuIGluZmluaXRlIGxvb3AgLyBkZW5pYWwgb2Ygc2VydmljZSwgd2hpY2ggZG9lcyBub3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNhbml0eSBjaGVjayBpbiBgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MoKWAgdG8gZW5zdXJlIGBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIG5vbi16ZXJvIGJlZm9yZSBlbnRlcmluZyBhIHBhY2tldCBmcmFnbWVudGF0aW9uIGxvb3AuIFdoZW4gYG1heF9wa3RfcGF5bG9hZF9sZW5gIGlzIHplcm8sIHRoZSBsb29wIHdvdWxkIGVudGVyIGFuIGluZmluaXRlIGN5Y2xlIChzb2Z0IGxvY2t1cCAvIE9PTSkgcmVwZWF0ZWRseSB0cnlpbmcgdG8gZnJhZ21lbnQgdGhlIGJ1ZmZlciB3aXRoIGEgZnJhZ21lbnQgc2l6ZSBvZiAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgbm9yIGRvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlIGlzc3VlIGFkZHJlc3NlZCBpcyBhbiBpbmZpbml0ZSBsb29wIC8gZGVuaWFsIG9mIHNlcnZpY2UsIHdoaWNoIGRvZXMgbm90IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2h6k8[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 10:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 10:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2] Phase: Succeeded StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 10:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:35:17 +0000 UTC FinishedAt: 2026-09-13 10:35:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-1488580760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:27 +0000 UTC FinishedAt: 2026-09-13 10:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:35:27 +0000 UTC FinishedAt: 2026-09-13 10:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*69c0a542-092f-45d4-8fbf-e3075ae2bb91,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-1488580760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "88fd2ee4-706b-458e-bfd3-5612bb61d43a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-3068734926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:35:27 +0000 UTC FinishedAt: 2026-09-13 10:56:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*69c0a542-092f-45d4-8fbf-e3075ae2bb91,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-1488580760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "88fd2ee4-706b-458e-bfd3-5612bb61d43a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-3068734926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 10:56:39 +0000 UTC FinishedAt: 2026-09-13 10:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 10:56:39 +0000 UTC FinishedAt: 2026-09-13 10:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 10:56:39 +0000 UTC FinishedAt: 2026-09-13 10:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 10:56:39 +0000 UTC FinishedAt: 2026-09-13 10:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-4258032895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 10:57:08 +0000 UTC FinishedAt: 2026-09-13 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 10:57:08 +0000 UTC FinishedAt: 2026-09-13 10:58:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88fd2ee4-706b-458e-bfd3-5612bb61d43a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-3068734926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 10:59:08 +0000 UTC FinishedAt: 2026-09-13 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 10:59:08 +0000 UTC FinishedAt: 2026-09-13 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 10:59:08 +0000 UTC FinishedAt: 2026-09-13 11:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 10:59:08 +0000 UTC FinishedAt: 2026-09-13 11:22:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*69c0a542-092f-45d4-8fbf-e3075ae2bb91,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-4258032895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "491b5936-8851-4342-a1b8-36bd83586607", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-1507799827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:59:08 +0000 UTC FinishedAt: 2026-09-13 11:22:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*69c0a542-092f-45d4-8fbf-e3075ae2bb91,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-4258032895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "491b5936-8851-4342-a1b8-36bd83586607", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-1507799827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:22:59 +0000 UTC FinishedAt: 2026-09-13 11:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:22:59 +0000 UTC FinishedAt: 2026-09-13 11:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:22:59 +0000 UTC FinishedAt: 2026-09-13 11:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:22:59 +0000 UTC FinishedAt: 2026-09-13 11:24:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*491b5936-8851-4342-a1b8-36bd83586607,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-1507799827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*88fd2ee4-706b-458e-bfd3-5612bb61d43a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*491b5936-8851-4342-a1b8-36bd83586607,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-3068734926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-1507799827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 11:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 11:25:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-1694033816/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 11:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 11:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:25:29 +0000 UTC FinishedAt: 2026-09-13 11:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:25:40 +0000 UTC FinishedAt: 2026-09-13 14:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2h6k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_queue_tx_data_frags","nci_send_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI"],"series_id":"7156c77e-e202-4e94-b140-5f3d1a9e5ee4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:25:40 +0000 UTC FinishedAt: 2026-09-13 14:29:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88fd2ee4-706b-458e-bfd3-5612bb61d43a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*491b5936-8851-4342-a1b8-36bd83586607,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-3068734926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-build-action-1507799827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2h6k8/series-workflow2h6k8-convert-artifact-1694033816/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}