Name: series-workflowbmkr6 Phase: Succeeded StartedAt: 2026-07-18 16:40:26 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[0] Phase: Succeeded StartedAt: 2026-07-18 16:40:26 +0000 UTC FinishedAt: 2026-07-18 17:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 16:40:26 +0000 UTC FinishedAt: 2026-07-18 17:07:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA" ], "series_id": "2b92b30c-7da4-4d0e-9f77-58210d51f51c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_dma_map_iter_start", "md_submit_bio", "raid1_end_write_request", "raid1_write_request", "narrow_write_error", "handle_write_finished", "handle_read_error", "raid10_end_write_request", "handle_write_completed", "nvme_rdma_dma_map_req", "nvme_rdma_queue_rq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19kbWFfbWFwX2l0ZXJfc3RhcnQmIzM0OywKICAgICYjMzQ7bWRfc3VibWl0X2JpbyYjMzQ7LAogICAgJiMzNDtyYWlkMV9lbmRfd3JpdGVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtyYWlkMV93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7cmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MDNiNmM5NTA3N2Q3NGM3YjUyZjgzZGRhYzBiODk2ZmMxZjM5YzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6MDc6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuQEAgLTE5MCw3ICYjNDM7MTkwLDE1IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9ORTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRpdGVyLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU5WQUw7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUDJQIHRyYW5zZmVycyB0aGF0IHRoZSBtYXBwaW5nIGxheWVyIGNhbm5vdCBzdXBwb3J0XG4mIzQzO1x0XHQgKiByZXBvcnQgQkxLX1NUU19UQVJHRVQsIG1hdGNoaW5nIGRtYV9tYXBfc2d0YWJsZSgpJiMzOTtzXG4mIzQzO1x0XHQgKiAtRVJFTU9URUlPIGFuZCB0aGUgcHJlLWJsa19ycV9kbWFfbWFwIG52bWUgYmVoYXZpb3I6XG4mIzQzO1x0XHQgKiB0aGUgZmFpbHVyZSBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZGV2aWNlIHBhaXJpbmcsIHNvXG4mIzQzO1x0XHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXG4mIzQzO1x0XHQgKiBub3IgYmUgbWlzdGFrZW4gZm9yIGFuIGludmFsaWQgcmVxdWVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCAmIzQzOzQ1MSwxOCBAQCBzdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi9cbi1cdGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2PSB+UkVRX05PTUVSR0U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BXG4mIzQzO1x0ICogYmlvcyBSRVFfTk9NRVJHRSBpcyBsb2FkLWJlYXJpbmc6IHRoZSBETUEgbWFwcGluZyB0eXBlIG9mIGFcbiYjNDM7XHQgKiByZXF1ZXN0IGlzIHJlc29sdmVkIG9uY2UsIGZyb20gaXRzIGZpcnN0IHNlZ21lbnQsIHNvIHJlcXVlc3RzXG4mIzQzO1x0ICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWdcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBtZXJlbHkgcHJlc2VydmUgaXQgLS0gYmlvcyBidWlsdCB0aHJvdWdoIHRoZVxuJiM0MztcdCAqIGJ2ZWMtaXRlciBwYXRoIGFycml2ZSB3aXRob3V0IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtZF9iaW9faXNfcDJwZG1hKGJpbykpXG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2PSB+UkVRX05PTUVSR0U7XG4gXG4gXHRtZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXG5pbmRleCBkOGRhZjBmNzVjYmJlOC4uYjFhYmZjODljZmMwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQuaFxuQEAgLTExLDggJiM0MzsxMSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbkBAIC0yMiw2ICYjNDM7MjQsMzUgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFx1MDAzZVxuIFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiB0aGUgYmlvIGNhcnJpZXMgUENJIFAyUERNQSAocGVlciBkZXZpY2UgbWVtb3J5KSBwYWdlcy4gUmVhZFxuJiM0MzsgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXG4mIzQzOyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmVcbiYjNDM7ICogYmlfdmNudCA9PSAwIGJ1dCBhIHZhbGlkIGJpX2lvX3ZlYyBzaGFyZWQgd2l0aCB0aGUgcGFyZW50LiBQMlBETUEgYW5kXG4mIzQzOyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXG4mIzQzOyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkOlxuJiM0MzsgKiBiaW9faGFzX2RhdGEoKSBpcyBmYWxzZSBhdCBjb21wbGV0aW9uIHRpbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUcnVlIHdoZW4gYSBsZWcgYmlvIGZhaWxlZCBiZWNhdXNlIGl0cyBQMlBETUEgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWRcbiYjNDM7ICogdG8gdGhpcyBtZW1iZXIgKEJMS19TVFNfVEFSR0VUIGZyb20gYmxrX2RtYV9tYXBfaXRlcl9zdGFydCgpKS4gVXNhYmxlIGF0XG4mIzQzOyAqIGNvbXBsZXRpb24gdGltZSwgdW5saWtlIG1kX2Jpb19pc19wMnBkbWEoKTogbGVnIGJpb3MgYXJlIGNsb25lcyBzaGFyaW5nXG4mIzQzOyAqIHRoZSBtYXN0ZXIgYmlvJiMzOTtzIGJ2ZWMgdGFibGUsIHdoaWNoIG91dGxpdmVzIHRoZSBsZWcmIzM5O3MgZW5kX2lvLCBidXQgdGhlaXJcbiYjNDM7ICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19UQVJHRVQgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxuICAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggYWZlMmNhOTZhZDhjMjIuLjI0MWMyOTk0YjZhM2Y0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLmNcbkBAIC00OTEsNyAmIzQzOzQ5MSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0aWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAvKiBXZSBuZXZlciB0cnkgRmFpbEZhc3QgdG8gV3JpdGVNb3N0bHkgZGV2aWNlcyAqL1xuLVx0XHQgICAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgLyogQSBtYXBwaW5nIGZhaWx1cmUgc2F5cyBub3RoaW5nIGFib3V0IGRldmljZSBoZWFsdGggKi9cbiYjNDM7XHRcdCAgICAhbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpIHtcbiBcdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuIFx0XHR9XG4gXG5AQCAtMTU3NSw5ICYjNDM7MTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0LypcbiBcdFx0ICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzXG4gXHRcdCAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kXG4tXHRcdCAqIGJpbyBsYXRlci5cbiYjNDM7XHRcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXG4mIzQzO1x0XHQgKiB0aGUgZGF0YSB3aXRoIGJpb19jb3B5X2RhdGEoKSwgYSBDUFUgY29weSB0aGF0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy5cbiBcdFx0ICovXG4tXHRcdGlmICghaXNfZGlzY2FyZCBcdTAwMjZcdTAwMjYgcmRldiBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbiBcdFx0XHR3cml0ZV9iZWhpbmQgPSB0cnVlO1xuIFxuIFx0XHRyMV9iaW8tXHUwMDNlYmlvc1tpXSA9IE5VTEw7XG5AQCAtMjUxNCw3ICYjNDM7MjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuJiM0MztzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLVx1MDAzZW1kZGV2O1xuIFx0c3RydWN0IHIxY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG5AQCAtMjUyOCw2ICYjNDM7MjUzMywxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0ICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJiMzOTt0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcyBzb21laG93LlxuIFx0ICpcbiYjNDM7XHQgKiBXaXRoICYjMzk7Y29hcnNlJiMzOTssIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmRcbiYjNDM7XHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xuJiM0MztcdCAqIGNhbm5vdCBmaW5kIGEgZ29vZCBibG9jayAoUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgZmFpbCB0aGVcbiYjNDM7XHQgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzXG4mIzQzO1x0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cbiYjNDM7XHQgKlxuIFx0ICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi5cbiBcdCAqL1xuIFxuQEAgLTI1NDIsOSAmIzQzOzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuLVx0c2VjdG9ycyA9ICgoc2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpXG4tXHRcdCAgIFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXG4tXHRcdC0gc2VjdG9yO1xuJiM0MztcdGlmIChjb2Fyc2UpXG4mIzQzO1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZWN0b3JzID0gKChzZWN0b3IgJiM0MzsgYmxvY2tfc2VjdG9ycylcbiYjNDM7XHRcdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbiYjNDM7XHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI1NjIsNiAmIzQzOzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0XHR9XG4gXG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHIxX2Jpby1cdTAwM2VzZWN0b3I7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVx1MDAzZXNlY3RvcnMgXHUwMDNjXHUwMDNjIDk7XG4gXG5AQCAtMjYyMyw3ICYjNDM7MjY0MCwyMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHRcdFx0ICogZXJyb3JzLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZhaWwgPSB0cnVlO1xuLVx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuJiM0MztcdFx0XHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby1cdTAwM2ViaW9zW21dKSlcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGVcbiYjNDM7XHRcdFx0XHQgKiByYW5nZSBpZGVudGljYWxseSwgc28gbmFycm93aW5nIGJsb2NrIGJ5XG4mIzQzO1x0XHRcdFx0ICogYmxvY2sgY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXG4mIzQzO1x0XHRcdFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzXG4mIzQzO1x0XHRcdFx0ICogQkxLX1NUU19UQVJHRVQsIHNvIGRvbiYjMzk7dCBhc3N1bWUuICBSZXRyeVxuJiM0MztcdFx0XHRcdCAqIHRoZSByYW5nZSBvbmNlOiBpZiBpdCBmYWlscywgcmVjb3JkIGl0IGluXG4mIzQzO1x0XHRcdFx0ICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUgd2FzIG5vdGhpbmdcbiYjNDM7XHRcdFx0XHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0cmRldl9kZWNfcGVuZGluZyhjb25mLVx1MDAzZW1pcnJvcnNbbV0ucmRldixcbiBcdFx0XHRcdFx0IGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHR9XG5AQCAtMjY1MCw2ICYjNDM7MjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdLnJkZXY7XG4gXHRzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tXHUwMDNlYmlvc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXTtcbiYjNDM7XHRib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2OSw2ICYjNDM7MjcwMCwxNSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiBcdCAqL1xuIFx0aWYgKG1kZGV2LVx1MDAzZXJvKSB7XG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiYjNDM7XHR9IGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuJiM0MztcdFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxuJiM0MztcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbiYjMzk7dCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbiYjNDM7XHRcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcbiYjNDM7XHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiBcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbmluZGV4IDBhM2NmZGQzZjVkZjgwLi5iMjQ0MjlhMTkyNTRkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC00ODksNyAmIzQzOzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuIFx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbiYjNDM7XHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xuJiM0MztcdFx0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0XHRtZF9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0XHR9XG4gXG5AQCAtMjc4Niw3ICYjNDM7Mjc4OCw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiYjNDM7c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcbiB7XG4gXHRzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLVx1MDAzZW1hc3Rlcl9iaW87XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjEwX2Jpby1cdTAwM2VtZGRldjtcbkBAIC0yODAwLDYgJiM0MzsyODAyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2VzbiYjMzk7dCBleGFjdGx5IGFsaWduIHdpdGhcbiBcdCAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMuXG4gXHQgKlxuJiM0MztcdCAqIFdpdGggJiMzOTtjb2Fyc2UmIzM5OywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZFxuJiM0MztcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXG4mIzQzO1x0ICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZVxuJiM0MztcdCAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHNcbiYjNDM7XHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxuJiM0MztcdCAqXG4gXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxuIFx0ICovXG4gXG5AQCAtMjgxNCw5ICYjNDM7MjgyMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXHUwMDNjXHUwMDNjIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xuIFxuIFx0c2VjdG9yID0gcjEwX2Jpby1cdTAwM2VzZWN0b3I7XG4tXHRzZWN0b3JzID0gKChyMTBfYmlvLVx1MDAzZXNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKVxuLVx0XHQgICBcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxuLVx0XHQtIHNlY3RvcjtcbiYjNDM7XHRpZiAoY29hcnNlKVxuJiM0MztcdFx0c2VjdG9ycyA9IHNlY3RfdG9fd3JpdGU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2VjdG9ycyA9ICgocjEwX2Jpby1cdTAwM2VzZWN0b3IgJiM0MzsgYmxvY2tfc2VjdG9ycylcbiYjNDM7XHRcdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbiYjNDM7XHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI4MzEsNiAmIzQzOzI4NDIsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7XG4gXHRcdFx0XHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcbiBcdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbkBAIC0yODUzLDYgJiM0MzsyODY3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgcDJwZG1hX2Vycm9yO1xuIFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0ucmRldjtcbiBcbkBAIC0yODY1LDE3ICYjNDM7Mjg4MCwyOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0ICogZnJvemVuLlxuIFx0ICovXG4gXHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvO1xuJiM0MztcdHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuLVx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuJiM0MztcdFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxuJiM0MztcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbiYjMzk7dCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbiYjNDM7XHRcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcbiYjNDM7XHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuJiM0MztcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xuIFx0XHRmaXhfcmVhZF9lcnJvcihjb25mLCBtZGRldiwgcjEwX2Jpbyk7XG4gXHRcdHVuZnJlZXplX2FycmF5KGNvbmYpO1xuLVx0fSBlbHNlXG4tXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbiYjNDM7XHR9XG4gXG4gXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTtcbiBcdHIxMF9iaW8tXHUwMDNlc3RhdGUgPSAwO1xuQEAgLTI5NDUsNyAmIzQzOzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fSBlbHNlIGlmIChiaW8gIT0gTlVMTCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX3N0YXR1cykge1xuIFx0XHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4mIzQzO1x0XHRcdFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKVxuJiM0MztcdFx0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlsc1xuJiM0MztcdFx0XHRcdFx0ICogdGhlIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5LCBzb1xuJiM0MztcdFx0XHRcdFx0ICogbmFycm93aW5nIGJsb2NrIGJ5IGJsb2NrIGNhbm5vdFxuJiM0MztcdFx0XHRcdFx0ICogZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcbiYjNDM7XHRcdFx0XHRcdCAqIHRyYW5zaWVudCBkZXZpY2UgZXJyb3IgYWxzb1xuJiM0MztcdFx0XHRcdFx0ICogc3VyZmFjZXMgYXMgQkxLX1NUU19UQVJHRVQsIHNvXG4mIzQzO1x0XHRcdFx0XHQgKiBkb24mIzM5O3QgYXNzdW1lLiAgUmV0cnkgdGhlIHJhbmdlXG4mIzQzO1x0XHRcdFx0XHQgKiBvbmNlOiBpZiBpdCBmYWlscywgcmVjb3JkIGl0IGluXG4mIzQzO1x0XHRcdFx0XHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZVxuJiM0MztcdFx0XHRcdFx0ICogd2FzIG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGVcbiYjNDM7XHRcdFx0XHRcdCAqIG1lZGl1bS5cbiYjNDM7XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIHRydWUpO1xuJiM0MztcdFx0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uYjg2NDJjZDJmYjc5M2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiAmIzQzOzE0NjksNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRpbnQgKmNvdW50LCBpbnQgKnBpX2NvdW50KVxuIHtcbiBcdHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG4mIzQzO1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgJiM0MzsgMSk7XG5AQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcbiBcdHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyA9IGJsa19ycV9tYXBfc2cocnEsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xuIFxuLVx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbi1cdFx0XHQgICAgICAgcmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XG4tXHRpZiAodW5saWtlbHkoKmNvdW50IFx1MDAzYz0gMCkpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRzZ3Quc2dsID0gcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbDtcbiYjNDM7XHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cztcbiYjNDM7XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RhYmxlO1xuLVx0fVxuJiM0MztcdCpjb3VudCA9IHNndC5uZW50cztcbiBcbiBcdGlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkge1xuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCA9XG5AQCAtMjAyNiw4ICYjNDM7MjAyNyw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgJiM0MzsyMDM4LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFxuIFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XG4gXHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xuLVx0XHRkZXZfZXJyKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4tXHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuJiM0MztcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4mIzQzO1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgJiM0MzsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0XHRyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7XG4gXHRlbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTilcbiBcdFx0cmV0ID0gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBETUEgbGF5ZXIgcmVmdXNlZCB0byBtYXAgcGVlciBtZW1vcnkgdG8gdGhpcyBkZXZpY2U6IGFcbiYjNDM7XHQgKiBwcm9wZXJ0eSBvZiB0aGUgcGFpcmluZywgbm90IGEgcGF0aCBmYWlsdXJlLiAgTWF0Y2ggbnZtZS1wY2lcbiYjNDM7XHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZWxzZSBpZiAoZXJyID09IC1FUkVNT1RFSU8pXG4mIzQzO1x0XHRyZXQgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19kbWFfbWFwX2l0ZXJfc3RhcnQmIzM0OywKICAgICYjMzQ7bWRfc3VibWl0X2JpbyYjMzQ7LAogICAgJiMzNDtyYWlkMV9lbmRfd3JpdGVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtyYWlkMV93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7cmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwM2I2Yzk1MDc3ZDc0YzdiNTJmODNkZGFjMGI4OTZmYzFmMzljODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAxNzowNzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuYwppbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmMKQEAgLTE5MCw3ICYjNDM7MTkwLDE1IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldiwKIAljYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWl0ZXItJmd0O3N0YXR1cyA9IEJMS19TVFNfSU5WQUw7CiYjNDM7CQkvKgomIzQzOwkJICogUDJQIHRyYW5zZmVycyB0aGF0IHRoZSBtYXBwaW5nIGxheWVyIGNhbm5vdCBzdXBwb3J0CiYjNDM7CQkgKiByZXBvcnQgQkxLX1NUU19UQVJHRVQsIG1hdGNoaW5nIGRtYV9tYXBfc2d0YWJsZSgpJiMzOTtzCiYjNDM7CQkgKiAtRVJFTU9URUlPIGFuZCB0aGUgcHJlLWJsa19ycV9kbWFfbWFwIG52bWUgYmVoYXZpb3I6CiYjNDM7CQkgKiB0aGUgZmFpbHVyZSBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZGV2aWNlIHBhaXJpbmcsIHNvCiYjNDM7CQkgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpCiYjNDM7CQkgKiBub3IgYmUgbWlzdGFrZW4gZm9yIGFuIGludmFsaWQgcmVxdWVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaXRlci0mZ3Q7c3RhdHVzID0gQkxLX1NUU19UQVJHRVQ7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBkMTQ2NWJjZDg2YzgxMi4uM2FlNGZkNGVmMzgxNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTQ1MSw4ICYjNDM7NDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQlyZXR1cm47CiAJfQogCi0JLyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi8KLQliaW8tJmd0O2JpX29wZiAmYW1wOz0gflJFUV9OT01FUkdFOwomIzQzOwkvKgomIzQzOwkgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BCiYjNDM7CSAqIGJpb3MgUkVRX05PTUVSR0UgaXMgbG9hZC1iZWFyaW5nOiB0aGUgRE1BIG1hcHBpbmcgdHlwZSBvZiBhCiYjNDM7CSAqIHJlcXVlc3QgaXMgcmVzb2x2ZWQgb25jZSwgZnJvbSBpdHMgZmlyc3Qgc2VnbWVudCwgc28gcmVxdWVzdHMKJiM0MzsJICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWcKJiM0MzsJICogcmF0aGVyIHRoYW4gbWVyZWx5IHByZXNlcnZlIGl0IC0tIGJpb3MgYnVpbHQgdGhyb3VnaCB0aGUKJiM0MzsJICogYnZlYy1pdGVyIHBhdGggYXJyaXZlIHdpdGhvdXQgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKQomIzQzOwkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05PTUVSR0U7CiYjNDM7CWVsc2UKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmICZhbXA7PSB+UkVRX05PTUVSR0U7CiAKIAltZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBkOGRhZjBmNzVjYmJlOC4uYjFhYmZjODljZmMwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTExLDggJiM0MzsxMSwxMCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tvYmplY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CkBAIC0yMiw2ICYjNDM7MjQsMzUgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvYmxvY2suaCZndDsKIAogI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIHRoZSBiaW8gY2FycmllcyBQQ0kgUDJQRE1BIChwZWVyIGRldmljZSBtZW1vcnkpIHBhZ2VzLiBSZWFkCiYjNDM7ICogYmlfaW9fdmVjIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIGJpb19maXJzdF9idmVjX2FsbCgpLCB3aGljaCBXQVJOcwomIzQzOyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmUKJiM0MzsgKiBiaV92Y250ID09IDAgYnV0IGEgdmFsaWQgYmlfaW9fdmVjIHNoYXJlZCB3aXRoIHRoZSBwYXJlbnQuIFAyUERNQSBhbmQKJiM0MzsgKiBob3N0IHBhZ2VzIG11c3Qgbm90IGJlIG1peGVkIHdpdGhpbiBvbmUgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpcwomIzQzOyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkOgomIzQzOyAqIGJpb19oYXNfZGF0YSgpIGlzIGZhbHNlIGF0IGNvbXBsZXRpb24gdGltZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRydWUgd2hlbiBhIGxlZyBiaW8gZmFpbGVkIGJlY2F1c2UgaXRzIFAyUERNQSBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZAomIzQzOyAqIHRvIHRoaXMgbWVtYmVyIChCTEtfU1RTX1RBUkdFVCBmcm9tIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoKSkuIFVzYWJsZSBhdAomIzQzOyAqIGNvbXBsZXRpb24gdGltZSwgdW5saWtlIG1kX2Jpb19pc19wMnBkbWEoKTogbGVnIGJpb3MgYXJlIGNsb25lcyBzaGFyaW5nCiYjNDM7ICogdGhlIG1hc3RlciBiaW8mIzM5O3MgYnZlYyB0YWJsZSwgd2hpY2ggb3V0bGl2ZXMgdGhlIGxlZyYjMzk7cyBlbmRfaW8sIGJ1dCB0aGVpcgomIzQzOyAqIGl0ZXJhdG9yIGlzIGNvbnN1bWVkIGJ5IHRoZW4sIHNvIGJpb19oYXNfZGF0YSgpIGNhbm5vdCBnYXRlIHRoZSBhY2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19UQVJHRVQgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBhZmUyY2E5NmFkOGMyMi4uMjQxYzI5OTRiNmEzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTQ5MSw3ICYjNDM7NDkxLDkgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKIAkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkgJmFtcDsmYW1wOwogCQkgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi8KLQkJICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpIHsKJiM0MzsJCSAgICAhdGVzdF9iaXQoV3JpdGVNb3N0bHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqLwomIzQzOwkJICAgICFtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkgewogCQkJbWRfZXJyb3IocjFfYmlvLSZndDttZGRldiwgcmRldik7CiAJCX0KIApAQCAtMTU3NSw5ICYjNDM7MTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbywKIAkJLyoKIAkJICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzCiAJCSAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kCi0JCSAqIGJpbyBsYXRlci4KJiM0MzsJCSAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzCiYjNDM7CQkgKiB0aGUgZGF0YSB3aXRoIGJpb19jb3B5X2RhdGEoKSwgYSBDUFUgY29weSB0aGF0IGNhbm5vdCBiZQomIzQzOwkJICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy4KIAkJICovCi0JCWlmICghaXNfZGlzY2FyZCAmYW1wOyZhbXA7IHJkZXYgJmFtcDsmYW1wOyB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpCiYjNDM7CQlpZiAoIWlzX2Rpc2NhcmQgJmFtcDsmYW1wOyByZGV2ICZhbXA7JmFtcDsgdGVzdF9iaXQoV3JpdGVNb3N0bHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbWRfYmlvX2lzX3AycGRtYShiaW8pKQogCQkJd3JpdGVfYmVoaW5kID0gdHJ1ZTsKIAogCQlyMV9iaW8tJmd0O2Jpb3NbaV0gPSBOVUxMOwpAQCAtMjUxNCw3ICYjNDM7MjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogCX0KIH0KIAotc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSkKJiM0MztzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSkKIHsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLSZndDttZGRldjsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CkBAIC0yNTI4LDYgJiM0MzsyNTMzLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpCiAJICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJiMzOTt0IGV4YWN0bHkgYWxpZ24gd2l0aAogCSAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMgc29tZWhvdy4KIAkgKgomIzQzOwkgKiBXaXRoICYjMzk7Y29hcnNlJiMzOTssIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmQKJiM0MzsJICogb25lIGJhZCByYW5nZSBpZiBpdCBmYWlsczogdXNlZCB3aGVuIHBlci1ibG9jayBuYXJyb3dpbmcKJiM0MzsJICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZQomIzQzOwkgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzCiYjNDM7CSAqIGEgc2luY2UtY2xlYXJlZCB0cmFuc2llbnQgZXJyb3IgYXBhcnQuCiYjNDM7CSAqCiAJICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi4KIAkgKi8KIApAQCAtMjU0Miw5ICYjNDM7MjU1MywxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKQogCQlibG9ja19zZWN0b3JzID0gcm91bmR1cCgxICZsdDsmbHQ7IHJkZXYtJmd0O2JhZGJsb2Nrcy5zaGlmdCwgbGJzKTsKIAogCXNlY3RvciA9IHIxX2Jpby0mZ3Q7c2VjdG9yOwotCXNlY3RvcnMgPSAoKHNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKQotCQkgICAmYW1wOyB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpCi0JCS0gc2VjdG9yOwomIzQzOwlpZiAoY29hcnNlKQomIzQzOwkJc2VjdG9ycyA9IHNlY3RfdG9fd3JpdGU7CiYjNDM7CWVsc2UKJiM0MzsJCXNlY3RvcnMgPSAoKHNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKQomIzQzOwkJCSAgICZhbXA7IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSkKJiM0MzsJCQktIHNlY3RvcjsKIAogCXdoaWxlIChzZWN0X3RvX3dyaXRlKSB7CiAJCXN0cnVjdCBiaW8gKndiaW87CkBAIC0yNTYyLDYgJiM0MzsyNTc2LDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSkKIAkJfQogCiAJCXdiaW8tJmd0O2JpX29wZiA9IFJFUV9PUF9XUklURTsKJiM0MzsJCS8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovCiYjNDM7CQlpZiAobWRfYmlvX2lzX3AycGRtYSh3YmlvKSkKJiM0MzsJCQl3YmlvLSZndDtiaV9vcGYgfD0gUkVRX05PTUVSR0U7CiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLSZndDtzZWN0b3I7CiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby0mZ3Q7c2VjdG9ycyAmbHQ7Jmx0OyA5OwogCkBAIC0yNjIzLDcgJiM0MzsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkJCSAqIGVycm9ycy4KIAkJCSAqLwogCQkJZmFpbCA9IHRydWU7Ci0JCQluYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtKTsKJiM0MzsJCQlpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby0mZ3Q7Ymlvc1ttXSkpCiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGUKJiM0MzsJCQkJICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieQomIzQzOwkJCQkgKiBibG9jayBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGEKJiM0MzsJCQkJICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzCiYjNDM7CQkJCSAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24mIzM5O3QgYXNzdW1lLiAgUmV0cnkKJiM0MzsJCQkJICogdGhlIHJhbmdlIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW4KJiM0MzsJCQkJICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUgd2FzIG5vdGhpbmcKJiM0MzsJCQkJICogd3Jvbmcgd2l0aCB0aGUgbWVkaXVtLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSwgdHJ1ZSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7CiAJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtJmd0O21pcnJvcnNbbV0ucmRldiwKIAkJCQkJIGNvbmYtJmd0O21kZGV2KTsKIAkJfQpAQCAtMjY1MCw2ICYjNDM7MjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi0mZ3Q7bWlycm9yc1tyMV9iaW8tJmd0O3JlYWRfZGlza10ucmRldjsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdOwomIzQzOwlib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb25mLSZndDttZGRldjsKIAlzZWN0b3JfdCBzZWN0b3I7CiAKQEAgLTI2NjksNiAmIzQzOzI3MDAsMTUgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pCiAJICovCiAJaWYgKG1kZGV2LSZndDtybykgewogCQlyMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDsKJiM0MzsJfSBlbHNlIGlmIChwMnBkbWFfZXJyb3IpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjsKJiM0MzsJCSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXIKJiM0MzsJCSAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24mIzM5O3QgY2hhcmdlIHRoZSByZWFkLWVycm9yCiYjNDM7CQkgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnCiYjNDM7CQkgKiBvdXQgb2YgdGhlIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewogCQltZF9lcnJvcihtZGRldiwgcmRldik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDBhM2NmZGQzZjVkZjgwLi5iMjQ0MjlhMTkyNTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC00ODksNyAmIzQzOzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCiAKIAkJCWRlY19yZGV2ID0gMDsKIAkJCWlmICh0ZXN0X2JpdChGYWlsRmFzdCwgJmFtcDtyZGV2LSZndDtmbGFncykgJmFtcDsmYW1wOwotCQkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkpIHsKJiM0MzsJCQkgICAgKGJpby0mZ3Q7Ymlfb3BmICZhbXA7IE1EX0ZBSUxGQVNUKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIC8qIEEgbWFwcGluZyBmYWlsdXJlIHNheXMgbm90aGluZyBhYm91dCBkZXZpY2UgaGVhbHRoICovCiYjNDM7CQkJICAgICFtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkgewogCQkJCW1kX2Vycm9yKHJkZXYtJmd0O21kZGV2LCByZGV2KTsKIAkJCX0KIApAQCAtMjc4Niw3ICYjNDM7Mjc4OCw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwCiAJfQogfQogCi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpCiYjNDM7c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSkKIHsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLSZndDttYXN0ZXJfYmlvOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByMTBfYmlvLSZndDttZGRldjsKQEAgLTI4MDAsNiAmIzQzOzI4MDIsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKQogCSAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2VzbiYjMzk7dCBleGFjdGx5IGFsaWduIHdpdGgKIAkgKiBibG9ja3MuICBXZSBtdXN0IGhhbmRsZSB0aGlzLgogCSAqCiYjNDM7CSAqIFdpdGggJiMzOTtjb2Fyc2UmIzM5OywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZAomIzQzOwkgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZwomIzQzOwkgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlCiYjNDM7CSAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHMKJiM0MzsJICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC4KJiM0MzsJICoKIAkgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LgogCSAqLwogCkBAIC0yODE0LDkgJiM0MzsyODIyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSkKIAkJYmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSAmbHQ7Jmx0OyByZGV2LSZndDtiYWRibG9ja3Muc2hpZnQsIGxicyk7CiAKIAlzZWN0b3IgPSByMTBfYmlvLSZndDtzZWN0b3I7Ci0Jc2VjdG9ycyA9ICgocjEwX2Jpby0mZ3Q7c2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpCi0JCSAgICZhbXA7IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSkKLQkJLSBzZWN0b3I7CiYjNDM7CWlmIChjb2Fyc2UpCiYjNDM7CQlzZWN0b3JzID0gc2VjdF90b193cml0ZTsKJiM0MzsJZWxzZQomIzQzOwkJc2VjdG9ycyA9ICgocjEwX2Jpby0mZ3Q7c2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpCiYjNDM7CQkJICAgJmFtcDsgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKQomIzQzOwkJCS0gc2VjdG9yOwogCiAJd2hpbGUgKHNlY3RfdG9fd3JpdGUpIHsKIAkJc3RydWN0IGJpbyAqd2JpbzsKQEAgLTI4MzEsNiAmIzQzOzI4NDIsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpCiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gd3NlY3RvciAmIzQzOwogCQkJCSAgIGNob29zZV9kYXRhX29mZnNldChyMTBfYmlvLCByZGV2KTsKIAkJd2Jpby0mZ3Q7Ymlfb3BmID0gUkVRX09QX1dSSVRFOwomIzQzOwkJLyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi8KJiM0MzsJCWlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKQomIzQzOwkJCXdiaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKIAogCQlpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pICZhbXA7JmFtcDsKIAkJICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHsKQEAgLTI4NTMsNiAmIzQzOzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKQogewogCWludCBzbG90ID0gcjEwX2Jpby0mZ3Q7cmVhZF9zbG90OwogCXN0cnVjdCBiaW8gKmJpbzsKJiM0MzsJYm9vbCBwMnBkbWFfZXJyb3I7CiAJc3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tJmd0O2RldnNbc2xvdF0ucmRldjsKIApAQCAtMjg2NSwxNyAmIzQzOzI4ODAsMjggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbykKIAkgKiBmcm96ZW4uCiAJICovCiAJYmlvID0gcjEwX2Jpby0mZ3Q7ZGV2c1tzbG90XS5iaW87CiYjNDM7CXAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pOwogCWJpb19wdXQoYmlvKTsKIAlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7CiAKIAlpZiAobWRkZXYtJmd0O3JvKQogCQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7Ci0JZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewomIzQzOwllbHNlIGlmIChwMnBkbWFfZXJyb3IpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjsKJiM0MzsJCSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXIKJiM0MzsJCSAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24mIzM5O3QgY2hhcmdlIHRoZSByZWFkLWVycm9yCiYjNDM7CQkgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnCiYjNDM7CQkgKiBvdXQgb2YgdGhlIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQltZF9lcnJvcihtZGRldiwgcmRldik7CiYjNDM7CX0gZWxzZSB7CiAJCWZyZWV6ZV9hcnJheShjb25mLCAxKTsKIAkJZml4X3JlYWRfZXJyb3IoY29uZiwgbWRkZXYsIHIxMF9iaW8pOwogCQl1bmZyZWV6ZV9hcnJheShjb25mKTsKLQl9IGVsc2UKLQkJbWRfZXJyb3IobWRkZXYsIHJkZXYpOwomIzQzOwl9CiAKIAlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTsKIAlyMTBfYmlvLSZndDtzdGF0ZSA9IDA7CkBAIC0yOTQ1LDcgJiM0MzsyOTcxLDIzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9jb21wbGV0ZWQoc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9IGVsc2UgaWYgKGJpbyAhPSBOVUxMICZhbXA7JmFtcDsgYmlvLSZndDtiaV9zdGF0dXMpIHsKIAkJCQlmYWlsID0gdHJ1ZTsKLQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiYjNDM7CQkJCWlmIChtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBBIFAyUERNQSBtYXBwaW5nIGZhaWx1cmUgZmFpbHMKJiM0MzsJCQkJCSAqIHRoZSB3aG9sZSByYW5nZSBpZGVudGljYWxseSwgc28KJiM0MzsJCQkJCSAqIG5hcnJvd2luZyBibG9jayBieSBibG9jayBjYW5ub3QKJiM0MzsJCQkJCSAqIGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhCiYjNDM7CQkJCQkgKiB0cmFuc2llbnQgZGV2aWNlIGVycm9yIGFsc28KJiM0MzsJCQkJCSAqIHN1cmZhY2VzIGFzIEJMS19TVFNfVEFSR0VULCBzbwomIzQzOwkJCQkJICogZG9uJiMzOTt0IGFzc3VtZS4gIFJldHJ5IHRoZSByYW5nZQomIzQzOwkJCQkJICogb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpbgomIzQzOwkJCQkJICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUKJiM0MzsJCQkJCSAqIHdhcyBub3RoaW5nIHdyb25nIHdpdGggdGhlCiYjNDM7CQkJCQkgKiBtZWRpdW0uCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCW5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCB0cnVlKTsKJiM0MzsJCQkJZWxzZQomIzQzOwkJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIGZhbHNlKTsKIAkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtJmd0O21kZGV2KTsKIAkJCX0KIAkJCWJpbyA9IHIxMF9iaW8tJmd0O2RldnNbbV0ucmVwbF9iaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKaW5kZXggNjkwOWUzNTQyNzk0MjcuLmI4NjQyY2QyZmI3OTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCkBAIC0xNDY5LDYgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJaW50ICpjb3VudCwgaW50ICpwaV9jb3VudCkKIHsKIAlzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpOwomIzQzOwlzdHJ1Y3Qgc2dfdGFibGUgc2d0OwogCWludCByZXQ7CiAKIAlyZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikocmVxICYjNDM7IDEpOwpAQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAogCXJlcS0mZ3Q7ZGF0YV9zZ2wubmVudHMgPSBibGtfcnFfbWFwX3NnKHJxLCByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCk7CiAKLQkqY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2LCByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCwKLQkJCSAgICAgICByZXEtJmd0O2RhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7Ci0JaWYgKHVubGlrZWx5KCpjb3VudCAmbHQ7PSAwKSkgewotCQlyZXQgPSAtRUlPOwomIzQzOwlzZ3Quc2dsID0gcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2w7CiYjNDM7CXNndC5vcmlnX25lbnRzID0gcmVxLSZndDtkYXRhX3NnbC5uZW50czsKJiM0MzsJcmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCAmYW1wO3NndCwgcnFfZG1hX2RpcihycSksIDApOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfZnJlZV90YWJsZTsKLQl9CiYjNDM7CSpjb3VudCA9IHNndC5uZW50czsKIAogCWlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkgewogCQlyZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7c2dfdGFibGUuc2dsID0KQEAgLTIwMjYsOCAmIzQzOzIwMjcsNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwX3FlOwogCi0JbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKLQogCWlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgJmFtcDsmYW1wOwogCSAgICBxdWV1ZS0mZ3Q7cGlfc3VwcG9ydCAmYW1wOyZhbXA7CiAJICAgIChjLSZndDtjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8CkBAIC0yMDM5LDExICYjNDM7MjAzOCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpOwogCWlmICh1bmxpa2VseShlcnIgJmx0OyAwKSkgewotCQlkZXZfZXJyKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKLQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxuJiMzNDssIGVycik7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKJiM0MzsJCQkJICAgICYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcbiYjMzQ7LCBlcnIpOwogCQlnb3RvIGVycjsKIAl9CiAKJiM0MzsJbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKJiM0MzsKIAlzcWUtJmd0O2NxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTsKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLSZndDtkbWEsCkBAIC0yMDYzLDYgJiM0MzsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQlyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7CiAJZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pCiAJCXJldCA9IEJMS19TVFNfUkVTT1VSQ0U7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBETUEgbGF5ZXIgcmVmdXNlZCB0byBtYXAgcGVlciBtZW1vcnkgdG8gdGhpcyBkZXZpY2U6IGEKJiM0MzsJICogcHJvcGVydHkgb2YgdGhlIHBhaXJpbmcsIG5vdCBhIHBhdGggZmFpbHVyZS4gIE1hdGNoIG52bWUtcGNpCiYjNDM7CSAqIGFuZCBkbyBub3QgcmV0cnkgKHNlZSBibGtfcGF0aF9lcnJvcigpKS4KJiM0MzsJICovCiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKQomIzQzOwkJcmV0ID0gQkxLX1NUU19UQVJHRVQ7CiAJZWxzZQogCQlyZXQgPSBCTEtfU1RTX0lPRVJSOwogCW52bWVfY2xlYW51cF9jbWQocnEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBQMlBETUEgSGFuZGxpbmcgaW4gQmxvY2sgTGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSBpbnRlcmVzdGluZyBhcmVhcywgYW5kIG15IGV4cGVydCBpbnR1aXRpb24gaXMgdGluZ2xpbmcuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3QgaGFuZGxpbmcsIGFuZCBpdCB0b3VjaGVzIGNvcmUgY29tcG9uZW50cyDigJMgdGhlIGJsb2NrIGxheWVyLCBNRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gVGhhdCYjMzk7cyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZywgbm8gZG91YnQuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgb3V0LCBtb2RpZnlpbmc6IGBibG9jay9ibGstbXEtZG1hLmNgLCBgZHJpdmVycy9tZC9tZC5jYCwgYGRyaXZlcnMvbWQvbWQuaGAsIGBkcml2ZXJzL21kL3JhaWQxLmNgLCBgZHJpdmVycy9tZC9yYWlkMTAuY2AsIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jYC4KCkVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCByZWZpbmluZyBob3cgbWFwcGluZyBlcnJvcnMgZm9yIFAyUERNQSBhcmUgZGVhbHQgd2l0aCBhY3Jvc3MgdGhlc2UgZGlmZmVyZW50IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzIGFuZCBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcyB0byBhY2NvdW50IGZvciB0aGVzZSBwb3RlbnRpYWwgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbWRfYmlvX2lzX3AycGRtYWAgYW5kIGBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3JgIGluIGBkcml2ZXJzL21kL21kLmhgLCBhcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgdG8gYG1kX3N1Ym1pdF9iaW9gLCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgcmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0YCwgYW5kIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYG5hcnJvd193cml0ZV9lcnJvcmAgZm9yIGJvdGggUkFJRDEgYW5kIFJBSUQxMC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIHRyaWVzIHRvIHByZXZlbnQgZGV2aWNlIGZhaWx1cmVzIHVwb24gUDJQRE1BIG1hcHBpbmcgZXJyb3JzLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgZGVzaWduIGdvYWwuIFRoaXMgYWxsIHBvaW50cyB0byBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGZhaWx1cmUgbW9kZXMgYW5kIGVkZ2UgY2FzZXMsIHdoaWNoIGlzIHdoYXQgbWFrZXMgZnV6emluZyBzbyB2YWx1YWJsZSBoZXJlLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTt2ZSBuYXJyb3dlZCBkb3duIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJiMzOTtkIHdhbnQgdG8gZm9jdXMgb246IGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYC4KCkJlZm9yZSBkaXZpbmcgaW4sIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIEZvciBNRCwgaXQgbG9va3MgbGlrZSBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYCBhcmUgZXNzZW50aWFsLiBGb3IgTlZNZSBSRE1BLCBpdCYjMzk7cyBgTlZNRV9SRE1BYC4gQW5kLCBvZiBjb3Vyc2UsIGZvciBQMlBETUEsIGBQQ0lfUDJQRE1BYCBpcyBjcml0aWNhbC4gVGhlc2UgbmVlZCB0byBiZSB2YWxpZGF0ZWQgYmVmb3JlIEkgZ28gdG9vIGZhci4gV2l0aCB0aGVzZSBjaGVja3MgaW4gcGxhY2UsIEkgY2FuIGdldCBkb3duIHRvIGdlbmVyYXRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRF9SQUlEMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTA0PWNvbmZpZyBNRF9SQUlEMFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBETUEgQWNjZWxlcmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGVmZmVjdGl2ZWx5IGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgdHdvIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBOVk1FX1JETUFgIGFuZCBgUENJX1AyUERNQWAuCgpgTlZNRV9SRE1BYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBwbGFjZSB0byBzdGFydC4gSWYgdGhlIHN0b3JhZ2UgZGV2aWNlIHN1cHBvcnRzIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcywgYW5kIHdlIGNhbiBjb25maWd1cmUgb3VyIHN5c3RlbSB0byB1dGlsaXplIGl0LCB0aGF0IGNvdWxkIGJ5cGFzcyBhIGxvdCBvZiB0aGUgdHJhZGl0aW9uYWwgZGF0YSB0cmFuc2ZlciBvdmVyaGVhZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBOVk1lIGNvbnRyb2xsZXImIzM5O3MgY2FwYWJpbGl0aWVzIGFuZCB0aGUgUkRNQSBpbXBsZW1lbnRhdGlvbiBvbiB0aGlzIHBsYXRmb3JtLiBXaGF0IGFyZSB0aGUgbGF0ZW5jeSBjaGFyYWN0ZXJpc3RpY3M/IFdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucyBpbiB0ZXJtcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIGFuZCBhZGRyZXNzaW5nPwoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciBgUENJX1AyUERNQWAuIFBvaW50LXRvLXBvaW50IERNQSBvbiB0aGUgUENJZSBidXMgKmNvdWxkKiBvZmZlciBhIGZhc3QgcGF0aCBmb3IgZGF0YSB0cmFuc2ZlciwgYXNzdW1pbmcgdGhlIGRldmljZXMgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzYW1lIEkvTyBkb21haW4uIFRoaXMgaXMgZ29pbmcgdG8gZGVwZW5kIGhlYXZpbHkgb24gdGhlIHN5c3RlbSYjMzk7cyB0b3BvbG9neSBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgUENJZSByb290IGNvbXBsZXhlcyBhbmQgc3dpdGNoZXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBwb3RlbnRpYWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZlYXNpYmlsaXR5LiBXaGF0IGtpbmQgb2YgYmFuZHdpZHRoIGNhbiB3ZSBhY3R1YWxseSBleHBlY3Q/IERvZXMgdGhlIHN5c3RlbSBoYXJkd2FyZSBzdXBwb3J0IHBlZXItdG8tcGVlciB0cmFuc2ZlcnMsIGFuZCBhcmUgdGhlcmUgYW55IHJlcXVpcmVkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9SRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTQ3PWNvbmZpZyBOVk1FX0ZBQlJJQ1Ncbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9SRE1BXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFJETUEgaG9zdCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipQQ0lfUDJQRE1BIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhpcyBQQ0lfUDJQRE1BIHNpdHVhdGlvbi4gTm8gbmVlZCBmb3IgZmx1ZmYsIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgaW4sIGFzc3VtaW5nIGV2ZXJ5b25lIGtub3dzIHRoZSBiYXNpY3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrJiMzNDsgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0dXMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGlzc3Vlcy4gV2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZz8gVGhlIHJlZ2lzdGVycywgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmc/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgd2hlcmUgdGhpcyBtb2R1bGUgc2l0cyB3aXRoaW4gaXQsIHRoZSBjdXJyZW50IHN0YXRlIG9mIGl0LCBhbmQgYW55IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGFyaXNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIFRpbWUgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSV9QMlBETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkludGVybmFsIEF1ZGl0IG9mIERNQSBNYXBwaW5nIEl0ZXJhdGlvbiBTdGFydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbW9kaWZpY2F0aW9ucyBhbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGp1bXBzIG91dCBpcyBgYmxrX2RtYV9tYXBfaXRlcl9zdGFydGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIHdoZXJlIGlzIHRoaXMgZGVmaW5lZD8gSXMgaXQgYW4gaW5saW5lIGZ1bmN0aW9uPyBNeSBrbm93bGVkZ2UgaXMgdGhhdCBgYmxrX2RtYV9tYXBfaXRlcl9zdGFydGAgaXMgbGlrZWx5IGluIGBibGstbXEtZG1hLmNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IG15IG1lbW9yeSBjb3VsZCBiZSBvZmYsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGxvY2F0aW9uIGFuZCB0aGVuIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS1kbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEtZG1hLmM9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcnFfbWFwX2l0ZXJfaW5pdChzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmxrLW1xLWRtYS5jLTE2My1cbmJsb2NrL2Jsay1tcS1kbWEuYzoxNjQ6c3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuYmxvY2svYmxrLW1xLWRtYS5jLTE2NS1cdFx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlICpzdGF0ZSwgc3RydWN0IGJsa19kbWFfaXRlciAqaXRlcixcbi0tXG5ibG9jay9ibGstbXEtZG1hLmM9MjM0PWJvb2wgYmxrX3JxX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzctXHRibGtfcnFfbWFwX2l0ZXJfaW5pdChyZXEsIFx1MDAyNml0ZXItXHUwMDNlaXRlcik7XG5ibG9jay9ibGstbXEtZG1hLmM6MjM4Olx0cmV0dXJuIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQocmVxLCBkbWFfZGV2LCBzdGF0ZSwgaXRlcixcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzktXHRcdFx0XHQgICAgICBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpKTtcbi0tXG5ibG9jay9ibGstbXEtZG1hLmM9MzQ5PWJvb2wgYmxrX3JxX2ludGVncml0eV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9ibGstbXEtZG1hLmMtMzYyLVx0fTtcbmJsb2NrL2Jsay1tcS1kbWEuYzozNjM6XHRyZXR1cm4gYmxrX2RtYV9tYXBfaXRlcl9zdGFydChyZXEsIGRtYV9kZXYsIHN0YXRlLCBpdGVyLCBsZW4pO1xuYmxvY2svYmxrLW1xLWRtYS5jLTM2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE1lbnRhbCBSb2FkbWFwIGZvciBSQUlEIGFuZCBOVk1lIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCYjMzk7cyBiZWVuIGNodXJuaW5nIHRocm91Z2ggc29tZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgYmxvY2sgbGF5ZXIgYW5kIHN0b3JhZ2UgZHJpdmVycy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBoYW5kbGluZyBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIE5WTWUgKE5vbi1Wb2xhdGlsZSBNZW1vcnkgRXhwcmVzcykgb3ZlciBSRE1BIChSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIHN1YnN5c3RlbS4KCkZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludCwgdGhlIGBtZF9zdWJtaXRfYmlvYCBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgZ3VuIGZvciBibG9jayBJL08gb3BlcmF0aW9ucyBpbiB0aGUgTUQgbGF5ZXIuIEkmIzM5O20gdmlzdWFsaXppbmcgdGhlIGRhdGEgZmxvd2luZyB0aHJvdWdoIHRoZSBSQUlEIGFsZ29yaXRobXMuCgpUaGVuLCBJJiMzOTttIHplcm9pbmcgaW4gb24gUkFJRDEsIHdoaWNoIGlzIG1pcnJvcmluZy4gSSYjMzk7bSBtZW50YWxseSB0cmFjaW5nIHRoZSB3cml0ZSBwYXRoOiBgcmFpZDFfd3JpdGVfcmVxdWVzdGAgaXMgaG93IHRoZSB3cml0ZSBpcyBpbml0aWF0ZWQsIGFuZCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgIGlzIGNhbGxlZCB3aGVuIGl0IGNvbXBsZXRlcy4gSXQgYWxzbyBoYXMgZXJyb3IgaGFuZGxlcnM7IEkmIzM5O20gcGljdHVyaW5nIGhvdyBgbmFycm93X3dyaXRlX2Vycm9yYCwgYW5kIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIHdvdWxkIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkgaW4gZXJyb3IgcmVjb3ZlcnkgYW5kIGNvbXBsZXRpb24gc2lnbmFsaW5nIGZvciB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgUkFJRDEgc2V0dXAuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBoYW5kbGVfcmVhZF9lcnJvcmAgZGVhbHMgd2l0aCByZWFkIGZhaWx1cmVzIGR1cmluZyB3cml0ZSBvcGVyYXRpb25zIG9uIFJBSUQxLgoKRXhwYW5kaW5nIGludG8gUkFJRDEwLCBJJiMzOTttIGNvbnNpZGVyaW5nIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAuIEhvdyBkbyB0aGVzZSBkaWZmZXIgZnJvbSBSQUlEMSBpbiB0aGVpciBoYW5kbGluZyBvZiB3cml0ZSBjb21wbGV0aW9ucyBhbmQgdGhlIGVuZC10by1lbmQgd3JpdGUgbGlmZWN5Y2xlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzdHJpcGluZyBhbmQgbWlycm9yaW5nIGNvbWJpbmF0aW9uPyBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgSSBjYW4gdW5pZnkgdGhlIGhhbmRsaW5nIG9yIGZpbmQgYSBzcGVjaWZpYyByYXRpb25hbGUgZm9yIHRoZWlyIHNlcGFyYXRlIGV4aXN0ZW5jZS4KCk5vdywgbXkgdGhvdWdodHMgYXJlIHN3aXRjaGluZyBnZWFycyB0byBOVk1lIG92ZXIgUkRNQS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSByZW1vdGUgTlZNZSBkZXZpY2UsIGFuZCBob3cgdGhlc2Ugd3JpdGUgb3BlcmF0aW9ucyBhcmUgaW5pdGlhdGVkIGFuZCBjb21wbGV0ZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIHdoaWNoIHdpbGwgaGFuZGxlIERNQSBtYXBwaW5nLCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAsIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSBxdWV1aW5nIG9mIHRoZSByZXF1ZXN0LgoKRmluYWxseSwgSSYjMzk7bSBtb21lbnRhcmlseSBpbnRlcnJ1cHRpbmcgbXlzZWxmLiBKdXN0IGEgcXVpY2sgY2hlY2suLi4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBuYXJyb3dfd3JpdGVfZXJyb3JgIGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGp1c3QgYSBxdWljayBkZXRhaWwsIGJ1dCBpdCBjb3VsZCBpbXBhY3QgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvcmFpZDEuYz0yNDM3PXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIxLVxuZHJpdmVycy9tZC9yYWlkMS5jOjI1MjI6c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSwgYm9vbCBjb2Fyc2UpXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUyMy17XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MjU9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjUzLVx0XHRcdFx0ICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MjY1NDpcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2NTUtXHRcdFx0ZWxzZVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2NTY6XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XG5kcml2ZXJzL21kL3JhaWQxLmMtMjY1Ny1cdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcyNgoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIFAyUERNQSBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBQMlBETUEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHJlYWxtcyBvZiBNRCBSQUlEIChSQUlEMSBhbmQgUkFJRDEwLCBpdCBzZWVtcykgYW5kIE5WTWUgUkRNQS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGludGVuZGVkIGNoYW5nZSBpcyBpbXBsZW1lbnRlZC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBgUENJX1AyUERNQWAgY29uZmlnIG9wdGlvbiBpcyBzdWZmaWNpZW50LiBJdCBpczsgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbi4gTm8gbmVlZCB0byBtdWRkeSB0aGUgd2F0ZXJzIHdpdGggYFBDSV9QMlBETUFfVEVTVGAgb3IgYW55dGhpbmcgbW9yZSBjb21wbGV4LgoKTm93LCBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gcHJvdmlkZSBhcyB0YXJnZXRlZCBhIHJldmlldyBhcyBwb3NzaWJsZS4gVGhlIG9yaWdpbmFsIGxpc3QgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbnRyeSBwb2ludHMsIGBtZF9zdWJtaXRfYmlvYCBmb3IgTUQgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGZvciBOVk1lIFJETUEsIGFyZSBjcnVjaWFsIHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyB0aGVyZS4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBhcmUga2V5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIFJBSUQgaW1wbGVtZW50YXRpb25zLiBUaGUgY2hhbmdlIGlzIHByZWNpc2VseSB3aXRoaW4gdGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMuCgpUaGUgaW5jbHVzaW9uIG9mIGBibGtfZG1hX21hcF9pdGVyX3N0YXJ0YCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgLCBhbmQgYG5hcnJvd193cml0ZV9lcnJvcmAgcm91bmRzIG91dCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhbmQgY2xhcmlmaWVzIHRoZSBmb2N1cyBvbiBlcnJvci1yZWxhdGVkIGZsb3dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICAgJiMzNDttZF9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JhaWQxX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3JhaWQxX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtyYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICAgJiMzNDttZF9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JhaWQxX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3JhaWQxX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtyYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA1Ljk5MjgwMjY2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE2OTU0OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgICBcIm1kX3N1Ym1pdF9iaW9cIixcbiAgICBcInJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJyYWlkMV93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcInJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA1Ljk5MjgwNzk4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NDgxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzAzYjZjOTUwNzdkNzRjN2I1MmY4M2RkYWMwYjg5NmZjMWYzOWM4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzowNzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmNcXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXFxuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuQEAgLTE5MCw3ICsxOTAsMTUgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQMlAgdHJhbnNmZXJzIHRoYXQgdGhlIG1hcHBpbmcgbGF5ZXIgY2Fubm90IHN1cHBvcnRcXG4rXFx0XFx0ICogcmVwb3J0IEJMS19TVFNfVEFSR0VULCBtYXRjaGluZyBkbWFfbWFwX3NndGFibGUoKSdzXFxuK1xcdFxcdCAqIC1FUkVNT1RFSU8gYW5kIHRoZSBwcmUtYmxrX3JxX2RtYV9tYXAgbnZtZSBiZWhhdmlvcjpcXG4rXFx0XFx0ICogdGhlIGZhaWx1cmUgaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGRldmljZSBwYWlyaW5nLCBzb1xcbitcXHRcXHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXFxuK1xcdFxcdCAqIG5vciBiZSBtaXN0YWtlbiBmb3IgYW4gaW52YWxpZCByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aXRlci1cXHUwMDNlc3RhdHVzID0gQkxLX1NUU19UQVJHRVQ7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXFxuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC00NTEsOCArNDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovXFxuLVxcdGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjY9IH5SRVFfTk9NRVJHRTtcXG4rXFx0LypcXG4rXFx0ICogQSBiaW8gbWQgc3BsaXQgY291bGQgYmUgbWVyZ2VhYmxlIGFnYWluIGJlbG93IG1kLCBidXQgZm9yIFAyUERNQVxcbitcXHQgKiBiaW9zIFJFUV9OT01FUkdFIGlzIGxvYWQtYmVhcmluZzogdGhlIERNQSBtYXBwaW5nIHR5cGUgb2YgYVxcbitcXHQgKiByZXF1ZXN0IGlzIHJlc29sdmVkIG9uY2UsIGZyb20gaXRzIGZpcnN0IHNlZ21lbnQsIHNvIHJlcXVlc3RzXFxuK1xcdCAqIG11c3Qgc3RheSBzaW5nbGUtcHJvdmlkZXIgKHNlZSBfX2Jpb19hZGRfcGFnZSgpKS4gU2V0IHRoZSBmbGFnXFxuK1xcdCAqIHJhdGhlciB0aGFuIG1lcmVseSBwcmVzZXJ2ZSBpdCAtLSBiaW9zIGJ1aWx0IHRocm91Z2ggdGhlXFxuK1xcdCAqIGJ2ZWMtaXRlciBwYXRoIGFycml2ZSB3aXRob3V0IGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNj0gflJFUV9OT01FUkdFO1xcbiBcXG4gXFx0bWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXFxuaW5kZXggZDhkYWYwZjc1Y2JiZTguLmIxYWJmYzg5Y2ZjMDcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxcbisrKyBiL2RyaXZlcnMvbWQvbWQuaFxcbkBAIC0xMSw4ICsxMSwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuQEAgLTIyLDYgKzI0LDM1IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXFxuK1xcbisvKlxcbisgKiBDaGVjayBpZiB0aGUgYmlvIGNhcnJpZXMgUENJIFAyUERNQSAocGVlciBkZXZpY2UgbWVtb3J5KSBwYWdlcy4gUmVhZFxcbisgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXFxuKyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmVcXG4rICogYmlfdmNudCA9PSAwIGJ1dCBhIHZhbGlkIGJpX2lvX3ZlYyBzaGFyZWQgd2l0aCB0aGUgcGFyZW50LiBQMlBETUEgYW5kXFxuKyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXFxuKyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJ3MgaXRlcmF0b3IgaXMgY29uc3VtZWQ6XFxuKyAqIGJpb19oYXNfZGF0YSgpIGlzIGZhbHNlIGF0IGNvbXBsZXRpb24gdGltZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9faXNfcDJwZG1hKHN0cnVjdCBiaW8gKmJpbylcXG4re1xcbitcXHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9pb192ZWMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXFx1MDAzZWJpX2lvX3ZlYy1cXHUwMDNlYnZfcGFnZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRydWUgd2hlbiBhIGxlZyBiaW8gZmFpbGVkIGJlY2F1c2UgaXRzIFAyUERNQSBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZFxcbisgKiB0byB0aGlzIG1lbWJlciAoQkxLX1NUU19UQVJHRVQgZnJvbSBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KCkpLiBVc2FibGUgYXRcXG4rICogY29tcGxldGlvbiB0aW1lLCB1bmxpa2UgbWRfYmlvX2lzX3AycGRtYSgpOiBsZWcgYmlvcyBhcmUgY2xvbmVzIHNoYXJpbmdcXG4rICogdGhlIG1hc3RlciBiaW8ncyBidmVjIHRhYmxlLCB3aGljaCBvdXRsaXZlcyB0aGUgbGVnJ3MgZW5kX2lvLCBidXQgdGhlaXJcXG4rICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdHJldHVybiBiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1RBUkdFVCBcXHUwMDI2XFx1MDAyNiBiaW8tXFx1MDAzZWJpX2lvX3ZlYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKTtcXG4rfVxcbitcXG4gLypcXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuaW5kZXggYWZlMmNhOTZhZDhjMjIuLjI0MWMyOTk0YjZhM2Y0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xcbkBAIC00OTEsNyArNDkxLDkgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IE1EX0ZBSUxGQVNUKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cXG4tXFx0XFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQgICAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xcbitcXHRcXHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XFxuIFxcdFxcdFxcdG1kX2Vycm9yKHIxX2Jpby1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTc1LDkgKzE1NzcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xcbiBcXHRcXHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxcbi1cXHRcXHQgKiBiaW8gbGF0ZXIuXFxuK1xcdFxcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXFxuK1xcdFxcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWlzX2Rpc2NhcmQgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0aWYgKCFpc19kaXNjYXJkIFxcdTAwMjZcXHUwMDI2IHJkZXYgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZF9iaW9faXNfcDJwZG1hKGJpbykpXFxuIFxcdFxcdFxcdHdyaXRlX2JlaGluZCA9IHRydWU7XFxuIFxcbiBcXHRcXHRyMV9iaW8tXFx1MDAzZWJpb3NbaV0gPSBOVUxMO1xcbkBAIC0yNTE0LDcgKzI1MTksNyBAQCBzdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbitzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLVxcdTAwM2VtZGRldjtcXG4gXFx0c3RydWN0IHIxY29uZiAqY29uZiA9IG1kZGV2LVxcdTAwM2Vwcml2YXRlO1xcbkBAIC0yNTI4LDYgKzI1MzMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcXG4gXFx0ICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJ3QgZXhhY3RseSBhbGlnbiB3aXRoXFxuIFxcdCAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMgc29tZWhvdy5cXG4gXFx0ICpcXG4rXFx0ICogV2l0aCAnY29hcnNlJywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZFxcbitcXHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xcbitcXHQgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlXFxuK1xcdCAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHNcXG4rXFx0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cXG4rXFx0ICpcXG4gXFx0ICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi5cXG4gXFx0ICovXFxuIFxcbkBAIC0yNTQyLDkgKzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcXG4gXFx0XFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcXHUwMDNjXFx1MDAzYyByZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XFxuIFxcbiBcXHRzZWN0b3IgPSByMV9iaW8tXFx1MDAzZXNlY3RvcjtcXG4tXFx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcXG4tXFx0XFx0ICAgXFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXFxuLVxcdFxcdC0gc2VjdG9yO1xcbitcXHRpZiAoY29hcnNlKVxcbitcXHRcXHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZWN0b3JzID0gKChzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxcbitcXHRcXHRcXHQgICBcXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcXG4rXFx0XFx0XFx0LSBzZWN0b3I7XFxuIFxcbiBcXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYmlvICp3YmlvO1xcbkBAIC0yNTYyLDYgKzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XFxuK1xcdFxcdC8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxcbitcXHRcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLVxcdTAwM2VzZWN0b3I7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby1cXHUwMDNlc2VjdG9ycyBcXHUwMDNjXFx1MDAzYyA5O1xcbiBcXG5AQCAtMjYyMyw3ICsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0XFx0XFx0ICogZXJyb3JzLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xcbitcXHRcXHRcXHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby1cXHUwMDNlYmlvc1ttXSkpXFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGVcXG4rXFx0XFx0XFx0XFx0ICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieVxcbitcXHRcXHRcXHRcXHQgKiBibG9jayBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcXG4rXFx0XFx0XFx0XFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzXFxuK1xcdFxcdFxcdFxcdCAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24ndCBhc3N1bWUuICBSZXRyeVxcbitcXHRcXHRcXHRcXHQgKiB0aGUgcmFuZ2Ugb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpblxcbitcXHRcXHRcXHRcXHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3YXMgbm90aGluZ1xcbitcXHRcXHRcXHRcXHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCB0cnVlKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XFxuIFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcoY29uZi1cXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTI2NTAsNiArMjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbiB7XFxuIFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cXHUwMDNlbWlycm9yc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10ucmRldjtcXG4gXFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVxcdTAwM2ViaW9zW3IxX2Jpby1cXHUwMDNlcmVhZF9kaXNrXTtcXG4rXFx0Ym9vbCBwMnBkbWFfZXJyb3IgPSBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKTtcXG4gXFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXFx1MDAzZW1kZGV2O1xcbiBcXHRzZWN0b3JfdCBzZWN0b3I7XFxuIFxcbkBAIC0yNjY5LDYgKzI3MDAsMTUgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuIFxcdCAqL1xcbiBcXHRpZiAobWRkZXYtXFx1MDAzZXJvKSB7XFxuIFxcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbitcXHR9IGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjtcXG4rXFx0XFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxcbitcXHRcXHQgKiBpcyBoZWFsdGh5IGZvciBob3N0IEkvTzogZG9uJ3QgY2hhcmdlIHRoZSByZWFkLWVycm9yXFxuK1xcdFxcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcXG4rXFx0XFx0ICogb3V0IG9mIHRoZSByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbiBcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uYjI0NDI5YTE5MjU0ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5AQCAtNDg5LDcgKzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcbiBcXHRcXHRcXHRkZWNfcmRldiA9IDA7XFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgTURfRkFJTEZBU1QpKSB7XFxuK1xcdFxcdFxcdCAgICAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBNRF9GQUlMRkFTVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIC8qIEEgbWFwcGluZyBmYWlsdXJlIHNheXMgbm90aGluZyBhYm91dCBkZXZpY2UgaGVhbHRoICovXFxuK1xcdFxcdFxcdCAgICAhbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpIHtcXG4gXFx0XFx0XFx0XFx0bWRfZXJyb3IocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yNzg2LDcgKzI3ODgsNyBAQCBzdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMFxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcXG4rc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLVxcdTAwM2VtYXN0ZXJfYmlvO1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjEwX2Jpby1cXHUwMDNlbWRkZXY7XFxuQEAgLTI4MDAsNiArMjgwMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuIFxcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxcbiBcXHQgKiBibG9ja3MuICBXZSBtdXN0IGhhbmRsZSB0aGlzLlxcbiBcXHQgKlxcbitcXHQgKiBXaXRoICdjb2Fyc2UnLCByZXRyeSB0aGUgd2hvbGUgcmFuZ2UgYXMgb25lIGJpbyBhbmQgcmVjb3JkXFxuK1xcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXFxuK1xcdCAqIGNhbm5vdCBmaW5kIGEgZ29vZCBibG9jayAoUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgZmFpbCB0aGVcXG4rXFx0ICogd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHkpLCB3aGlsZSBhIHNpbmdsZSByZXRyeSBzdGlsbCB0ZWxsc1xcbitcXHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxcbitcXHQgKlxcbiBcXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxcbiBcXHQgKi9cXG4gXFxuQEAgLTI4MTQsOSArMjgyMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuIFxcdFxcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXFx1MDAzY1xcdTAwM2MgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xcbiBcXG4gXFx0c2VjdG9yID0gcjEwX2Jpby1cXHUwMDNlc2VjdG9yO1xcbi1cXHRzZWN0b3JzID0gKChyMTBfYmlvLVxcdTAwM2VzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxcbi1cXHRcXHQgICBcXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcXG4tXFx0XFx0LSBzZWN0b3I7XFxuK1xcdGlmIChjb2Fyc2UpXFxuK1xcdFxcdHNlY3RvcnMgPSBzZWN0X3RvX3dyaXRlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHNlY3RvcnMgPSAoKHIxMF9iaW8tXFx1MDAzZXNlY3RvciArIGJsb2NrX3NlY3RvcnMpXFxuK1xcdFxcdFxcdCAgIFxcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxcbitcXHRcXHRcXHQtIHNlY3RvcjtcXG4gXFxuIFxcdHdoaWxlIChzZWN0X3RvX3dyaXRlKSB7XFxuIFxcdFxcdHN0cnVjdCBiaW8gKndiaW87XFxuQEAgLTI4MzEsNiArMjg0Miw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICtcXG4gXFx0XFx0XFx0XFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XFxuK1xcdFxcdC8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxcbitcXHRcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuIFxcbiBcXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XFxuQEAgLTI4NTMsNiArMjg2Nyw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuIHtcXG4gXFx0aW50IHNsb3QgPSByMTBfYmlvLVxcdTAwM2VyZWFkX3Nsb3Q7XFxuIFxcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFx0Ym9vbCBwMnBkbWFfZXJyb3I7XFxuIFxcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gcjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xcbiBcXG5AQCAtMjg2NSwxNyArMjg4MCwyOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxcbiBcXHQgKiBmcm96ZW4uXFxuIFxcdCAqL1xcbiBcXHRiaW8gPSByMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLmJpbztcXG4rXFx0cDJwZG1hX2Vycm9yID0gbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbyk7XFxuIFxcdGJpb19wdXQoYmlvKTtcXG4gXFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBOVUxMO1xcbiBcXG4gXFx0aWYgKG1kZGV2LVxcdTAwM2VybylcXG4gXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbi1cXHRlbHNlIGlmICghdGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpIHtcXG4rXFx0ZWxzZSBpZiAocDJwZG1hX2Vycm9yKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xcbitcXHRcXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIGZpeCBvbiB0aGUgbWVkaXVtIGFuZCB0aGUgbWVtYmVyXFxuK1xcdFxcdCAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24ndCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcXG4rXFx0XFx0ICogYnVkZ2V0IG9yIGZhaWwgYSBGYWlsRmFzdCBtZW1iZXIsIGp1c3Qga2VlcCB0aGlzIGxlZ1xcbitcXHRcXHQgKiBvdXQgb2YgdGhlIHJldHJ5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xcbiBcXHRcXHRmaXhfcmVhZF9lcnJvcihjb25mLCBtZGRldiwgcjEwX2Jpbyk7XFxuIFxcdFxcdHVuZnJlZXplX2FycmF5KGNvbmYpO1xcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xcbitcXHR9XFxuIFxcbiBcXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTtcXG4gXFx0cjEwX2Jpby1cXHUwMDNlc3RhdGUgPSAwO1xcbkBAIC0yOTQ1LDcgKzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4gXFx0XFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVxcdTAwM2VtZGRldik7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoYmlvICE9IE5VTEwgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9zdGF0dXMpIHtcXG4gXFx0XFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcXG4rXFx0XFx0XFx0XFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKVxcbitcXHRcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHRcXHQgKiBBIFAyUERNQSBtYXBwaW5nIGZhaWx1cmUgZmFpbHNcXG4rXFx0XFx0XFx0XFx0XFx0ICogdGhlIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5LCBzb1xcbitcXHRcXHRcXHRcXHRcXHQgKiBuYXJyb3dpbmcgYmxvY2sgYnkgYmxvY2sgY2Fubm90XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRyYW5zaWVudCBkZXZpY2UgZXJyb3IgYWxzb1xcbitcXHRcXHRcXHRcXHRcXHQgKiBzdXJmYWNlcyBhcyBCTEtfU1RTX1RBUkdFVCwgc29cXG4rXFx0XFx0XFx0XFx0XFx0ICogZG9uJ3QgYXNzdW1lLiAgUmV0cnkgdGhlIHJhbmdlXFxuK1xcdFxcdFxcdFxcdFxcdCAqIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW5cXG4rXFx0XFx0XFx0XFx0XFx0ICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmVcXG4rXFx0XFx0XFx0XFx0XFx0ICogd2FzIG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGVcXG4rXFx0XFx0XFx0XFx0XFx0ICogbWVkaXVtLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0bmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIHRydWUpO1xcbitcXHRcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XFxuIFxcdFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW87XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li5iODY0MmNkMmZiNzkzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbitcXHRzdHJ1Y3Qgc2dfdGFibGUgc2d0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSArIDEpO1xcbkBAIC0xNDgwLDEyICsxNDgxLDEyIEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuIFxcbiBcXHRyZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xcbiBcXG4tXFx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXFxuLVxcdFxcdFxcdCAgICAgICByZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdGlmICh1bmxpa2VseSgqY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0c2d0LnNnbCA9IHJlcS1cXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsO1xcbitcXHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cXHUwMDNlZGF0YV9zZ2wubmVudHM7XFxuK1xcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbitcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90YWJsZTtcXG4tXFx0fVxcbitcXHQqY291bnQgPSBzZ3QubmVudHM7XFxuIFxcbiBcXHRpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHtcXG4gXFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZXNnX3RhYmxlLnNnbCA9XFxuQEAgLTIwMjYsOCArMjAyNyw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubWFwX3FlO1xcbiBcXG4tXFx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcXG4tXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHF1ZXVlLVxcdTAwM2VwaV9zdXBwb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoYy1cXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxcbkBAIC0yMDM5LDExICsyMDM4LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXG4gXFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XFxuIFxcdGlmICh1bmxpa2VseShlcnIgXFx1MDAzYyAwKSkge1xcbi1cXHRcXHRkZXZfZXJyKHF1ZXVlLVxcdTAwM2VjdHJsLVxcdTAwM2VjdHJsLmRldmljZSxcXG4tXFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXFx1MDAzZWN0cmwtXFx1MDAzZWN0cmwuZGV2aWNlLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkZhaWxlZCB0byBtYXAgZGF0YSAoJWQpXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcXG4rXFxuIFxcdHNxZS1cXHUwMDNlY3FlLmRvbmUgPSBudm1lX3JkbWFfc2VuZF9kb25lO1xcbiBcXG4gXFx0aWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBzcWUtXFx1MDAzZWRtYSxcXG5AQCAtMjA2Myw2ICsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRcXHRyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7XFxuIFxcdGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNIHx8IGVyciA9PSAtRUFHQUlOKVxcbiBcXHRcXHRyZXQgPSBCTEtfU1RTX1JFU09VUkNFO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgRE1BIGxheWVyIHJlZnVzZWQgdG8gbWFwIHBlZXIgbWVtb3J5IHRvIHRoaXMgZGV2aWNlOiBhXFxuK1xcdCAqIHByb3BlcnR5IG9mIHRoZSBwYWlyaW5nLCBub3QgYSBwYXRoIGZhaWx1cmUuICBNYXRjaCBudm1lLXBjaVxcbitcXHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXFxuK1xcdCAqL1xcbitcXHRlbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTylcXG4rXFx0XFx0cmV0ID0gQkxLX1NUU19UQVJHRVQ7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcXG4gXFx0bnZtZV9jbGVhbnVwX2NtZChycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA2LjY2ODMzNTM2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNDE0MTM2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX2RtYV9tYXBfaXRlcl9zdGFydFwiLFxuICAgIFwibWRfc3VibWl0X2Jpb1wiLFxuICAgIFwicmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcInJhaWQxX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwicmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDNiNmM5NTA3N2Q3NGM3YjUyZjgzZGRhYzBiODk2ZmMxZjM5YzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6MDc6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmNcbmluZGV4IGJmZGI5ZWQ3MDc0MTE2Li4yZWVkMDZiZmU3OTE3YiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5AQCAtMTkwLDcgKzE5MCwxNSBAQCBzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xuK1x0XHQvKlxuK1x0XHQgKiBQMlAgdHJhbnNmZXJzIHRoYXQgdGhlIG1hcHBpbmcgbGF5ZXIgY2Fubm90IHN1cHBvcnRcbitcdFx0ICogcmVwb3J0IEJMS19TVFNfVEFSR0VULCBtYXRjaGluZyBkbWFfbWFwX3NndGFibGUoKSdzXG4rXHRcdCAqIC1FUkVNT1RFSU8gYW5kIHRoZSBwcmUtYmxrX3JxX2RtYV9tYXAgbnZtZSBiZWhhdmlvcjpcbitcdFx0ICogdGhlIGZhaWx1cmUgaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGRldmljZSBwYWlyaW5nLCBzb1xuK1x0XHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXG4rXHRcdCAqIG5vciBiZSBtaXN0YWtlbiBmb3IgYW4gaW52YWxpZCByZXF1ZXN0LlxuK1x0XHQgKi9cbitcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCArNDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBiaW8gY291bGQgYmUgbWVyZ2VhYmxlIGFmdGVyIHBhc3NpbmcgdG8gdW5kZXJsYXllciAqL1xuLVx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbitcdC8qXG4rXHQgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BXG4rXHQgKiBiaW9zIFJFUV9OT01FUkdFIGlzIGxvYWQtYmVhcmluZzogdGhlIERNQSBtYXBwaW5nIHR5cGUgb2YgYVxuK1x0ICogcmVxdWVzdCBpcyByZXNvbHZlZCBvbmNlLCBmcm9tIGl0cyBmaXJzdCBzZWdtZW50LCBzbyByZXF1ZXN0c1xuK1x0ICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWdcbitcdCAqIHJhdGhlciB0aGFuIG1lcmVseSBwcmVzZXJ2ZSBpdCAtLSBiaW9zIGJ1aWx0IHRocm91Z2ggdGhlXG4rXHQgKiBidmVjLWl0ZXIgcGF0aCBhcnJpdmUgd2l0aG91dCBpdC5cbitcdCAqL1xuK1x0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbitcdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbitcdGVsc2VcbitcdFx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbiBcbiBcdG1kX2hhbmRsZV9yZXF1ZXN0KG1kZGV2LCBiaW8pO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGQ4ZGFmMGY3NWNiYmU4Li5iMWFiZmM4OWNmYzA3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtMTEsOCArMTEsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTIyLDYgKzI0LDM1IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2Jsb2NrLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1heFNlY3RvciAofihzZWN0b3JfdCkwKVxuK1xuKy8qXG4rICogQ2hlY2sgaWYgdGhlIGJpbyBjYXJyaWVzIFBDSSBQMlBETUEgKHBlZXIgZGV2aWNlIG1lbW9yeSkgcGFnZXMuIFJlYWRcbisgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXG4rICogb24gY2xvbmVkIGJpb3M6IG1kIHJvdXRpbmVseSBoYW5kbGVzIHNwbGl0IGNsb25lcywgd2hpY2ggaGF2ZVxuKyAqIGJpX3ZjbnQgPT0gMCBidXQgYSB2YWxpZCBiaV9pb192ZWMgc2hhcmVkIHdpdGggdGhlIHBhcmVudC4gUDJQRE1BIGFuZFxuKyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXG4rICogcmVwcmVzZW50YXRpdmUuIE9ubHkgdmFsaWQgYmVmb3JlIHRoZSBiaW8ncyBpdGVyYXRvciBpcyBjb25zdW1lZDpcbisgKiBiaW9faGFzX2RhdGEoKSBpcyBmYWxzZSBhdCBjb21wbGV0aW9uIHRpbWUuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHJldHVybiBiaW9faGFzX2RhdGEoYmlvKSBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX2lvX3ZlYyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbit9XG4rXG4rLypcbisgKiBUcnVlIHdoZW4gYSBsZWcgYmlvIGZhaWxlZCBiZWNhdXNlIGl0cyBQMlBETUEgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWRcbisgKiB0byB0aGlzIG1lbWJlciAoQkxLX1NUU19UQVJHRVQgZnJvbSBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KCkpLiBVc2FibGUgYXRcbisgKiBjb21wbGV0aW9uIHRpbWUsIHVubGlrZSBtZF9iaW9faXNfcDJwZG1hKCk6IGxlZyBiaW9zIGFyZSBjbG9uZXMgc2hhcmluZ1xuKyAqIHRoZSBtYXN0ZXIgYmlvJ3MgYnZlYyB0YWJsZSwgd2hpY2ggb3V0bGl2ZXMgdGhlIGxlZydzIGVuZF9pbywgYnV0IHRoZWlyXG4rICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBiaW8gKmJpbylcbit7XG4rXHRyZXR1cm4gYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1RBUkdFVCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX2lvX3ZlYyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbit9XG4rXG4gLypcbiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6XG4gICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5pbmRleCBhZmUyY2E5NmFkOGMyMi4uMjQxYzI5OTRiNmEzZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuQEAgLTQ5MSw3ICs0OTEsOSBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbitcdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xuK1x0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0bWRfZXJyb3IocjFfYmlvLVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0fVxuIFxuQEAgLTE1NzUsOSArMTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0LypcbiBcdFx0ICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzXG4gXHRcdCAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kXG4tXHRcdCAqIGJpbyBsYXRlci5cbitcdFx0ICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXNcbitcdFx0ICogdGhlIGRhdGEgd2l0aCBiaW9fY29weV9kYXRhKCksIGEgQ1BVIGNvcHkgdGhhdCBjYW5ub3QgYmVcbitcdFx0ICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy5cbiBcdFx0ICovXG4tXHRcdGlmICghaXNfZGlzY2FyZCBcdTAwMjZcdTAwMjYgcmRldiBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFtZF9iaW9faXNfcDJwZG1hKGJpbykpXG4gXHRcdFx0d3JpdGVfYmVoaW5kID0gdHJ1ZTtcbiBcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbaV0gPSBOVUxMO1xuQEAgLTI1MTQsNyArMjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuK3N0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGksIGJvb2wgY29hcnNlKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByMV9iaW8tXHUwMDNlbWRkZXY7XG4gXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbkBAIC0yNTI4LDYgKzI1MzMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcyBzb21laG93LlxuIFx0ICpcbitcdCAqIFdpdGggJ2NvYXJzZScsIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmRcbitcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXG4rXHQgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlXG4rXHQgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzXG4rXHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxuK1x0ICpcbiBcdCAqIFdlIGN1cnJlbnRseSBvd24gYSByZWZlcmVuY2Ugb24gdGhlIHJkZXYuXG4gXHQgKi9cbiBcbkBAIC0yNTQyLDkgKzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuLVx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbi1cdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbi1cdFx0LSBzZWN0b3I7XG4rXHRpZiAoY29hcnNlKVxuK1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbitcdGVsc2VcbitcdFx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbitcdFx0XHQgICBcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxuK1x0XHRcdC0gc2VjdG9yO1xuIFxuIFx0d2hpbGUgKHNlY3RfdG9fd3JpdGUpIHtcbiBcdFx0c3RydWN0IGJpbyAqd2JpbztcbkBAIC0yNTYyLDYgKzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0XHR9XG4gXG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuK1x0XHQvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqL1xuK1x0XHRpZiAobWRfYmlvX2lzX3AycGRtYSh3YmlvKSlcbitcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHIxX2Jpby1cdTAwM2VzZWN0b3I7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVx1MDAzZXNlY3RvcnMgXHUwMDNjXHUwMDNjIDk7XG4gXG5AQCAtMjYyMyw3ICsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiBcdFx0XHQgKiBlcnJvcnMuXG4gXHRcdFx0ICovXG4gXHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XG4rXHRcdFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihyMV9iaW8tXHUwMDNlYmlvc1ttXSkpXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogQSBQMlBETUEgbWFwcGluZyBmYWlsdXJlIGZhaWxzIHRoZSB3aG9sZVxuK1x0XHRcdFx0ICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieVxuK1x0XHRcdFx0ICogYmxvY2sgY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXG4rXHRcdFx0XHQgKiB0cmFuc2llbnQgZGV2aWNlIGVycm9yIGFsc28gc3VyZmFjZXMgYXNcbitcdFx0XHRcdCAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24ndCBhc3N1bWUuICBSZXRyeVxuK1x0XHRcdFx0ICogdGhlIHJhbmdlIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW5cbitcdFx0XHRcdCAqIG9uZSBnbzsgaWYgaXQgc3VjY2VlZHMsIHRoZXJlIHdhcyBub3RoaW5nXG4rXHRcdFx0XHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIGZhbHNlKTtcbiBcdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuIFx0XHRcdFx0XHQgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdH1cbkBAIC0yNjUwLDYgKzI2ODAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4rXHRib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2OSw2ICsyNzAwLDE1IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0ICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xuK1x0fSBlbHNlIGlmIChwMnBkbWFfZXJyb3IpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHBlZXIgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWQgdG8gdGhpcyBtZW1iZXI7XG4rXHRcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXJcbitcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbid0IGNoYXJnZSB0aGUgcmVhZC1lcnJvclxuK1x0XHQgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnXG4rXHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRyMV9iaW8tXHUwMDNlYmlvc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXSA9IElPX0JMT0NLRUQ7XG4gXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uYjI0NDI5YTE5MjU0ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5AQCAtNDg5LDcgKzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuIFx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbitcdFx0XHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgLyogQSBtYXBwaW5nIGZhaWx1cmUgc2F5cyBub3RoaW5nIGFib3V0IGRldmljZSBoZWFsdGggKi9cbitcdFx0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0XHRtZF9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0XHR9XG4gXG5AQCAtMjc4Niw3ICsyNzg4LDcgQEAgc3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxuK3N0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSwgYm9vbCBjb2Fyc2UpXG4ge1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjEwX2Jpby1cdTAwM2VtYXN0ZXJfYmlvO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHIxMF9iaW8tXHUwMDNlbWRkZXY7XG5AQCAtMjgwMCw2ICsyODAyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcy5cbiBcdCAqXG4rXHQgKiBXaXRoICdjb2Fyc2UnLCByZXRyeSB0aGUgd2hvbGUgcmFuZ2UgYXMgb25lIGJpbyBhbmQgcmVjb3JkXG4rXHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xuK1x0ICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZVxuK1x0ICogd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHkpLCB3aGlsZSBhIHNpbmdsZSByZXRyeSBzdGlsbCB0ZWxsc1xuK1x0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cbitcdCAqXG4gXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxuIFx0ICovXG4gXG5AQCAtMjgxNCw5ICsyODIyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMTBfYmlvLVx1MDAzZXNlY3Rvcjtcbi1cdHNlY3RvcnMgPSAoKHIxMF9iaW8tXHUwMDNlc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbi1cdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbi1cdFx0LSBzZWN0b3I7XG4rXHRpZiAoY29hcnNlKVxuK1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbitcdGVsc2VcbitcdFx0c2VjdG9ycyA9ICgocjEwX2Jpby1cdTAwM2VzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxuK1x0XHRcdCAgIFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXG4rXHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI4MzEsNiArMjg0Miw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xuIFx0XHRcdFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXG4gXHRcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XG5AQCAtMjg1Myw2ICsyODY3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3I7XG4gXHRzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xuIFxuQEAgLTI4NjUsMTcgKzI4ODAsMjggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdCAqIGZyb3plbi5cbiBcdCAqL1xuIFx0YmlvID0gcjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbztcbitcdHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuLVx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuK1x0ZWxzZSBpZiAocDJwZG1hX2Vycm9yKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuK1x0XHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIGZpeCBvbiB0aGUgbWVkaXVtIGFuZCB0aGUgbWVtYmVyXG4rXHRcdCAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24ndCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbitcdFx0ICogYnVkZ2V0IG9yIGZhaWwgYSBGYWlsRmFzdCBtZW1iZXIsIGp1c3Qga2VlcCB0aGlzIGxlZ1xuK1x0XHQgKiBvdXQgb2YgdGhlIHJldHJ5LlxuK1x0XHQgKi9cbitcdFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7XG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4rXHR9IGVsc2Uge1xuIFx0XHRmcmVlemVfYXJyYXkoY29uZiwgMSk7XG4gXHRcdGZpeF9yZWFkX2Vycm9yKGNvbmYsIG1kZGV2LCByMTBfYmlvKTtcbiBcdFx0dW5mcmVlemVfYXJyYXkoY29uZik7XG4tXHR9IGVsc2Vcbi1cdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuK1x0fVxuIFxuIFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7XG4gXHRyMTBfYmlvLVx1MDAzZXN0YXRlID0gMDtcbkBAIC0yOTQ1LDcgKzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fSBlbHNlIGlmIChiaW8gIT0gTlVMTCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX3N0YXR1cykge1xuIFx0XHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4rXHRcdFx0XHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpXG4rXHRcdFx0XHRcdC8qXG4rXHRcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlsc1xuK1x0XHRcdFx0XHQgKiB0aGUgd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHksIHNvXG4rXHRcdFx0XHRcdCAqIG5hcnJvd2luZyBibG9jayBieSBibG9jayBjYW5ub3RcbitcdFx0XHRcdFx0ICogZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcbitcdFx0XHRcdFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvXG4rXHRcdFx0XHRcdCAqIHN1cmZhY2VzIGFzIEJMS19TVFNfVEFSR0VULCBzb1xuK1x0XHRcdFx0XHQgKiBkb24ndCBhc3N1bWUuICBSZXRyeSB0aGUgcmFuZ2VcbitcdFx0XHRcdFx0ICogb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpblxuK1x0XHRcdFx0XHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZVxuK1x0XHRcdFx0XHQgKiB3YXMgbm90aGluZyB3cm9uZyB3aXRoIHRoZVxuK1x0XHRcdFx0XHQgKiBtZWRpdW0uXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSwgdHJ1ZSk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uYjg2NDJjZDJmYjc5M2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiArMTQ2OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXHRcdGludCAqY291bnQsIGludCAqcGlfY291bnQpXG4ge1xuIFx0c3RydWN0IG52bWVfcmRtYV9yZXF1ZXN0ICpyZXEgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbitcdHN0cnVjdCBzZ190YWJsZSBzZ3Q7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikocmVxICsgMSk7XG5AQCAtMTQ4MCwxMiArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0cmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCk7XG4gXG4tXHQqY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2LCByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsLFxuLVx0XHRcdCAgICAgICByZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMsIHJxX2RtYV9kaXIocnEpKTtcbi1cdGlmICh1bmxpa2VseSgqY291bnQgXHUwMDNjPSAwKSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuK1x0c2d0LnNnbCA9IHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2w7XG4rXHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cztcbitcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG4rXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfZnJlZV90YWJsZTtcbi1cdH1cbitcdCpjb3VudCA9IHNndC5uZW50cztcbiBcbiBcdGlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkge1xuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCA9XG5AQCAtMjAyNiw4ICsyMDI3LDYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubWFwX3FlO1xuIFxuLVx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcbi1cbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgcXVldWUtXHUwMDNlcGlfc3VwcG9ydCBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYy1cdTAwM2Vjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8XG5AQCAtMjAzOSwxMSArMjAzOCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcbiBcdGVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpO1xuIFx0aWYgKHVubGlrZWx5KGVyciBcdTAwM2MgMCkpIHtcbi1cdFx0ZGV2X2VycihxdWV1ZS1cdTAwM2VjdHJsLVx1MDAzZWN0cmwuZGV2aWNlLFxuLVx0XHRcdCAgICAgXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwiLCBlcnIpO1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4rXHRcdFx0XHQgICAgXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwiLCBlcnIpO1xuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbitcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4rXG4gXHRzcWUtXHUwMDNlY3FlLmRvbmUgPSBudm1lX3JkbWFfc2VuZF9kb25lO1xuIFxuIFx0aWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBzcWUtXHUwMDNlZG1hLFxuQEAgLTIwNjMsNiArMjA2NCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xuIFx0ZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pXG4gXHRcdHJldCA9IEJMS19TVFNfUkVTT1VSQ0U7XG4rXHQvKlxuK1x0ICogVGhlIERNQSBsYXllciByZWZ1c2VkIHRvIG1hcCBwZWVyIG1lbW9yeSB0byB0aGlzIGRldmljZTogYVxuK1x0ICogcHJvcGVydHkgb2YgdGhlIHBhaXJpbmcsIG5vdCBhIHBhdGggZmFpbHVyZS4gIE1hdGNoIG52bWUtcGNpXG4rXHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXG4rXHQgKi9cbitcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxuK1x0XHRyZXQgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MDYuNjY4MzM3NjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNDIxNDIxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFAyUERNQSBIYW5kbGluZyBpbiBCbG9jayBMYXllciwgTUQgUkFJRCwgYW5kIE5WTWUgUkRNQSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lIGludGVyZXN0aW5nIGFyZWFzLCBhbmQgbXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0aW5nbGluZy4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIFAyUERNQSAoUGVlci10by1QZWVyIERNQSkgcmVxdWVzdCBoYW5kbGluZywgYW5kIGl0IHRvdWNoZXMgY29yZSBjb21wb25lbnRzIOKAkyB0aGUgYmxvY2sgbGF5ZXIsIE1EIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcsIG5vIGRvdWJ0LiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIG91dCwgbW9kaWZ5aW5nOiBgYmxvY2svYmxrLW1xLWRtYS5jYCwgYGRyaXZlcnMvbWQvbWQuY2AsIGBkcml2ZXJzL21kL21kLmhgLCBgZHJpdmVycy9tZC9yYWlkMS5jYCwgYGRyaXZlcnMvbWQvcmFpZDEwLmNgLCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY2AuXG5cbkVzc2VudGlhbGx5LCBpdCdzIGFib3V0IHJlZmluaW5nIGhvdyBtYXBwaW5nIGVycm9ycyBmb3IgUDJQRE1BIGFyZSBkZWFsdCB3aXRoIGFjcm9zcyB0aGVzZSBkaWZmZXJlbnQgc3Vic3lzdGVtcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBhbmQgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMgdG8gYWNjb3VudCBmb3IgdGhlc2UgcG90ZW50aWFsIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1kX2Jpb19pc19wMnBkbWFgIGFuZCBgbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yYCBpbiBgZHJpdmVycy9tZC9tZC5oYCwgYXMgd2VsbCBhcyBtb2RpZmljYXRpb25zIHRvIGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdGAsIGFuZCBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBuYXJyb3dfd3JpdGVfZXJyb3JgIGZvciBib3RoIFJBSUQxIGFuZCBSQUlEMTAuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggdHJpZXMgdG8gcHJldmVudCBkZXZpY2UgZmFpbHVyZXMgdXBvbiBQMlBETUEgbWFwcGluZyBlcnJvcnMsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBkZXNpZ24gZ29hbC4gVGhpcyBhbGwgcG9pbnRzIHRvIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZmFpbHVyZSBtb2RlcyBhbmQgZWRnZSBjYXNlcywgd2hpY2ggaXMgd2hhdCBtYWtlcyBmdXp6aW5nIHNvIHZhbHVhYmxlIGhlcmUuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkndmUgbmFycm93ZWQgZG93biB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgSSdkIHdhbnQgdG8gZm9jdXMgb246IGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYC5cblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gRm9yIE1ELCBpdCBsb29rcyBsaWtlIGBNRF9SQUlEMWAgYW5kIGBNRF9SQUlEMTBgIGFyZSBlc3NlbnRpYWwuIEZvciBOVk1lIFJETUEsIGl0J3MgYE5WTUVfUkRNQWAuIEFuZCwgb2YgY291cnNlLCBmb3IgUDJQRE1BLCBgUENJX1AyUERNQWAgaXMgY3JpdGljYWwuIFRoZXNlIG5lZWQgdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBJIGdvIHRvbyBmYXIuIFdpdGggdGhlc2UgY2hlY2tzIGluIHBsYWNlLCBJIGNhbiBnZXQgZG93biB0byBnZW5lcmF0aW5nIHNvbWUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjE2LjkxMDQ4MzY1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTY5MTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURfUkFJRDFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz0xMDQ9Y29uZmlnIE1EX1JBSUQwXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlJBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzoxNi45OTYxODA4NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkwMzAwOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRE1BIEFjY2VsZXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGVmZmVjdGl2ZWx5IGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgdHdvIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBOVk1FX1JETUFgIGFuZCBgUENJX1AyUERNQWAuXG5cbmBOVk1FX1JETUFgIGlzIHRoZSBvYnZpb3VzIGZpcnN0IHBsYWNlIHRvIHN0YXJ0LiBJZiB0aGUgc3RvcmFnZSBkZXZpY2Ugc3VwcG9ydHMgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzLCBhbmQgd2UgY2FuIGNvbmZpZ3VyZSBvdXIgc3lzdGVtIHRvIHV0aWxpemUgaXQsIHRoYXQgY291bGQgYnlwYXNzIGEgbG90IG9mIHRoZSB0cmFkaXRpb25hbCBkYXRhIHRyYW5zZmVyIG92ZXJoZWFkLiBJIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIE5WTWUgY29udHJvbGxlcidzIGNhcGFiaWxpdGllcyBhbmQgdGhlIFJETUEgaW1wbGVtZW50YXRpb24gb24gdGhpcyBwbGF0Zm9ybS4gV2hhdCBhcmUgdGhlIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnMgaW4gdGVybXMgb2YgbWVtb3J5IHJlZ2lzdHJhdGlvbiBhbmQgYWRkcmVzc2luZz9cblxuVGhlbiwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnNpZGVyIGBQQ0lfUDJQRE1BYC4gUG9pbnQtdG8tcG9pbnQgRE1BIG9uIHRoZSBQQ0llIGJ1cyAqY291bGQqIG9mZmVyIGEgZmFzdCBwYXRoIGZvciBkYXRhIHRyYW5zZmVyLCBhc3N1bWluZyB0aGUgZGV2aWNlcyBhcmUgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIHNhbWUgSS9PIGRvbWFpbi4gVGhpcyBpcyBnb2luZyB0byBkZXBlbmQgaGVhdmlseSBvbiB0aGUgc3lzdGVtJ3MgdG9wb2xvZ3kgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFBDSWUgcm9vdCBjb21wbGV4ZXMgYW5kIHN3aXRjaGVzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBwb3RlbnRpYWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZlYXNpYmlsaXR5LiBXaGF0IGtpbmQgb2YgYmFuZHdpZHRoIGNhbiB3ZSBhY3R1YWxseSBleHBlY3Q/IERvZXMgdGhlIHN5c3RlbSBoYXJkd2FyZSBzdXBwb3J0IHBlZXItdG8tcGVlciB0cmFuc2ZlcnMsIGFuZCBhcmUgdGhlcmUgYW55IHJlcXVpcmVkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjAuODg2NDgzNDc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI1MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfUkRNQVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBSRE1BIGhvc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzoyMS4wMDM3Mzg5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODUwNzM1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipQQ0lfUDJQRE1BIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkZWx2ZSBpbnRvIHRoaXMgUENJX1AyUERNQSBzaXR1YXRpb24uIE5vIG5lZWQgZm9yIGZsdWZmLCBJJ20gZ29pbmcgc3RyYWlnaHQgaW4sIGFzc3VtaW5nIGV2ZXJ5b25lIGtub3dzIHRoZSBiYXNpY3MuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVja1wiIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdHVzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuIFdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IFRoZSByZWdpc3RlcnMsIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXJlIHRoaXMgbW9kdWxlIHNpdHMgd2l0aGluIGl0LCB0aGUgY3VycmVudCBzdGF0ZSBvZiBpdCwgYW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBhcmlzaW5nLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgYSBtZXRob2RpY2FsIGFwcHJvYWNoLiBUaW1lIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjQuMDg4ODE0MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNzY3MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvS2NvbmZpZz0xOTc9Y29uZmlnIFBDSUVfVFBIXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwNjpjb25maWcgUENJX1AyUERNQVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjQuMjAyNTg1MDcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzOTkwMzI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgb2YgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIERNQSBNYXBwaW5nIEl0ZXJhdGlvbiBTdGFydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQgaXMgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCB3aGVyZSBpcyB0aGlzIGRlZmluZWQ/IElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gTXkga25vd2xlZGdlIGlzIHRoYXQgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgIGlzIGxpa2VseSBpbiBgYmxrLW1xLWRtYS5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5OyBteSBtZW1vcnkgY291bGQgYmUgb2ZmLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBsb2NhdGlvbiBhbmQgdGhlbiBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5OTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzozMC41NDI0OTIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTYxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLW1xLWRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS1kbWEuYz0xNDA9c3RhdGljIGlubGluZSB2b2lkIGJsa19ycV9tYXBfaXRlcl9pbml0KHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0xNjMtXFxuYmxvY2svYmxrLW1xLWRtYS5jOjE2NDpzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuYmxvY2svYmxrLW1xLWRtYS5jLTE2NS1cXHRcXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmxrLW1xLWRtYS5jPTIzND1ib29sIGJsa19ycV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzctXFx0YmxrX3JxX21hcF9pdGVyX2luaXQocmVxLCBcXHUwMDI2aXRlci1cXHUwMDNlaXRlcik7XFxuYmxvY2svYmxrLW1xLWRtYS5jOjIzODpcXHRyZXR1cm4gYmxrX2RtYV9tYXBfaXRlcl9zdGFydChyZXEsIGRtYV9kZXYsIHN0YXRlLCBpdGVyLFxcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzktXFx0XFx0XFx0XFx0ICAgICAgYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSk7XFxuLS1cXG5ibG9jay9ibGstbXEtZG1hLmM9MzQ5PWJvb2wgYmxrX3JxX2ludGVncml0eV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0zNjItXFx0fTtcXG5ibG9jay9ibGstbXEtZG1hLmM6MzYzOlxcdHJldHVybiBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHJlcSwgZG1hX2Rldiwgc3RhdGUsIGl0ZXIsIGxlbik7XFxuYmxvY2svYmxrLW1xLWRtYS5jLTM2NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjMwLjY5MDY1ODM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNzg2MTQzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIFJvYWRtYXAgZm9yIFJBSUQgYW5kIE5WTWUgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZSwgbXkgbWluZCdzIGJlZW4gY2h1cm5pbmcgdGhyb3VnaCBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBibG9jayBsYXllciBhbmQgc3RvcmFnZSBkcml2ZXJzLiBJJ20gZm9jdXNpbmcgb24gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlcnMsIGVzcGVjaWFsbHkgdGhvc2UgaGFuZGxpbmcgUkFJRCBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBOVk1lIChOb24tVm9sYXRpbGUgTWVtb3J5IEV4cHJlc3MpIG92ZXIgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSBzdWJzeXN0ZW0uXG5cbkZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudHJ5IHBvaW50LCB0aGUgYG1kX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBndW4gZm9yIGJsb2NrIEkvTyBvcGVyYXRpb25zIGluIHRoZSBNRCBsYXllci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBkYXRhIGZsb3dpbmcgdGhyb3VnaCB0aGUgUkFJRCBhbGdvcml0aG1zLlxuXG5UaGVuLCBJJ20gemVyb2luZyBpbiBvbiBSQUlEMSwgd2hpY2ggaXMgbWlycm9yaW5nLiBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgd3JpdGUgcGF0aDogYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGlzIGhvdyB0aGUgd3JpdGUgaXMgaW5pdGlhdGVkLCBhbmQgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCBpcyBjYWxsZWQgd2hlbiBpdCBjb21wbGV0ZXMuIEl0IGFsc28gaGFzIGVycm9yIGhhbmRsZXJzOyBJJ20gcGljdHVyaW5nIGhvdyBgbmFycm93X3dyaXRlX2Vycm9yYCwgYW5kIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIHdvdWxkIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkgaW4gZXJyb3IgcmVjb3ZlcnkgYW5kIGNvbXBsZXRpb24gc2lnbmFsaW5nIGZvciB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgUkFJRDEgc2V0dXAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgYGhhbmRsZV9yZWFkX2Vycm9yYCBkZWFscyB3aXRoIHJlYWQgZmFpbHVyZXMgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMgb24gUkFJRDEuXG5cbkV4cGFuZGluZyBpbnRvIFJBSUQxMCwgSSdtIGNvbnNpZGVyaW5nIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAuIEhvdyBkbyB0aGVzZSBkaWZmZXIgZnJvbSBSQUlEMSBpbiB0aGVpciBoYW5kbGluZyBvZiB3cml0ZSBjb21wbGV0aW9ucyBhbmQgdGhlIGVuZC10by1lbmQgd3JpdGUgbGlmZWN5Y2xlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzdHJpcGluZyBhbmQgbWlycm9yaW5nIGNvbWJpbmF0aW9uPyBJJ20gdHJ5aW5nIHRvIHNlZSBpZiBJIGNhbiB1bmlmeSB0aGUgaGFuZGxpbmcgb3IgZmluZCBhIHNwZWNpZmljIHJhdGlvbmFsZSBmb3IgdGhlaXIgc2VwYXJhdGUgZXhpc3RlbmNlLlxuXG5Ob3csIG15IHRob3VnaHRzIGFyZSBzd2l0Y2hpbmcgZ2VhcnMgdG8gTlZNZSBvdmVyIFJETUEuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgcmVtb3RlIE5WTWUgZGV2aWNlLCBhbmQgaG93IHRoZXNlIHdyaXRlIG9wZXJhdGlvbnMgYXJlIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJ20gZm9jdXNpbmcgb24gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIHdoaWNoIHdpbGwgaGFuZGxlIERNQSBtYXBwaW5nLCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAsIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSBxdWV1aW5nIG9mIHRoZSByZXF1ZXN0LlxuXG5GaW5hbGx5LCBJJ20gbW9tZW50YXJpbHkgaW50ZXJydXB0aW5nIG15c2VsZi4gSnVzdCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGp1c3QgYSBxdWljayBkZXRhaWwsIGJ1dCBpdCBjb3VsZCBpbXBhY3QgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MzcuOTY5Mjc3MTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwNTIyNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvcmFpZDEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL3JhaWQxLmM9MjQzNz1zdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIxLVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTIyOnN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGksIGJvb2wgY29hcnNlKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIzLXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNjI1PXN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjUzLVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjU0OlxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU1LVxcdFxcdFxcdGVsc2VcXG5kcml2ZXJzL21kL3JhaWQxLmM6MjY1NjpcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2NTctXFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhjb25mLVxcdTAwM2VtaXJyb3JzW21dLnJkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjM4LjA5MDMzODM2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY5MDkyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBQMlBETUEgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gUDJQRE1BLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWFsbXMgb2YgTUQgUkFJRCAoUkFJRDEgYW5kIFJBSUQxMCwgaXQgc2VlbXMpIGFuZCBOVk1lIFJETUEuIEl0J3MgZnVuY3Rpb25hbCwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGludGVuZGVkIGNoYW5nZSBpcyBpbXBsZW1lbnRlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgaWYgdGhlIGBQQ0lfUDJQRE1BYCBjb25maWcgb3B0aW9uIGlzIHN1ZmZpY2llbnQuIEl0IGlzOyBpdCdzIGEgc2ltcGxlIGJvb2xlYW4uIE5vIG5lZWQgdG8gbXVkZHkgdGhlIHdhdGVycyB3aXRoIGBQQ0lfUDJQRE1BX1RFU1RgIG9yIGFueXRoaW5nIG1vcmUgY29tcGxleC5cblxuTm93LCBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gcHJvdmlkZSBhcyB0YXJnZXRlZCBhIHJldmlldyBhcyBwb3NzaWJsZS4gVGhlIG9yaWdpbmFsIGxpc3QgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbnRyeSBwb2ludHMsIGBtZF9zdWJtaXRfYmlvYCBmb3IgTUQgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGZvciBOVk1lIFJETUEsIGFyZSBjcnVjaWFsIHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyB0aGVyZS4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBhcmUga2V5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIFJBSUQgaW1wbGVtZW50YXRpb25zLiBUaGUgY2hhbmdlIGlzIHByZWNpc2VseSB3aXRoaW4gdGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMuXG5cblRoZSBpbmNsdXNpb24gb2YgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgLCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCwgYGhhbmRsZV9yZWFkX2Vycm9yYCwgYHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdGAsIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCwgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIGFuZCBgbmFycm93X3dyaXRlX2Vycm9yYCByb3VuZHMgb3V0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFuZCBjbGFyaWZpZXMgdGhlIGZvY3VzIG9uIGVycm9yLXJlbGF0ZWQgZmxvd3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzI2LCJPdXRwdXRUb2tlbnMiOjI1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzo0Ni44NTk0MzUzMjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzMDk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgICBcIm1kX3N1Ym1pdF9iaW9cIixcbiAgICBcInJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJyYWlkMV93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcInJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX2RtYV9tYXBfaXRlcl9zdGFydFwiLFxuICAgIFwibWRfc3VibWl0X2Jpb1wiLFxuICAgIFwicmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcInJhaWQxX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwicmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbmkr6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 16:40:26 +0000 UTC FinishedAt: 2026-07-18 17:07:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA" ], "series_id": "2b92b30c-7da4-4d0e-9f77-58210d51f51c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_dma_map_iter_start", "md_submit_bio", "raid1_end_write_request", "raid1_write_request", "narrow_write_error", "handle_write_finished", "handle_read_error", "raid10_end_write_request", "handle_write_completed", "nvme_rdma_dma_map_req", "nvme_rdma_queue_rq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19kbWFfbWFwX2l0ZXJfc3RhcnQmIzM0OywKICAgICYjMzQ7bWRfc3VibWl0X2JpbyYjMzQ7LAogICAgJiMzNDtyYWlkMV9lbmRfd3JpdGVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtyYWlkMV93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7cmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MDNiNmM5NTA3N2Q3NGM3YjUyZjgzZGRhYzBiODk2ZmMxZjM5YzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6MDc6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuQEAgLTE5MCw3ICYjNDM7MTkwLDE1IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9ORTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRpdGVyLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU5WQUw7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUDJQIHRyYW5zZmVycyB0aGF0IHRoZSBtYXBwaW5nIGxheWVyIGNhbm5vdCBzdXBwb3J0XG4mIzQzO1x0XHQgKiByZXBvcnQgQkxLX1NUU19UQVJHRVQsIG1hdGNoaW5nIGRtYV9tYXBfc2d0YWJsZSgpJiMzOTtzXG4mIzQzO1x0XHQgKiAtRVJFTU9URUlPIGFuZCB0aGUgcHJlLWJsa19ycV9kbWFfbWFwIG52bWUgYmVoYXZpb3I6XG4mIzQzO1x0XHQgKiB0aGUgZmFpbHVyZSBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZGV2aWNlIHBhaXJpbmcsIHNvXG4mIzQzO1x0XHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXG4mIzQzO1x0XHQgKiBub3IgYmUgbWlzdGFrZW4gZm9yIGFuIGludmFsaWQgcmVxdWVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCAmIzQzOzQ1MSwxOCBAQCBzdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi9cbi1cdGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2PSB+UkVRX05PTUVSR0U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BXG4mIzQzO1x0ICogYmlvcyBSRVFfTk9NRVJHRSBpcyBsb2FkLWJlYXJpbmc6IHRoZSBETUEgbWFwcGluZyB0eXBlIG9mIGFcbiYjNDM7XHQgKiByZXF1ZXN0IGlzIHJlc29sdmVkIG9uY2UsIGZyb20gaXRzIGZpcnN0IHNlZ21lbnQsIHNvIHJlcXVlc3RzXG4mIzQzO1x0ICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWdcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBtZXJlbHkgcHJlc2VydmUgaXQgLS0gYmlvcyBidWlsdCB0aHJvdWdoIHRoZVxuJiM0MztcdCAqIGJ2ZWMtaXRlciBwYXRoIGFycml2ZSB3aXRob3V0IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtZF9iaW9faXNfcDJwZG1hKGJpbykpXG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2PSB+UkVRX05PTUVSR0U7XG4gXG4gXHRtZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXG5pbmRleCBkOGRhZjBmNzVjYmJlOC4uYjFhYmZjODljZmMwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQuaFxuQEAgLTExLDggJiM0MzsxMSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbkBAIC0yMiw2ICYjNDM7MjQsMzUgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFx1MDAzZVxuIFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiB0aGUgYmlvIGNhcnJpZXMgUENJIFAyUERNQSAocGVlciBkZXZpY2UgbWVtb3J5KSBwYWdlcy4gUmVhZFxuJiM0MzsgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXG4mIzQzOyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmVcbiYjNDM7ICogYmlfdmNudCA9PSAwIGJ1dCBhIHZhbGlkIGJpX2lvX3ZlYyBzaGFyZWQgd2l0aCB0aGUgcGFyZW50LiBQMlBETUEgYW5kXG4mIzQzOyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXG4mIzQzOyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkOlxuJiM0MzsgKiBiaW9faGFzX2RhdGEoKSBpcyBmYWxzZSBhdCBjb21wbGV0aW9uIHRpbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUcnVlIHdoZW4gYSBsZWcgYmlvIGZhaWxlZCBiZWNhdXNlIGl0cyBQMlBETUEgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWRcbiYjNDM7ICogdG8gdGhpcyBtZW1iZXIgKEJMS19TVFNfVEFSR0VUIGZyb20gYmxrX2RtYV9tYXBfaXRlcl9zdGFydCgpKS4gVXNhYmxlIGF0XG4mIzQzOyAqIGNvbXBsZXRpb24gdGltZSwgdW5saWtlIG1kX2Jpb19pc19wMnBkbWEoKTogbGVnIGJpb3MgYXJlIGNsb25lcyBzaGFyaW5nXG4mIzQzOyAqIHRoZSBtYXN0ZXIgYmlvJiMzOTtzIGJ2ZWMgdGFibGUsIHdoaWNoIG91dGxpdmVzIHRoZSBsZWcmIzM5O3MgZW5kX2lvLCBidXQgdGhlaXJcbiYjNDM7ICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19UQVJHRVQgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxuICAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggYWZlMmNhOTZhZDhjMjIuLjI0MWMyOTk0YjZhM2Y0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLmNcbkBAIC00OTEsNyAmIzQzOzQ5MSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0aWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAvKiBXZSBuZXZlciB0cnkgRmFpbEZhc3QgdG8gV3JpdGVNb3N0bHkgZGV2aWNlcyAqL1xuLVx0XHQgICAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgLyogQSBtYXBwaW5nIGZhaWx1cmUgc2F5cyBub3RoaW5nIGFib3V0IGRldmljZSBoZWFsdGggKi9cbiYjNDM7XHRcdCAgICAhbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpIHtcbiBcdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuIFx0XHR9XG4gXG5AQCAtMTU3NSw5ICYjNDM7MTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0LypcbiBcdFx0ICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzXG4gXHRcdCAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kXG4tXHRcdCAqIGJpbyBsYXRlci5cbiYjNDM7XHRcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXG4mIzQzO1x0XHQgKiB0aGUgZGF0YSB3aXRoIGJpb19jb3B5X2RhdGEoKSwgYSBDUFUgY29weSB0aGF0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy5cbiBcdFx0ICovXG4tXHRcdGlmICghaXNfZGlzY2FyZCBcdTAwMjZcdTAwMjYgcmRldiBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbiBcdFx0XHR3cml0ZV9iZWhpbmQgPSB0cnVlO1xuIFxuIFx0XHRyMV9iaW8tXHUwMDNlYmlvc1tpXSA9IE5VTEw7XG5AQCAtMjUxNCw3ICYjNDM7MjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuJiM0MztzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLVx1MDAzZW1kZGV2O1xuIFx0c3RydWN0IHIxY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG5AQCAtMjUyOCw2ICYjNDM7MjUzMywxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0ICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJiMzOTt0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcyBzb21laG93LlxuIFx0ICpcbiYjNDM7XHQgKiBXaXRoICYjMzk7Y29hcnNlJiMzOTssIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmRcbiYjNDM7XHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xuJiM0MztcdCAqIGNhbm5vdCBmaW5kIGEgZ29vZCBibG9jayAoUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgZmFpbCB0aGVcbiYjNDM7XHQgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzXG4mIzQzO1x0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cbiYjNDM7XHQgKlxuIFx0ICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi5cbiBcdCAqL1xuIFxuQEAgLTI1NDIsOSAmIzQzOzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuLVx0c2VjdG9ycyA9ICgoc2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpXG4tXHRcdCAgIFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXG4tXHRcdC0gc2VjdG9yO1xuJiM0MztcdGlmIChjb2Fyc2UpXG4mIzQzO1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZWN0b3JzID0gKChzZWN0b3IgJiM0MzsgYmxvY2tfc2VjdG9ycylcbiYjNDM7XHRcdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbiYjNDM7XHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI1NjIsNiAmIzQzOzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0XHR9XG4gXG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHIxX2Jpby1cdTAwM2VzZWN0b3I7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVx1MDAzZXNlY3RvcnMgXHUwMDNjXHUwMDNjIDk7XG4gXG5AQCAtMjYyMyw3ICYjNDM7MjY0MCwyMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHRcdFx0ICogZXJyb3JzLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZhaWwgPSB0cnVlO1xuLVx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuJiM0MztcdFx0XHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby1cdTAwM2ViaW9zW21dKSlcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGVcbiYjNDM7XHRcdFx0XHQgKiByYW5nZSBpZGVudGljYWxseSwgc28gbmFycm93aW5nIGJsb2NrIGJ5XG4mIzQzO1x0XHRcdFx0ICogYmxvY2sgY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXG4mIzQzO1x0XHRcdFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzXG4mIzQzO1x0XHRcdFx0ICogQkxLX1NUU19UQVJHRVQsIHNvIGRvbiYjMzk7dCBhc3N1bWUuICBSZXRyeVxuJiM0MztcdFx0XHRcdCAqIHRoZSByYW5nZSBvbmNlOiBpZiBpdCBmYWlscywgcmVjb3JkIGl0IGluXG4mIzQzO1x0XHRcdFx0ICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUgd2FzIG5vdGhpbmdcbiYjNDM7XHRcdFx0XHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0cmRldl9kZWNfcGVuZGluZyhjb25mLVx1MDAzZW1pcnJvcnNbbV0ucmRldixcbiBcdFx0XHRcdFx0IGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHR9XG5AQCAtMjY1MCw2ICYjNDM7MjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cdTAwM2VtaXJyb3JzW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdLnJkZXY7XG4gXHRzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tXHUwMDNlYmlvc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXTtcbiYjNDM7XHRib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2OSw2ICYjNDM7MjcwMCwxNSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiBcdCAqL1xuIFx0aWYgKG1kZGV2LVx1MDAzZXJvKSB7XG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiYjNDM7XHR9IGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuJiM0MztcdFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxuJiM0MztcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbiYjMzk7dCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbiYjNDM7XHRcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcbiYjNDM7XHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiBcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbmluZGV4IDBhM2NmZGQzZjVkZjgwLi5iMjQ0MjlhMTkyNTRkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC00ODksNyAmIzQzOzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuIFx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbiYjNDM7XHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xuJiM0MztcdFx0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0XHRtZF9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0XHR9XG4gXG5AQCAtMjc4Niw3ICYjNDM7Mjc4OCw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiYjNDM7c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcbiB7XG4gXHRzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLVx1MDAzZW1hc3Rlcl9iaW87XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjEwX2Jpby1cdTAwM2VtZGRldjtcbkBAIC0yODAwLDYgJiM0MzsyODAyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2VzbiYjMzk7dCBleGFjdGx5IGFsaWduIHdpdGhcbiBcdCAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMuXG4gXHQgKlxuJiM0MztcdCAqIFdpdGggJiMzOTtjb2Fyc2UmIzM5OywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZFxuJiM0MztcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXG4mIzQzO1x0ICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZVxuJiM0MztcdCAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHNcbiYjNDM7XHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxuJiM0MztcdCAqXG4gXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxuIFx0ICovXG4gXG5AQCAtMjgxNCw5ICYjNDM7MjgyMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXHUwMDNjXHUwMDNjIHJkZXYtXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xuIFxuIFx0c2VjdG9yID0gcjEwX2Jpby1cdTAwM2VzZWN0b3I7XG4tXHRzZWN0b3JzID0gKChyMTBfYmlvLVx1MDAzZXNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKVxuLVx0XHQgICBcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxuLVx0XHQtIHNlY3RvcjtcbiYjNDM7XHRpZiAoY29hcnNlKVxuJiM0MztcdFx0c2VjdG9ycyA9IHNlY3RfdG9fd3JpdGU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c2VjdG9ycyA9ICgocjEwX2Jpby1cdTAwM2VzZWN0b3IgJiM0MzsgYmxvY2tfc2VjdG9ycylcbiYjNDM7XHRcdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbiYjNDM7XHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI4MzEsNiAmIzQzOzI4NDIsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7XG4gXHRcdFx0XHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcbiBcdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbkBAIC0yODUzLDYgJiM0MzsyODY3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgcDJwZG1hX2Vycm9yO1xuIFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0ucmRldjtcbiBcbkBAIC0yODY1LDE3ICYjNDM7Mjg4MCwyOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0ICogZnJvemVuLlxuIFx0ICovXG4gXHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvO1xuJiM0MztcdHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuLVx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuJiM0MztcdFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxuJiM0MztcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbiYjMzk7dCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbiYjNDM7XHRcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcbiYjNDM7XHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuJiM0MztcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xuIFx0XHRmaXhfcmVhZF9lcnJvcihjb25mLCBtZGRldiwgcjEwX2Jpbyk7XG4gXHRcdHVuZnJlZXplX2FycmF5KGNvbmYpO1xuLVx0fSBlbHNlXG4tXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbiYjNDM7XHR9XG4gXG4gXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTtcbiBcdHIxMF9iaW8tXHUwMDNlc3RhdGUgPSAwO1xuQEAgLTI5NDUsNyAmIzQzOzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fSBlbHNlIGlmIChiaW8gIT0gTlVMTCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX3N0YXR1cykge1xuIFx0XHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4mIzQzO1x0XHRcdFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKVxuJiM0MztcdFx0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlsc1xuJiM0MztcdFx0XHRcdFx0ICogdGhlIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5LCBzb1xuJiM0MztcdFx0XHRcdFx0ICogbmFycm93aW5nIGJsb2NrIGJ5IGJsb2NrIGNhbm5vdFxuJiM0MztcdFx0XHRcdFx0ICogZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcbiYjNDM7XHRcdFx0XHRcdCAqIHRyYW5zaWVudCBkZXZpY2UgZXJyb3IgYWxzb1xuJiM0MztcdFx0XHRcdFx0ICogc3VyZmFjZXMgYXMgQkxLX1NUU19UQVJHRVQsIHNvXG4mIzQzO1x0XHRcdFx0XHQgKiBkb24mIzM5O3QgYXNzdW1lLiAgUmV0cnkgdGhlIHJhbmdlXG4mIzQzO1x0XHRcdFx0XHQgKiBvbmNlOiBpZiBpdCBmYWlscywgcmVjb3JkIGl0IGluXG4mIzQzO1x0XHRcdFx0XHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZVxuJiM0MztcdFx0XHRcdFx0ICogd2FzIG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGVcbiYjNDM7XHRcdFx0XHRcdCAqIG1lZGl1bS5cbiYjNDM7XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIHRydWUpO1xuJiM0MztcdFx0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uYjg2NDJjZDJmYjc5M2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiAmIzQzOzE0NjksNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRpbnQgKmNvdW50LCBpbnQgKnBpX2NvdW50KVxuIHtcbiBcdHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG4mIzQzO1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgJiM0MzsgMSk7XG5AQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcbiBcdHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyA9IGJsa19ycV9tYXBfc2cocnEsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xuIFxuLVx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbi1cdFx0XHQgICAgICAgcmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XG4tXHRpZiAodW5saWtlbHkoKmNvdW50IFx1MDAzYz0gMCkpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRzZ3Quc2dsID0gcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbDtcbiYjNDM7XHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cztcbiYjNDM7XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RhYmxlO1xuLVx0fVxuJiM0MztcdCpjb3VudCA9IHNndC5uZW50cztcbiBcbiBcdGlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkge1xuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCA9XG5AQCAtMjAyNiw4ICYjNDM7MjAyNyw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgJiM0MzsyMDM4LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFxuIFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XG4gXHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xuLVx0XHRkZXZfZXJyKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4tXHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuJiM0MztcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4mIzQzO1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgJiM0MzsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0XHRyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7XG4gXHRlbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTilcbiBcdFx0cmV0ID0gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBETUEgbGF5ZXIgcmVmdXNlZCB0byBtYXAgcGVlciBtZW1vcnkgdG8gdGhpcyBkZXZpY2U6IGFcbiYjNDM7XHQgKiBwcm9wZXJ0eSBvZiB0aGUgcGFpcmluZywgbm90IGEgcGF0aCBmYWlsdXJlLiAgTWF0Y2ggbnZtZS1wY2lcbiYjNDM7XHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZWxzZSBpZiAoZXJyID09IC1FUkVNT1RFSU8pXG4mIzQzO1x0XHRyZXQgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19kbWFfbWFwX2l0ZXJfc3RhcnQmIzM0OywKICAgICYjMzQ7bWRfc3VibWl0X2JpbyYjMzQ7LAogICAgJiMzNDtyYWlkMV9lbmRfd3JpdGVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtyYWlkMV93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7cmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwM2I2Yzk1MDc3ZDc0YzdiNTJmODNkZGFjMGI4OTZmYzFmMzljODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAxNzowNzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuYwppbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmMKQEAgLTE5MCw3ICYjNDM7MTkwLDE1IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldiwKIAljYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWl0ZXItJmd0O3N0YXR1cyA9IEJMS19TVFNfSU5WQUw7CiYjNDM7CQkvKgomIzQzOwkJICogUDJQIHRyYW5zZmVycyB0aGF0IHRoZSBtYXBwaW5nIGxheWVyIGNhbm5vdCBzdXBwb3J0CiYjNDM7CQkgKiByZXBvcnQgQkxLX1NUU19UQVJHRVQsIG1hdGNoaW5nIGRtYV9tYXBfc2d0YWJsZSgpJiMzOTtzCiYjNDM7CQkgKiAtRVJFTU9URUlPIGFuZCB0aGUgcHJlLWJsa19ycV9kbWFfbWFwIG52bWUgYmVoYXZpb3I6CiYjNDM7CQkgKiB0aGUgZmFpbHVyZSBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZGV2aWNlIHBhaXJpbmcsIHNvCiYjNDM7CQkgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpCiYjNDM7CQkgKiBub3IgYmUgbWlzdGFrZW4gZm9yIGFuIGludmFsaWQgcmVxdWVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaXRlci0mZ3Q7c3RhdHVzID0gQkxLX1NUU19UQVJHRVQ7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBkMTQ2NWJjZDg2YzgxMi4uM2FlNGZkNGVmMzgxNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTQ1MSw4ICYjNDM7NDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQlyZXR1cm47CiAJfQogCi0JLyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi8KLQliaW8tJmd0O2JpX29wZiAmYW1wOz0gflJFUV9OT01FUkdFOwomIzQzOwkvKgomIzQzOwkgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BCiYjNDM7CSAqIGJpb3MgUkVRX05PTUVSR0UgaXMgbG9hZC1iZWFyaW5nOiB0aGUgRE1BIG1hcHBpbmcgdHlwZSBvZiBhCiYjNDM7CSAqIHJlcXVlc3QgaXMgcmVzb2x2ZWQgb25jZSwgZnJvbSBpdHMgZmlyc3Qgc2VnbWVudCwgc28gcmVxdWVzdHMKJiM0MzsJICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWcKJiM0MzsJICogcmF0aGVyIHRoYW4gbWVyZWx5IHByZXNlcnZlIGl0IC0tIGJpb3MgYnVpbHQgdGhyb3VnaCB0aGUKJiM0MzsJICogYnZlYy1pdGVyIHBhdGggYXJyaXZlIHdpdGhvdXQgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKQomIzQzOwkJYmlvLSZndDtiaV9vcGYgfD0gUkVRX05PTUVSR0U7CiYjNDM7CWVsc2UKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmICZhbXA7PSB+UkVRX05PTUVSR0U7CiAKIAltZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBkOGRhZjBmNzVjYmJlOC4uYjFhYmZjODljZmMwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTExLDggJiM0MzsxMSwxMCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tvYmplY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CkBAIC0yMiw2ICYjNDM7MjQsMzUgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvYmxvY2suaCZndDsKIAogI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIHRoZSBiaW8gY2FycmllcyBQQ0kgUDJQRE1BIChwZWVyIGRldmljZSBtZW1vcnkpIHBhZ2VzLiBSZWFkCiYjNDM7ICogYmlfaW9fdmVjIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIGJpb19maXJzdF9idmVjX2FsbCgpLCB3aGljaCBXQVJOcwomIzQzOyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmUKJiM0MzsgKiBiaV92Y250ID09IDAgYnV0IGEgdmFsaWQgYmlfaW9fdmVjIHNoYXJlZCB3aXRoIHRoZSBwYXJlbnQuIFAyUERNQSBhbmQKJiM0MzsgKiBob3N0IHBhZ2VzIG11c3Qgbm90IGJlIG1peGVkIHdpdGhpbiBvbmUgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpcwomIzQzOyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkOgomIzQzOyAqIGJpb19oYXNfZGF0YSgpIGlzIGZhbHNlIGF0IGNvbXBsZXRpb24gdGltZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRydWUgd2hlbiBhIGxlZyBiaW8gZmFpbGVkIGJlY2F1c2UgaXRzIFAyUERNQSBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZAomIzQzOyAqIHRvIHRoaXMgbWVtYmVyIChCTEtfU1RTX1RBUkdFVCBmcm9tIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoKSkuIFVzYWJsZSBhdAomIzQzOyAqIGNvbXBsZXRpb24gdGltZSwgdW5saWtlIG1kX2Jpb19pc19wMnBkbWEoKTogbGVnIGJpb3MgYXJlIGNsb25lcyBzaGFyaW5nCiYjNDM7ICogdGhlIG1hc3RlciBiaW8mIzM5O3MgYnZlYyB0YWJsZSwgd2hpY2ggb3V0bGl2ZXMgdGhlIGxlZyYjMzk7cyBlbmRfaW8sIGJ1dCB0aGVpcgomIzQzOyAqIGl0ZXJhdG9yIGlzIGNvbnN1bWVkIGJ5IHRoZW4sIHNvIGJpb19oYXNfZGF0YSgpIGNhbm5vdCBnYXRlIHRoZSBhY2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19UQVJHRVQgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBhZmUyY2E5NmFkOGMyMi4uMjQxYzI5OTRiNmEzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTQ5MSw3ICYjNDM7NDkxLDkgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKIAkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkgJmFtcDsmYW1wOwogCQkgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi8KLQkJICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpIHsKJiM0MzsJCSAgICAhdGVzdF9iaXQoV3JpdGVNb3N0bHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqLwomIzQzOwkJICAgICFtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkgewogCQkJbWRfZXJyb3IocjFfYmlvLSZndDttZGRldiwgcmRldik7CiAJCX0KIApAQCAtMTU3NSw5ICYjNDM7MTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbywKIAkJLyoKIAkJICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzCiAJCSAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kCi0JCSAqIGJpbyBsYXRlci4KJiM0MzsJCSAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzCiYjNDM7CQkgKiB0aGUgZGF0YSB3aXRoIGJpb19jb3B5X2RhdGEoKSwgYSBDUFUgY29weSB0aGF0IGNhbm5vdCBiZQomIzQzOwkJICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy4KIAkJICovCi0JCWlmICghaXNfZGlzY2FyZCAmYW1wOyZhbXA7IHJkZXYgJmFtcDsmYW1wOyB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpCiYjNDM7CQlpZiAoIWlzX2Rpc2NhcmQgJmFtcDsmYW1wOyByZGV2ICZhbXA7JmFtcDsgdGVzdF9iaXQoV3JpdGVNb3N0bHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbWRfYmlvX2lzX3AycGRtYShiaW8pKQogCQkJd3JpdGVfYmVoaW5kID0gdHJ1ZTsKIAogCQlyMV9iaW8tJmd0O2Jpb3NbaV0gPSBOVUxMOwpAQCAtMjUxNCw3ICYjNDM7MjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogCX0KIH0KIAotc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSkKJiM0MztzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSkKIHsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLSZndDttZGRldjsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CkBAIC0yNTI4LDYgJiM0MzsyNTMzLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpCiAJICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJiMzOTt0IGV4YWN0bHkgYWxpZ24gd2l0aAogCSAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMgc29tZWhvdy4KIAkgKgomIzQzOwkgKiBXaXRoICYjMzk7Y29hcnNlJiMzOTssIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmQKJiM0MzsJICogb25lIGJhZCByYW5nZSBpZiBpdCBmYWlsczogdXNlZCB3aGVuIHBlci1ibG9jayBuYXJyb3dpbmcKJiM0MzsJICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZQomIzQzOwkgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzCiYjNDM7CSAqIGEgc2luY2UtY2xlYXJlZCB0cmFuc2llbnQgZXJyb3IgYXBhcnQuCiYjNDM7CSAqCiAJICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi4KIAkgKi8KIApAQCAtMjU0Miw5ICYjNDM7MjU1MywxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKQogCQlibG9ja19zZWN0b3JzID0gcm91bmR1cCgxICZsdDsmbHQ7IHJkZXYtJmd0O2JhZGJsb2Nrcy5zaGlmdCwgbGJzKTsKIAogCXNlY3RvciA9IHIxX2Jpby0mZ3Q7c2VjdG9yOwotCXNlY3RvcnMgPSAoKHNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKQotCQkgICAmYW1wOyB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpCi0JCS0gc2VjdG9yOwomIzQzOwlpZiAoY29hcnNlKQomIzQzOwkJc2VjdG9ycyA9IHNlY3RfdG9fd3JpdGU7CiYjNDM7CWVsc2UKJiM0MzsJCXNlY3RvcnMgPSAoKHNlY3RvciAmIzQzOyBibG9ja19zZWN0b3JzKQomIzQzOwkJCSAgICZhbXA7IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSkKJiM0MzsJCQktIHNlY3RvcjsKIAogCXdoaWxlIChzZWN0X3RvX3dyaXRlKSB7CiAJCXN0cnVjdCBiaW8gKndiaW87CkBAIC0yNTYyLDYgJiM0MzsyNTc2LDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSkKIAkJfQogCiAJCXdiaW8tJmd0O2JpX29wZiA9IFJFUV9PUF9XUklURTsKJiM0MzsJCS8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovCiYjNDM7CQlpZiAobWRfYmlvX2lzX3AycGRtYSh3YmlvKSkKJiM0MzsJCQl3YmlvLSZndDtiaV9vcGYgfD0gUkVRX05PTUVSR0U7CiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLSZndDtzZWN0b3I7CiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby0mZ3Q7c2VjdG9ycyAmbHQ7Jmx0OyA5OwogCkBAIC0yNjIzLDcgJiM0MzsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkJCSAqIGVycm9ycy4KIAkJCSAqLwogCQkJZmFpbCA9IHRydWU7Ci0JCQluYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtKTsKJiM0MzsJCQlpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby0mZ3Q7Ymlvc1ttXSkpCiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGUKJiM0MzsJCQkJICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieQomIzQzOwkJCQkgKiBibG9jayBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGEKJiM0MzsJCQkJICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzCiYjNDM7CQkJCSAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24mIzM5O3QgYXNzdW1lLiAgUmV0cnkKJiM0MzsJCQkJICogdGhlIHJhbmdlIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW4KJiM0MzsJCQkJICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUgd2FzIG5vdGhpbmcKJiM0MzsJCQkJICogd3Jvbmcgd2l0aCB0aGUgbWVkaXVtLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSwgdHJ1ZSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7CiAJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtJmd0O21pcnJvcnNbbV0ucmRldiwKIAkJCQkJIGNvbmYtJmd0O21kZGV2KTsKIAkJfQpAQCAtMjY1MCw2ICYjNDM7MjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi0mZ3Q7bWlycm9yc1tyMV9iaW8tJmd0O3JlYWRfZGlza10ucmRldjsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdOwomIzQzOwlib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb25mLSZndDttZGRldjsKIAlzZWN0b3JfdCBzZWN0b3I7CiAKQEAgLTI2NjksNiAmIzQzOzI3MDAsMTUgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pCiAJICovCiAJaWYgKG1kZGV2LSZndDtybykgewogCQlyMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDsKJiM0MzsJfSBlbHNlIGlmIChwMnBkbWFfZXJyb3IpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjsKJiM0MzsJCSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXIKJiM0MzsJCSAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24mIzM5O3QgY2hhcmdlIHRoZSByZWFkLWVycm9yCiYjNDM7CQkgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnCiYjNDM7CQkgKiBvdXQgb2YgdGhlIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewogCQltZF9lcnJvcihtZGRldiwgcmRldik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDBhM2NmZGQzZjVkZjgwLi5iMjQ0MjlhMTkyNTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC00ODksNyAmIzQzOzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCiAKIAkJCWRlY19yZGV2ID0gMDsKIAkJCWlmICh0ZXN0X2JpdChGYWlsRmFzdCwgJmFtcDtyZGV2LSZndDtmbGFncykgJmFtcDsmYW1wOwotCQkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkpIHsKJiM0MzsJCQkgICAgKGJpby0mZ3Q7Ymlfb3BmICZhbXA7IE1EX0ZBSUxGQVNUKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIC8qIEEgbWFwcGluZyBmYWlsdXJlIHNheXMgbm90aGluZyBhYm91dCBkZXZpY2UgaGVhbHRoICovCiYjNDM7CQkJICAgICFtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkgewogCQkJCW1kX2Vycm9yKHJkZXYtJmd0O21kZGV2LCByZGV2KTsKIAkJCX0KIApAQCAtMjc4Niw3ICYjNDM7Mjc4OCw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwCiAJfQogfQogCi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpCiYjNDM7c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSkKIHsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLSZndDttYXN0ZXJfYmlvOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByMTBfYmlvLSZndDttZGRldjsKQEAgLTI4MDAsNiAmIzQzOzI4MDIsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKQogCSAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2VzbiYjMzk7dCBleGFjdGx5IGFsaWduIHdpdGgKIAkgKiBibG9ja3MuICBXZSBtdXN0IGhhbmRsZSB0aGlzLgogCSAqCiYjNDM7CSAqIFdpdGggJiMzOTtjb2Fyc2UmIzM5OywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZAomIzQzOwkgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZwomIzQzOwkgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlCiYjNDM7CSAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHMKJiM0MzsJICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC4KJiM0MzsJICoKIAkgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LgogCSAqLwogCkBAIC0yODE0LDkgJiM0MzsyODIyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSkKIAkJYmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSAmbHQ7Jmx0OyByZGV2LSZndDtiYWRibG9ja3Muc2hpZnQsIGxicyk7CiAKIAlzZWN0b3IgPSByMTBfYmlvLSZndDtzZWN0b3I7Ci0Jc2VjdG9ycyA9ICgocjEwX2Jpby0mZ3Q7c2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpCi0JCSAgICZhbXA7IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSkKLQkJLSBzZWN0b3I7CiYjNDM7CWlmIChjb2Fyc2UpCiYjNDM7CQlzZWN0b3JzID0gc2VjdF90b193cml0ZTsKJiM0MzsJZWxzZQomIzQzOwkJc2VjdG9ycyA9ICgocjEwX2Jpby0mZ3Q7c2VjdG9yICYjNDM7IGJsb2NrX3NlY3RvcnMpCiYjNDM7CQkJICAgJmFtcDsgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKQomIzQzOwkJCS0gc2VjdG9yOwogCiAJd2hpbGUgKHNlY3RfdG9fd3JpdGUpIHsKIAkJc3RydWN0IGJpbyAqd2JpbzsKQEAgLTI4MzEsNiAmIzQzOzI4NDIsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpCiAJCXdiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gd3NlY3RvciAmIzQzOwogCQkJCSAgIGNob29zZV9kYXRhX29mZnNldChyMTBfYmlvLCByZGV2KTsKIAkJd2Jpby0mZ3Q7Ymlfb3BmID0gUkVRX09QX1dSSVRFOwomIzQzOwkJLyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi8KJiM0MzsJCWlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKQomIzQzOwkJCXdiaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKIAogCQlpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pICZhbXA7JmFtcDsKIAkJICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHsKQEAgLTI4NTMsNiAmIzQzOzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKQogewogCWludCBzbG90ID0gcjEwX2Jpby0mZ3Q7cmVhZF9zbG90OwogCXN0cnVjdCBiaW8gKmJpbzsKJiM0MzsJYm9vbCBwMnBkbWFfZXJyb3I7CiAJc3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tJmd0O2RldnNbc2xvdF0ucmRldjsKIApAQCAtMjg2NSwxNyAmIzQzOzI4ODAsMjggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbykKIAkgKiBmcm96ZW4uCiAJICovCiAJYmlvID0gcjEwX2Jpby0mZ3Q7ZGV2c1tzbG90XS5iaW87CiYjNDM7CXAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pOwogCWJpb19wdXQoYmlvKTsKIAlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7CiAKIAlpZiAobWRkZXYtJmd0O3JvKQogCQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7Ci0JZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewomIzQzOwllbHNlIGlmIChwMnBkbWFfZXJyb3IpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjsKJiM0MzsJCSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXIKJiM0MzsJCSAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24mIzM5O3QgY2hhcmdlIHRoZSByZWFkLWVycm9yCiYjNDM7CQkgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnCiYjNDM7CQkgKiBvdXQgb2YgdGhlIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQltZF9lcnJvcihtZGRldiwgcmRldik7CiYjNDM7CX0gZWxzZSB7CiAJCWZyZWV6ZV9hcnJheShjb25mLCAxKTsKIAkJZml4X3JlYWRfZXJyb3IoY29uZiwgbWRkZXYsIHIxMF9iaW8pOwogCQl1bmZyZWV6ZV9hcnJheShjb25mKTsKLQl9IGVsc2UKLQkJbWRfZXJyb3IobWRkZXYsIHJkZXYpOwomIzQzOwl9CiAKIAlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTsKIAlyMTBfYmlvLSZndDtzdGF0ZSA9IDA7CkBAIC0yOTQ1LDcgJiM0MzsyOTcxLDIzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9jb21wbGV0ZWQoc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9IGVsc2UgaWYgKGJpbyAhPSBOVUxMICZhbXA7JmFtcDsgYmlvLSZndDtiaV9zdGF0dXMpIHsKIAkJCQlmYWlsID0gdHJ1ZTsKLQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiYjNDM7CQkJCWlmIChtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKSkKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBBIFAyUERNQSBtYXBwaW5nIGZhaWx1cmUgZmFpbHMKJiM0MzsJCQkJCSAqIHRoZSB3aG9sZSByYW5nZSBpZGVudGljYWxseSwgc28KJiM0MzsJCQkJCSAqIG5hcnJvd2luZyBibG9jayBieSBibG9jayBjYW5ub3QKJiM0MzsJCQkJCSAqIGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhCiYjNDM7CQkJCQkgKiB0cmFuc2llbnQgZGV2aWNlIGVycm9yIGFsc28KJiM0MzsJCQkJCSAqIHN1cmZhY2VzIGFzIEJMS19TVFNfVEFSR0VULCBzbwomIzQzOwkJCQkJICogZG9uJiMzOTt0IGFzc3VtZS4gIFJldHJ5IHRoZSByYW5nZQomIzQzOwkJCQkJICogb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpbgomIzQzOwkJCQkJICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmUKJiM0MzsJCQkJCSAqIHdhcyBub3RoaW5nIHdyb25nIHdpdGggdGhlCiYjNDM7CQkJCQkgKiBtZWRpdW0uCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCW5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCB0cnVlKTsKJiM0MzsJCQkJZWxzZQomIzQzOwkJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIGZhbHNlKTsKIAkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtJmd0O21kZGV2KTsKIAkJCX0KIAkJCWJpbyA9IHIxMF9iaW8tJmd0O2RldnNbbV0ucmVwbF9iaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKaW5kZXggNjkwOWUzNTQyNzk0MjcuLmI4NjQyY2QyZmI3OTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCkBAIC0xNDY5LDYgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJaW50ICpjb3VudCwgaW50ICpwaV9jb3VudCkKIHsKIAlzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpOwomIzQzOwlzdHJ1Y3Qgc2dfdGFibGUgc2d0OwogCWludCByZXQ7CiAKIAlyZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikocmVxICYjNDM7IDEpOwpAQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTIgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAogCXJlcS0mZ3Q7ZGF0YV9zZ2wubmVudHMgPSBibGtfcnFfbWFwX3NnKHJxLCByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCk7CiAKLQkqY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2LCByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCwKLQkJCSAgICAgICByZXEtJmd0O2RhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7Ci0JaWYgKHVubGlrZWx5KCpjb3VudCAmbHQ7PSAwKSkgewotCQlyZXQgPSAtRUlPOwomIzQzOwlzZ3Quc2dsID0gcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2w7CiYjNDM7CXNndC5vcmlnX25lbnRzID0gcmVxLSZndDtkYXRhX3NnbC5uZW50czsKJiM0MzsJcmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCAmYW1wO3NndCwgcnFfZG1hX2RpcihycSksIDApOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfZnJlZV90YWJsZTsKLQl9CiYjNDM7CSpjb3VudCA9IHNndC5uZW50czsKIAogCWlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkgewogCQlyZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7c2dfdGFibGUuc2dsID0KQEAgLTIwMjYsOCAmIzQzOzIwMjcsNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwX3FlOwogCi0JbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKLQogCWlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgJmFtcDsmYW1wOwogCSAgICBxdWV1ZS0mZ3Q7cGlfc3VwcG9ydCAmYW1wOyZhbXA7CiAJICAgIChjLSZndDtjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8CkBAIC0yMDM5LDExICYjNDM7MjAzOCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpOwogCWlmICh1bmxpa2VseShlcnIgJmx0OyAwKSkgewotCQlkZXZfZXJyKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKLQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxuJiMzNDssIGVycik7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKJiM0MzsJCQkJICAgICYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcbiYjMzQ7LCBlcnIpOwogCQlnb3RvIGVycjsKIAl9CiAKJiM0MzsJbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKJiM0MzsKIAlzcWUtJmd0O2NxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTsKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLSZndDtkbWEsCkBAIC0yMDYzLDYgJiM0MzsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQlyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7CiAJZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pCiAJCXJldCA9IEJMS19TVFNfUkVTT1VSQ0U7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBETUEgbGF5ZXIgcmVmdXNlZCB0byBtYXAgcGVlciBtZW1vcnkgdG8gdGhpcyBkZXZpY2U6IGEKJiM0MzsJICogcHJvcGVydHkgb2YgdGhlIHBhaXJpbmcsIG5vdCBhIHBhdGggZmFpbHVyZS4gIE1hdGNoIG52bWUtcGNpCiYjNDM7CSAqIGFuZCBkbyBub3QgcmV0cnkgKHNlZSBibGtfcGF0aF9lcnJvcigpKS4KJiM0MzsJICovCiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKQomIzQzOwkJcmV0ID0gQkxLX1NUU19UQVJHRVQ7CiAJZWxzZQogCQlyZXQgPSBCTEtfU1RTX0lPRVJSOwogCW52bWVfY2xlYW51cF9jbWQocnEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBQMlBETUEgSGFuZGxpbmcgaW4gQmxvY2sgTGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSBpbnRlcmVzdGluZyBhcmVhcywgYW5kIG15IGV4cGVydCBpbnR1aXRpb24gaXMgdGluZ2xpbmcuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3QgaGFuZGxpbmcsIGFuZCBpdCB0b3VjaGVzIGNvcmUgY29tcG9uZW50cyDigJMgdGhlIGJsb2NrIGxheWVyLCBNRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gVGhhdCYjMzk7cyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZywgbm8gZG91YnQuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgb3V0LCBtb2RpZnlpbmc6IGBibG9jay9ibGstbXEtZG1hLmNgLCBgZHJpdmVycy9tZC9tZC5jYCwgYGRyaXZlcnMvbWQvbWQuaGAsIGBkcml2ZXJzL21kL3JhaWQxLmNgLCBgZHJpdmVycy9tZC9yYWlkMTAuY2AsIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jYC4KCkVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCByZWZpbmluZyBob3cgbWFwcGluZyBlcnJvcnMgZm9yIFAyUERNQSBhcmUgZGVhbHQgd2l0aCBhY3Jvc3MgdGhlc2UgZGlmZmVyZW50IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzIGFuZCBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcyB0byBhY2NvdW50IGZvciB0aGVzZSBwb3RlbnRpYWwgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbWRfYmlvX2lzX3AycGRtYWAgYW5kIGBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3JgIGluIGBkcml2ZXJzL21kL21kLmhgLCBhcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgdG8gYG1kX3N1Ym1pdF9iaW9gLCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgcmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0YCwgYW5kIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgLiBJIGFsc28gc2VlIGNoYW5nZXMgdG8gYG5hcnJvd193cml0ZV9lcnJvcmAgZm9yIGJvdGggUkFJRDEgYW5kIFJBSUQxMC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHBhdGNoIHRyaWVzIHRvIHByZXZlbnQgZGV2aWNlIGZhaWx1cmVzIHVwb24gUDJQRE1BIG1hcHBpbmcgZXJyb3JzLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgZGVzaWduIGdvYWwuIFRoaXMgYWxsIHBvaW50cyB0byBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGZhaWx1cmUgbW9kZXMgYW5kIGVkZ2UgY2FzZXMsIHdoaWNoIGlzIHdoYXQgbWFrZXMgZnV6emluZyBzbyB2YWx1YWJsZSBoZXJlLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTt2ZSBuYXJyb3dlZCBkb3duIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJiMzOTtkIHdhbnQgdG8gZm9jdXMgb246IGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYC4KCkJlZm9yZSBkaXZpbmcgaW4sIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIEZvciBNRCwgaXQgbG9va3MgbGlrZSBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYCBhcmUgZXNzZW50aWFsLiBGb3IgTlZNZSBSRE1BLCBpdCYjMzk7cyBgTlZNRV9SRE1BYC4gQW5kLCBvZiBjb3Vyc2UsIGZvciBQMlBETUEsIGBQQ0lfUDJQRE1BYCBpcyBjcml0aWNhbC4gVGhlc2UgbmVlZCB0byBiZSB2YWxpZGF0ZWQgYmVmb3JlIEkgZ28gdG9vIGZhci4gV2l0aCB0aGVzZSBjaGVja3MgaW4gcGxhY2UsIEkgY2FuIGdldCBkb3duIHRvIGdlbmVyYXRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRF9SQUlEMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTA0PWNvbmZpZyBNRF9SQUlEMFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBETUEgQWNjZWxlcmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGVmZmVjdGl2ZWx5IGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgdHdvIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBOVk1FX1JETUFgIGFuZCBgUENJX1AyUERNQWAuCgpgTlZNRV9SRE1BYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBwbGFjZSB0byBzdGFydC4gSWYgdGhlIHN0b3JhZ2UgZGV2aWNlIHN1cHBvcnRzIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcywgYW5kIHdlIGNhbiBjb25maWd1cmUgb3VyIHN5c3RlbSB0byB1dGlsaXplIGl0LCB0aGF0IGNvdWxkIGJ5cGFzcyBhIGxvdCBvZiB0aGUgdHJhZGl0aW9uYWwgZGF0YSB0cmFuc2ZlciBvdmVyaGVhZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBOVk1lIGNvbnRyb2xsZXImIzM5O3MgY2FwYWJpbGl0aWVzIGFuZCB0aGUgUkRNQSBpbXBsZW1lbnRhdGlvbiBvbiB0aGlzIHBsYXRmb3JtLiBXaGF0IGFyZSB0aGUgbGF0ZW5jeSBjaGFyYWN0ZXJpc3RpY3M/IFdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucyBpbiB0ZXJtcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIGFuZCBhZGRyZXNzaW5nPwoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciBgUENJX1AyUERNQWAuIFBvaW50LXRvLXBvaW50IERNQSBvbiB0aGUgUENJZSBidXMgKmNvdWxkKiBvZmZlciBhIGZhc3QgcGF0aCBmb3IgZGF0YSB0cmFuc2ZlciwgYXNzdW1pbmcgdGhlIGRldmljZXMgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzYW1lIEkvTyBkb21haW4uIFRoaXMgaXMgZ29pbmcgdG8gZGVwZW5kIGhlYXZpbHkgb24gdGhlIHN5c3RlbSYjMzk7cyB0b3BvbG9neSBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgUENJZSByb290IGNvbXBsZXhlcyBhbmQgc3dpdGNoZXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBwb3RlbnRpYWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZlYXNpYmlsaXR5LiBXaGF0IGtpbmQgb2YgYmFuZHdpZHRoIGNhbiB3ZSBhY3R1YWxseSBleHBlY3Q/IERvZXMgdGhlIHN5c3RlbSBoYXJkd2FyZSBzdXBwb3J0IHBlZXItdG8tcGVlciB0cmFuc2ZlcnMsIGFuZCBhcmUgdGhlcmUgYW55IHJlcXVpcmVkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGNhbiYjMzk7dCBhc3N1bWUgYW55dGhpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9SRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTQ3PWNvbmZpZyBOVk1FX0ZBQlJJQ1Ncbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9SRE1BXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFJETUEgaG9zdCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipQQ0lfUDJQRE1BIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhpcyBQQ0lfUDJQRE1BIHNpdHVhdGlvbi4gTm8gbmVlZCBmb3IgZmx1ZmYsIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgaW4sIGFzc3VtaW5nIGV2ZXJ5b25lIGtub3dzIHRoZSBiYXNpY3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrJiMzNDsgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0dXMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGlzc3Vlcy4gV2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZz8gVGhlIHJlZ2lzdGVycywgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmc/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgd2hlcmUgdGhpcyBtb2R1bGUgc2l0cyB3aXRoaW4gaXQsIHRoZSBjdXJyZW50IHN0YXRlIG9mIGl0LCBhbmQgYW55IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGFyaXNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIFRpbWUgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSV9QMlBETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkludGVybmFsIEF1ZGl0IG9mIERNQSBNYXBwaW5nIEl0ZXJhdGlvbiBTdGFydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbW9kaWZpY2F0aW9ucyBhbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGp1bXBzIG91dCBpcyBgYmxrX2RtYV9tYXBfaXRlcl9zdGFydGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIHdoZXJlIGlzIHRoaXMgZGVmaW5lZD8gSXMgaXQgYW4gaW5saW5lIGZ1bmN0aW9uPyBNeSBrbm93bGVkZ2UgaXMgdGhhdCBgYmxrX2RtYV9tYXBfaXRlcl9zdGFydGAgaXMgbGlrZWx5IGluIGBibGstbXEtZG1hLmNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IG15IG1lbW9yeSBjb3VsZCBiZSBvZmYsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGxvY2F0aW9uIGFuZCB0aGVuIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS1kbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEtZG1hLmM9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcnFfbWFwX2l0ZXJfaW5pdChzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmxrLW1xLWRtYS5jLTE2My1cbmJsb2NrL2Jsay1tcS1kbWEuYzoxNjQ6c3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuYmxvY2svYmxrLW1xLWRtYS5jLTE2NS1cdFx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlICpzdGF0ZSwgc3RydWN0IGJsa19kbWFfaXRlciAqaXRlcixcbi0tXG5ibG9jay9ibGstbXEtZG1hLmM9MjM0PWJvb2wgYmxrX3JxX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzctXHRibGtfcnFfbWFwX2l0ZXJfaW5pdChyZXEsIFx1MDAyNml0ZXItXHUwMDNlaXRlcik7XG5ibG9jay9ibGstbXEtZG1hLmM6MjM4Olx0cmV0dXJuIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQocmVxLCBkbWFfZGV2LCBzdGF0ZSwgaXRlcixcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzktXHRcdFx0XHQgICAgICBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpKTtcbi0tXG5ibG9jay9ibGstbXEtZG1hLmM9MzQ5PWJvb2wgYmxrX3JxX2ludGVncml0eV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9ibGstbXEtZG1hLmMtMzYyLVx0fTtcbmJsb2NrL2Jsay1tcS1kbWEuYzozNjM6XHRyZXR1cm4gYmxrX2RtYV9tYXBfaXRlcl9zdGFydChyZXEsIGRtYV9kZXYsIHN0YXRlLCBpdGVyLCBsZW4pO1xuYmxvY2svYmxrLW1xLWRtYS5jLTM2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE1lbnRhbCBSb2FkbWFwIGZvciBSQUlEIGFuZCBOVk1lIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCYjMzk7cyBiZWVuIGNodXJuaW5nIHRocm91Z2ggc29tZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgYmxvY2sgbGF5ZXIgYW5kIHN0b3JhZ2UgZHJpdmVycy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBoYW5kbGluZyBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIE5WTWUgKE5vbi1Wb2xhdGlsZSBNZW1vcnkgRXhwcmVzcykgb3ZlciBSRE1BIChSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIHN1YnN5c3RlbS4KCkZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludCwgdGhlIGBtZF9zdWJtaXRfYmlvYCBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgZ3VuIGZvciBibG9jayBJL08gb3BlcmF0aW9ucyBpbiB0aGUgTUQgbGF5ZXIuIEkmIzM5O20gdmlzdWFsaXppbmcgdGhlIGRhdGEgZmxvd2luZyB0aHJvdWdoIHRoZSBSQUlEIGFsZ29yaXRobXMuCgpUaGVuLCBJJiMzOTttIHplcm9pbmcgaW4gb24gUkFJRDEsIHdoaWNoIGlzIG1pcnJvcmluZy4gSSYjMzk7bSBtZW50YWxseSB0cmFjaW5nIHRoZSB3cml0ZSBwYXRoOiBgcmFpZDFfd3JpdGVfcmVxdWVzdGAgaXMgaG93IHRoZSB3cml0ZSBpcyBpbml0aWF0ZWQsIGFuZCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgIGlzIGNhbGxlZCB3aGVuIGl0IGNvbXBsZXRlcy4gSXQgYWxzbyBoYXMgZXJyb3IgaGFuZGxlcnM7IEkmIzM5O20gcGljdHVyaW5nIGhvdyBgbmFycm93X3dyaXRlX2Vycm9yYCwgYW5kIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIHdvdWxkIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkgaW4gZXJyb3IgcmVjb3ZlcnkgYW5kIGNvbXBsZXRpb24gc2lnbmFsaW5nIGZvciB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgUkFJRDEgc2V0dXAuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBoYW5kbGVfcmVhZF9lcnJvcmAgZGVhbHMgd2l0aCByZWFkIGZhaWx1cmVzIGR1cmluZyB3cml0ZSBvcGVyYXRpb25zIG9uIFJBSUQxLgoKRXhwYW5kaW5nIGludG8gUkFJRDEwLCBJJiMzOTttIGNvbnNpZGVyaW5nIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAuIEhvdyBkbyB0aGVzZSBkaWZmZXIgZnJvbSBSQUlEMSBpbiB0aGVpciBoYW5kbGluZyBvZiB3cml0ZSBjb21wbGV0aW9ucyBhbmQgdGhlIGVuZC10by1lbmQgd3JpdGUgbGlmZWN5Y2xlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzdHJpcGluZyBhbmQgbWlycm9yaW5nIGNvbWJpbmF0aW9uPyBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgSSBjYW4gdW5pZnkgdGhlIGhhbmRsaW5nIG9yIGZpbmQgYSBzcGVjaWZpYyByYXRpb25hbGUgZm9yIHRoZWlyIHNlcGFyYXRlIGV4aXN0ZW5jZS4KCk5vdywgbXkgdGhvdWdodHMgYXJlIHN3aXRjaGluZyBnZWFycyB0byBOVk1lIG92ZXIgUkRNQS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSByZW1vdGUgTlZNZSBkZXZpY2UsIGFuZCBob3cgdGhlc2Ugd3JpdGUgb3BlcmF0aW9ucyBhcmUgaW5pdGlhdGVkIGFuZCBjb21wbGV0ZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIHdoaWNoIHdpbGwgaGFuZGxlIERNQSBtYXBwaW5nLCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAsIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSBxdWV1aW5nIG9mIHRoZSByZXF1ZXN0LgoKRmluYWxseSwgSSYjMzk7bSBtb21lbnRhcmlseSBpbnRlcnJ1cHRpbmcgbXlzZWxmLiBKdXN0IGEgcXVpY2sgY2hlY2suLi4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBuYXJyb3dfd3JpdGVfZXJyb3JgIGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGp1c3QgYSBxdWljayBkZXRhaWwsIGJ1dCBpdCBjb3VsZCBpbXBhY3QgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvcmFpZDEuYz0yNDM3PXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIxLVxuZHJpdmVycy9tZC9yYWlkMS5jOjI1MjI6c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSwgYm9vbCBjb2Fyc2UpXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUyMy17XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jPTI2MjU9c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjUzLVx0XHRcdFx0ICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MjY1NDpcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xuZHJpdmVycy9tZC9yYWlkMS5jLTI2NTUtXHRcdFx0ZWxzZVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2NTY6XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XG5kcml2ZXJzL21kL3JhaWQxLmMtMjY1Ny1cdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcyNgoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIFAyUERNQSBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBQMlBETUEsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHJlYWxtcyBvZiBNRCBSQUlEIChSQUlEMSBhbmQgUkFJRDEwLCBpdCBzZWVtcykgYW5kIE5WTWUgUkRNQS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGludGVuZGVkIGNoYW5nZSBpcyBpbXBsZW1lbnRlZC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBgUENJX1AyUERNQWAgY29uZmlnIG9wdGlvbiBpcyBzdWZmaWNpZW50LiBJdCBpczsgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbi4gTm8gbmVlZCB0byBtdWRkeSB0aGUgd2F0ZXJzIHdpdGggYFBDSV9QMlBETUFfVEVTVGAgb3IgYW55dGhpbmcgbW9yZSBjb21wbGV4LgoKTm93LCBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gcHJvdmlkZSBhcyB0YXJnZXRlZCBhIHJldmlldyBhcyBwb3NzaWJsZS4gVGhlIG9yaWdpbmFsIGxpc3QgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbnRyeSBwb2ludHMsIGBtZF9zdWJtaXRfYmlvYCBmb3IgTUQgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGZvciBOVk1lIFJETUEsIGFyZSBjcnVjaWFsIHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyB0aGVyZS4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBhcmUga2V5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIFJBSUQgaW1wbGVtZW50YXRpb25zLiBUaGUgY2hhbmdlIGlzIHByZWNpc2VseSB3aXRoaW4gdGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMuCgpUaGUgaW5jbHVzaW9uIG9mIGBibGtfZG1hX21hcF9pdGVyX3N0YXJ0YCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgLCBhbmQgYG5hcnJvd193cml0ZV9lcnJvcmAgcm91bmRzIG91dCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhbmQgY2xhcmlmaWVzIHRoZSBmb2N1cyBvbiBlcnJvci1yZWxhdGVkIGZsb3dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICAgJiMzNDttZF9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JhaWQxX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3JhaWQxX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtyYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX2RtYV9tYXBfaXRlcl9zdGFydCYjMzQ7LAogICAgJiMzNDttZF9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JhaWQxX2VuZF93cml0ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3JhaWQxX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtyYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA1Ljk5MjgwMjY2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE2OTU0OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgICBcIm1kX3N1Ym1pdF9iaW9cIixcbiAgICBcInJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJyYWlkMV93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcInJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA1Ljk5MjgwNzk4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NDgxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzAzYjZjOTUwNzdkNzRjN2I1MmY4M2RkYWMwYjg5NmZjMWYzOWM4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzowNzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmNcXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uMmVlZDA2YmZlNzkxN2IgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXFxuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuQEAgLTE5MCw3ICsxOTAsMTUgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQMlAgdHJhbnNmZXJzIHRoYXQgdGhlIG1hcHBpbmcgbGF5ZXIgY2Fubm90IHN1cHBvcnRcXG4rXFx0XFx0ICogcmVwb3J0IEJMS19TVFNfVEFSR0VULCBtYXRjaGluZyBkbWFfbWFwX3NndGFibGUoKSdzXFxuK1xcdFxcdCAqIC1FUkVNT1RFSU8gYW5kIHRoZSBwcmUtYmxrX3JxX2RtYV9tYXAgbnZtZSBiZWhhdmlvcjpcXG4rXFx0XFx0ICogdGhlIGZhaWx1cmUgaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGRldmljZSBwYWlyaW5nLCBzb1xcbitcXHRcXHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXFxuK1xcdFxcdCAqIG5vciBiZSBtaXN0YWtlbiBmb3IgYW4gaW52YWxpZCByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aXRlci1cXHUwMDNlc3RhdHVzID0gQkxLX1NUU19UQVJHRVQ7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXFxuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC00NTEsOCArNDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovXFxuLVxcdGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjY9IH5SRVFfTk9NRVJHRTtcXG4rXFx0LypcXG4rXFx0ICogQSBiaW8gbWQgc3BsaXQgY291bGQgYmUgbWVyZ2VhYmxlIGFnYWluIGJlbG93IG1kLCBidXQgZm9yIFAyUERNQVxcbitcXHQgKiBiaW9zIFJFUV9OT01FUkdFIGlzIGxvYWQtYmVhcmluZzogdGhlIERNQSBtYXBwaW5nIHR5cGUgb2YgYVxcbitcXHQgKiByZXF1ZXN0IGlzIHJlc29sdmVkIG9uY2UsIGZyb20gaXRzIGZpcnN0IHNlZ21lbnQsIHNvIHJlcXVlc3RzXFxuK1xcdCAqIG11c3Qgc3RheSBzaW5nbGUtcHJvdmlkZXIgKHNlZSBfX2Jpb19hZGRfcGFnZSgpKS4gU2V0IHRoZSBmbGFnXFxuK1xcdCAqIHJhdGhlciB0aGFuIG1lcmVseSBwcmVzZXJ2ZSBpdCAtLSBiaW9zIGJ1aWx0IHRocm91Z2ggdGhlXFxuK1xcdCAqIGJ2ZWMtaXRlciBwYXRoIGFycml2ZSB3aXRob3V0IGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNj0gflJFUV9OT01FUkdFO1xcbiBcXG4gXFx0bWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXFxuaW5kZXggZDhkYWYwZjc1Y2JiZTguLmIxYWJmYzg5Y2ZjMDcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxcbisrKyBiL2RyaXZlcnMvbWQvbWQuaFxcbkBAIC0xMSw4ICsxMSwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuQEAgLTIyLDYgKzI0LDM1IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXFxuK1xcbisvKlxcbisgKiBDaGVjayBpZiB0aGUgYmlvIGNhcnJpZXMgUENJIFAyUERNQSAocGVlciBkZXZpY2UgbWVtb3J5KSBwYWdlcy4gUmVhZFxcbisgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXFxuKyAqIG9uIGNsb25lZCBiaW9zOiBtZCByb3V0aW5lbHkgaGFuZGxlcyBzcGxpdCBjbG9uZXMsIHdoaWNoIGhhdmVcXG4rICogYmlfdmNudCA9PSAwIGJ1dCBhIHZhbGlkIGJpX2lvX3ZlYyBzaGFyZWQgd2l0aCB0aGUgcGFyZW50LiBQMlBETUEgYW5kXFxuKyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXFxuKyAqIHJlcHJlc2VudGF0aXZlLiBPbmx5IHZhbGlkIGJlZm9yZSB0aGUgYmlvJ3MgaXRlcmF0b3IgaXMgY29uc3VtZWQ6XFxuKyAqIGJpb19oYXNfZGF0YSgpIGlzIGZhbHNlIGF0IGNvbXBsZXRpb24gdGltZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9faXNfcDJwZG1hKHN0cnVjdCBiaW8gKmJpbylcXG4re1xcbitcXHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9pb192ZWMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXFx1MDAzZWJpX2lvX3ZlYy1cXHUwMDNlYnZfcGFnZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRydWUgd2hlbiBhIGxlZyBiaW8gZmFpbGVkIGJlY2F1c2UgaXRzIFAyUERNQSBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZFxcbisgKiB0byB0aGlzIG1lbWJlciAoQkxLX1NUU19UQVJHRVQgZnJvbSBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KCkpLiBVc2FibGUgYXRcXG4rICogY29tcGxldGlvbiB0aW1lLCB1bmxpa2UgbWRfYmlvX2lzX3AycGRtYSgpOiBsZWcgYmlvcyBhcmUgY2xvbmVzIHNoYXJpbmdcXG4rICogdGhlIG1hc3RlciBiaW8ncyBidmVjIHRhYmxlLCB3aGljaCBvdXRsaXZlcyB0aGUgbGVnJ3MgZW5kX2lvLCBidXQgdGhlaXJcXG4rICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdHJldHVybiBiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1RBUkdFVCBcXHUwMDI2XFx1MDAyNiBiaW8tXFx1MDAzZWJpX2lvX3ZlYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKTtcXG4rfVxcbitcXG4gLypcXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuaW5kZXggYWZlMmNhOTZhZDhjMjIuLjI0MWMyOTk0YjZhM2Y0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xcbkBAIC00OTEsNyArNDkxLDkgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IE1EX0ZBSUxGQVNUKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cXG4tXFx0XFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQgICAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xcbitcXHRcXHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XFxuIFxcdFxcdFxcdG1kX2Vycm9yKHIxX2Jpby1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTc1LDkgKzE1NzcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xcbiBcXHRcXHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxcbi1cXHRcXHQgKiBiaW8gbGF0ZXIuXFxuK1xcdFxcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXFxuK1xcdFxcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWlzX2Rpc2NhcmQgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0aWYgKCFpc19kaXNjYXJkIFxcdTAwMjZcXHUwMDI2IHJkZXYgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZF9iaW9faXNfcDJwZG1hKGJpbykpXFxuIFxcdFxcdFxcdHdyaXRlX2JlaGluZCA9IHRydWU7XFxuIFxcbiBcXHRcXHRyMV9iaW8tXFx1MDAzZWJpb3NbaV0gPSBOVUxMO1xcbkBAIC0yNTE0LDcgKzI1MTksNyBAQCBzdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbitzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjFfYmlvLVxcdTAwM2VtZGRldjtcXG4gXFx0c3RydWN0IHIxY29uZiAqY29uZiA9IG1kZGV2LVxcdTAwM2Vwcml2YXRlO1xcbkBAIC0yNTI4LDYgKzI1MzMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcXG4gXFx0ICogSXQgaXMgY29uY2VpdmFibGUgdGhhdCB0aGUgYmlvIGRvZXNuJ3QgZXhhY3RseSBhbGlnbiB3aXRoXFxuIFxcdCAqIGJsb2Nrcy4gIFdlIG11c3QgaGFuZGxlIHRoaXMgc29tZWhvdy5cXG4gXFx0ICpcXG4rXFx0ICogV2l0aCAnY29hcnNlJywgcmV0cnkgdGhlIHdob2xlIHJhbmdlIGFzIG9uZSBiaW8gYW5kIHJlY29yZFxcbitcXHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xcbitcXHQgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlXFxuK1xcdCAqIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5KSwgd2hpbGUgYSBzaW5nbGUgcmV0cnkgc3RpbGwgdGVsbHNcXG4rXFx0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cXG4rXFx0ICpcXG4gXFx0ICogV2UgY3VycmVudGx5IG93biBhIHJlZmVyZW5jZSBvbiB0aGUgcmRldi5cXG4gXFx0ICovXFxuIFxcbkBAIC0yNTQyLDkgKzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcXG4gXFx0XFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcXHUwMDNjXFx1MDAzYyByZGV2LVxcdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XFxuIFxcbiBcXHRzZWN0b3IgPSByMV9iaW8tXFx1MDAzZXNlY3RvcjtcXG4tXFx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcXG4tXFx0XFx0ICAgXFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXFxuLVxcdFxcdC0gc2VjdG9yO1xcbitcXHRpZiAoY29hcnNlKVxcbitcXHRcXHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZWN0b3JzID0gKChzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxcbitcXHRcXHRcXHQgICBcXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcXG4rXFx0XFx0XFx0LSBzZWN0b3I7XFxuIFxcbiBcXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYmlvICp3YmlvO1xcbkBAIC0yNTYyLDYgKzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XFxuK1xcdFxcdC8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxcbitcXHRcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLVxcdTAwM2VzZWN0b3I7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby1cXHUwMDNlc2VjdG9ycyBcXHUwMDNjXFx1MDAzYyA5O1xcbiBcXG5AQCAtMjYyMyw3ICsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0XFx0XFx0ICogZXJyb3JzLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xcbitcXHRcXHRcXHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHIxX2Jpby1cXHUwMDNlYmlvc1ttXSkpXFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlscyB0aGUgd2hvbGVcXG4rXFx0XFx0XFx0XFx0ICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieVxcbitcXHRcXHRcXHRcXHQgKiBibG9jayBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcXG4rXFx0XFx0XFx0XFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvIHN1cmZhY2VzIGFzXFxuK1xcdFxcdFxcdFxcdCAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24ndCBhc3N1bWUuICBSZXRyeVxcbitcXHRcXHRcXHRcXHQgKiB0aGUgcmFuZ2Ugb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpblxcbitcXHRcXHRcXHRcXHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3YXMgbm90aGluZ1xcbitcXHRcXHRcXHRcXHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCB0cnVlKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XFxuIFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcoY29uZi1cXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTI2NTAsNiArMjY4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbiB7XFxuIFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cXHUwMDNlbWlycm9yc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10ucmRldjtcXG4gXFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVxcdTAwM2ViaW9zW3IxX2Jpby1cXHUwMDNlcmVhZF9kaXNrXTtcXG4rXFx0Ym9vbCBwMnBkbWFfZXJyb3IgPSBtZF9iaW9fcDJwZG1hX21hcHBpbmdfZXJyb3IoYmlvKTtcXG4gXFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXFx1MDAzZW1kZGV2O1xcbiBcXHRzZWN0b3JfdCBzZWN0b3I7XFxuIFxcbkBAIC0yNjY5LDYgKzI3MDAsMTUgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuIFxcdCAqL1xcbiBcXHRpZiAobWRkZXYtXFx1MDAzZXJvKSB7XFxuIFxcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbitcXHR9IGVsc2UgaWYgKHAycGRtYV9lcnJvcikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgcGVlciBwYWdlcyBjYW5ub3QgYmUgRE1BLW1hcHBlZCB0byB0aGlzIG1lbWJlcjtcXG4rXFx0XFx0ICogdGhlcmUgaXMgbm90aGluZyB0byBmaXggb24gdGhlIG1lZGl1bSBhbmQgdGhlIG1lbWJlclxcbitcXHRcXHQgKiBpcyBoZWFsdGh5IGZvciBob3N0IEkvTzogZG9uJ3QgY2hhcmdlIHRoZSByZWFkLWVycm9yXFxuK1xcdFxcdCAqIGJ1ZGdldCBvciBmYWlsIGEgRmFpbEZhc3QgbWVtYmVyLCBqdXN0IGtlZXAgdGhpcyBsZWdcXG4rXFx0XFx0ICogb3V0IG9mIHRoZSByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbiBcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uYjI0NDI5YTE5MjU0ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5AQCAtNDg5LDcgKzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcbiBcXHRcXHRcXHRkZWNfcmRldiA9IDA7XFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgTURfRkFJTEZBU1QpKSB7XFxuK1xcdFxcdFxcdCAgICAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBNRF9GQUlMRkFTVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIC8qIEEgbWFwcGluZyBmYWlsdXJlIHNheXMgbm90aGluZyBhYm91dCBkZXZpY2UgaGVhbHRoICovXFxuK1xcdFxcdFxcdCAgICAhbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpIHtcXG4gXFx0XFx0XFx0XFx0bWRfZXJyb3IocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yNzg2LDcgKzI3ODgsNyBAQCBzdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMFxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcXG4rc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpLCBib29sIGNvYXJzZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW8gPSByMTBfYmlvLVxcdTAwM2VtYXN0ZXJfYmlvO1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcjEwX2Jpby1cXHUwMDNlbWRkZXY7XFxuQEAgLTI4MDAsNiArMjgwMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuIFxcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxcbiBcXHQgKiBibG9ja3MuICBXZSBtdXN0IGhhbmRsZSB0aGlzLlxcbiBcXHQgKlxcbitcXHQgKiBXaXRoICdjb2Fyc2UnLCByZXRyeSB0aGUgd2hvbGUgcmFuZ2UgYXMgb25lIGJpbyBhbmQgcmVjb3JkXFxuK1xcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXFxuK1xcdCAqIGNhbm5vdCBmaW5kIGEgZ29vZCBibG9jayAoUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgZmFpbCB0aGVcXG4rXFx0ICogd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHkpLCB3aGlsZSBhIHNpbmdsZSByZXRyeSBzdGlsbCB0ZWxsc1xcbitcXHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxcbitcXHQgKlxcbiBcXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxcbiBcXHQgKi9cXG4gXFxuQEAgLTI4MTQsOSArMjgyMiwxMiBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXFxuIFxcdFxcdGJsb2NrX3NlY3RvcnMgPSByb3VuZHVwKDEgXFx1MDAzY1xcdTAwM2MgcmRldi1cXHUwMDNlYmFkYmxvY2tzLnNoaWZ0LCBsYnMpO1xcbiBcXG4gXFx0c2VjdG9yID0gcjEwX2Jpby1cXHUwMDNlc2VjdG9yO1xcbi1cXHRzZWN0b3JzID0gKChyMTBfYmlvLVxcdTAwM2VzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxcbi1cXHRcXHQgICBcXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcXG4tXFx0XFx0LSBzZWN0b3I7XFxuK1xcdGlmIChjb2Fyc2UpXFxuK1xcdFxcdHNlY3RvcnMgPSBzZWN0X3RvX3dyaXRlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHNlY3RvcnMgPSAoKHIxMF9iaW8tXFx1MDAzZXNlY3RvciArIGJsb2NrX3NlY3RvcnMpXFxuK1xcdFxcdFxcdCAgIFxcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxcbitcXHRcXHRcXHQtIHNlY3RvcjtcXG4gXFxuIFxcdHdoaWxlIChzZWN0X3RvX3dyaXRlKSB7XFxuIFxcdFxcdHN0cnVjdCBiaW8gKndiaW87XFxuQEAgLTI4MzEsNiArMjg0Miw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICtcXG4gXFx0XFx0XFx0XFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XFxuK1xcdFxcdC8qIEtlZXAgUDJQRE1BIHJldHJ5IGJpb3MgdW5tZXJnZWFibGUsIGxpa2UgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxcbitcXHRcXHRcXHR3YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuIFxcbiBcXHRcXHRpZiAoc3VibWl0X2Jpb193YWl0KHdiaW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XFxuQEAgLTI4NTMsNiArMjg2Nyw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuIHtcXG4gXFx0aW50IHNsb3QgPSByMTBfYmlvLVxcdTAwM2VyZWFkX3Nsb3Q7XFxuIFxcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFx0Ym9vbCBwMnBkbWFfZXJyb3I7XFxuIFxcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gcjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xcbiBcXG5AQCAtMjg2NSwxNyArMjg4MCwyOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxcbiBcXHQgKiBmcm96ZW4uXFxuIFxcdCAqL1xcbiBcXHRiaW8gPSByMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLmJpbztcXG4rXFx0cDJwZG1hX2Vycm9yID0gbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbyk7XFxuIFxcdGJpb19wdXQoYmlvKTtcXG4gXFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBOVUxMO1xcbiBcXG4gXFx0aWYgKG1kZGV2LVxcdTAwM2VybylcXG4gXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbi1cXHRlbHNlIGlmICghdGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpIHtcXG4rXFx0ZWxzZSBpZiAocDJwZG1hX2Vycm9yKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xcbitcXHRcXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIGZpeCBvbiB0aGUgbWVkaXVtIGFuZCB0aGUgbWVtYmVyXFxuK1xcdFxcdCAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24ndCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcXG4rXFx0XFx0ICogYnVkZ2V0IG9yIGZhaWwgYSBGYWlsRmFzdCBtZW1iZXIsIGp1c3Qga2VlcCB0aGlzIGxlZ1xcbitcXHRcXHQgKiBvdXQgb2YgdGhlIHJldHJ5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xcbiBcXHRcXHRmaXhfcmVhZF9lcnJvcihjb25mLCBtZGRldiwgcjEwX2Jpbyk7XFxuIFxcdFxcdHVuZnJlZXplX2FycmF5KGNvbmYpO1xcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xcbitcXHR9XFxuIFxcbiBcXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTtcXG4gXFx0cjEwX2Jpby1cXHUwMDNlc3RhdGUgPSAwO1xcbkBAIC0yOTQ1LDcgKzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4gXFx0XFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVxcdTAwM2VtZGRldik7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoYmlvICE9IE5VTEwgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9zdGF0dXMpIHtcXG4gXFx0XFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcXG4rXFx0XFx0XFx0XFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKVxcbitcXHRcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHRcXHQgKiBBIFAyUERNQSBtYXBwaW5nIGZhaWx1cmUgZmFpbHNcXG4rXFx0XFx0XFx0XFx0XFx0ICogdGhlIHdob2xlIHJhbmdlIGlkZW50aWNhbGx5LCBzb1xcbitcXHRcXHRcXHRcXHRcXHQgKiBuYXJyb3dpbmcgYmxvY2sgYnkgYmxvY2sgY2Fubm90XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRyYW5zaWVudCBkZXZpY2UgZXJyb3IgYWxzb1xcbitcXHRcXHRcXHRcXHRcXHQgKiBzdXJmYWNlcyBhcyBCTEtfU1RTX1RBUkdFVCwgc29cXG4rXFx0XFx0XFx0XFx0XFx0ICogZG9uJ3QgYXNzdW1lLiAgUmV0cnkgdGhlIHJhbmdlXFxuK1xcdFxcdFxcdFxcdFxcdCAqIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW5cXG4rXFx0XFx0XFx0XFx0XFx0ICogb25lIGdvOyBpZiBpdCBzdWNjZWVkcywgdGhlcmVcXG4rXFx0XFx0XFx0XFx0XFx0ICogd2FzIG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGVcXG4rXFx0XFx0XFx0XFx0XFx0ICogbWVkaXVtLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0bmFycm93X3dyaXRlX2Vycm9yKHIxMF9iaW8sIG0sIHRydWUpO1xcbitcXHRcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XFxuIFxcdFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW87XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li5iODY0MmNkMmZiNzkzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbitcXHRzdHJ1Y3Qgc2dfdGFibGUgc2d0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSArIDEpO1xcbkBAIC0xNDgwLDEyICsxNDgxLDEyIEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuIFxcbiBcXHRyZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xcbiBcXG4tXFx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXFxuLVxcdFxcdFxcdCAgICAgICByZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdGlmICh1bmxpa2VseSgqY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0c2d0LnNnbCA9IHJlcS1cXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsO1xcbitcXHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cXHUwMDNlZGF0YV9zZ2wubmVudHM7XFxuK1xcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbitcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90YWJsZTtcXG4tXFx0fVxcbitcXHQqY291bnQgPSBzZ3QubmVudHM7XFxuIFxcbiBcXHRpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHtcXG4gXFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZXNnX3RhYmxlLnNnbCA9XFxuQEAgLTIwMjYsOCArMjAyNyw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubWFwX3FlO1xcbiBcXG4tXFx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcXG4tXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHF1ZXVlLVxcdTAwM2VwaV9zdXBwb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoYy1cXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxcbkBAIC0yMDM5LDExICsyMDM4LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXG4gXFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XFxuIFxcdGlmICh1bmxpa2VseShlcnIgXFx1MDAzYyAwKSkge1xcbi1cXHRcXHRkZXZfZXJyKHF1ZXVlLVxcdTAwM2VjdHJsLVxcdTAwM2VjdHJsLmRldmljZSxcXG4tXFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXFx1MDAzZWN0cmwtXFx1MDAzZWN0cmwuZGV2aWNlLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkZhaWxlZCB0byBtYXAgZGF0YSAoJWQpXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcXG4rXFxuIFxcdHNxZS1cXHUwMDNlY3FlLmRvbmUgPSBudm1lX3JkbWFfc2VuZF9kb25lO1xcbiBcXG4gXFx0aWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBzcWUtXFx1MDAzZWRtYSxcXG5AQCAtMjA2Myw2ICsyMDY0LDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXHRcXHRyZXQgPSBudm1lX2hvc3RfcGF0aF9lcnJvcihycSk7XFxuIFxcdGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNIHx8IGVyciA9PSAtRUFHQUlOKVxcbiBcXHRcXHRyZXQgPSBCTEtfU1RTX1JFU09VUkNFO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgRE1BIGxheWVyIHJlZnVzZWQgdG8gbWFwIHBlZXIgbWVtb3J5IHRvIHRoaXMgZGV2aWNlOiBhXFxuK1xcdCAqIHByb3BlcnR5IG9mIHRoZSBwYWlyaW5nLCBub3QgYSBwYXRoIGZhaWx1cmUuICBNYXRjaCBudm1lLXBjaVxcbitcXHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXFxuK1xcdCAqL1xcbitcXHRlbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTylcXG4rXFx0XFx0cmV0ID0gQkxLX1NUU19UQVJHRVQ7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcXG4gXFx0bnZtZV9jbGVhbnVwX2NtZChycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjA2LjY2ODMzNTM2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNDE0MTM2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX2RtYV9tYXBfaXRlcl9zdGFydFwiLFxuICAgIFwibWRfc3VibWl0X2Jpb1wiLFxuICAgIFwicmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcInJhaWQxX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwicmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDNiNmM5NTA3N2Q3NGM3YjUyZjgzZGRhYzBiODk2ZmMxZjM5YzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6MDc6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmNcbmluZGV4IGJmZGI5ZWQ3MDc0MTE2Li4yZWVkMDZiZmU3OTE3YiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5AQCAtMTkwLDcgKzE5MCwxNSBAQCBzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xuK1x0XHQvKlxuK1x0XHQgKiBQMlAgdHJhbnNmZXJzIHRoYXQgdGhlIG1hcHBpbmcgbGF5ZXIgY2Fubm90IHN1cHBvcnRcbitcdFx0ICogcmVwb3J0IEJMS19TVFNfVEFSR0VULCBtYXRjaGluZyBkbWFfbWFwX3NndGFibGUoKSdzXG4rXHRcdCAqIC1FUkVNT1RFSU8gYW5kIHRoZSBwcmUtYmxrX3JxX2RtYV9tYXAgbnZtZSBiZWhhdmlvcjpcbitcdFx0ICogdGhlIGZhaWx1cmUgaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGRldmljZSBwYWlyaW5nLCBzb1xuK1x0XHQgKiBpdCBtdXN0IG5vdCBiZSByZXRyaWVkIG9uIGFub3RoZXIgcGF0aCAoYmxrX3BhdGhfZXJyb3IpXG4rXHRcdCAqIG5vciBiZSBtaXN0YWtlbiBmb3IgYW4gaW52YWxpZCByZXF1ZXN0LlxuK1x0XHQgKi9cbitcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjNhZTRmZDRlZjM4MTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCArNDUxLDE4IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBiaW8gY291bGQgYmUgbWVyZ2VhYmxlIGFmdGVyIHBhc3NpbmcgdG8gdW5kZXJsYXllciAqL1xuLVx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbitcdC8qXG4rXHQgKiBBIGJpbyBtZCBzcGxpdCBjb3VsZCBiZSBtZXJnZWFibGUgYWdhaW4gYmVsb3cgbWQsIGJ1dCBmb3IgUDJQRE1BXG4rXHQgKiBiaW9zIFJFUV9OT01FUkdFIGlzIGxvYWQtYmVhcmluZzogdGhlIERNQSBtYXBwaW5nIHR5cGUgb2YgYVxuK1x0ICogcmVxdWVzdCBpcyByZXNvbHZlZCBvbmNlLCBmcm9tIGl0cyBmaXJzdCBzZWdtZW50LCBzbyByZXF1ZXN0c1xuK1x0ICogbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLiBTZXQgdGhlIGZsYWdcbitcdCAqIHJhdGhlciB0aGFuIG1lcmVseSBwcmVzZXJ2ZSBpdCAtLSBiaW9zIGJ1aWx0IHRocm91Z2ggdGhlXG4rXHQgKiBidmVjLWl0ZXIgcGF0aCBhcnJpdmUgd2l0aG91dCBpdC5cbitcdCAqL1xuK1x0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbitcdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbitcdGVsc2VcbitcdFx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbiBcbiBcdG1kX2hhbmRsZV9yZXF1ZXN0KG1kZGV2LCBiaW8pO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGQ4ZGFmMGY3NWNiYmU4Li5iMWFiZmM4OWNmYzA3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtMTEsOCArMTEsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTIyLDYgKzI0LDM1IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2Jsb2NrLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1heFNlY3RvciAofihzZWN0b3JfdCkwKVxuK1xuKy8qXG4rICogQ2hlY2sgaWYgdGhlIGJpbyBjYXJyaWVzIFBDSSBQMlBETUEgKHBlZXIgZGV2aWNlIG1lbW9yeSkgcGFnZXMuIFJlYWRcbisgKiBiaV9pb192ZWMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdXNpbmcgYmlvX2ZpcnN0X2J2ZWNfYWxsKCksIHdoaWNoIFdBUk5zXG4rICogb24gY2xvbmVkIGJpb3M6IG1kIHJvdXRpbmVseSBoYW5kbGVzIHNwbGl0IGNsb25lcywgd2hpY2ggaGF2ZVxuKyAqIGJpX3ZjbnQgPT0gMCBidXQgYSB2YWxpZCBiaV9pb192ZWMgc2hhcmVkIHdpdGggdGhlIHBhcmVudC4gUDJQRE1BIGFuZFxuKyAqIGhvc3QgcGFnZXMgbXVzdCBub3QgYmUgbWl4ZWQgd2l0aGluIG9uZSBiaW8sIHNvIHRoZSBmaXJzdCBidmVjIGlzXG4rICogcmVwcmVzZW50YXRpdmUuIE9ubHkgdmFsaWQgYmVmb3JlIHRoZSBiaW8ncyBpdGVyYXRvciBpcyBjb25zdW1lZDpcbisgKiBiaW9faGFzX2RhdGEoKSBpcyBmYWxzZSBhdCBjb21wbGV0aW9uIHRpbWUuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHJldHVybiBiaW9faGFzX2RhdGEoYmlvKSBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX2lvX3ZlYyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbit9XG4rXG4rLypcbisgKiBUcnVlIHdoZW4gYSBsZWcgYmlvIGZhaWxlZCBiZWNhdXNlIGl0cyBQMlBETUEgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWRcbisgKiB0byB0aGlzIG1lbWJlciAoQkxLX1NUU19UQVJHRVQgZnJvbSBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KCkpLiBVc2FibGUgYXRcbisgKiBjb21wbGV0aW9uIHRpbWUsIHVubGlrZSBtZF9iaW9faXNfcDJwZG1hKCk6IGxlZyBiaW9zIGFyZSBjbG9uZXMgc2hhcmluZ1xuKyAqIHRoZSBtYXN0ZXIgYmlvJ3MgYnZlYyB0YWJsZSwgd2hpY2ggb3V0bGl2ZXMgdGhlIGxlZydzIGVuZF9pbywgYnV0IHRoZWlyXG4rICogaXRlcmF0b3IgaXMgY29uc3VtZWQgYnkgdGhlbiwgc28gYmlvX2hhc19kYXRhKCkgY2Fubm90IGdhdGUgdGhlIGFjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBiaW8gKmJpbylcbit7XG4rXHRyZXR1cm4gYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1RBUkdFVCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX2lvX3ZlYyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbit9XG4rXG4gLypcbiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6XG4gICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5pbmRleCBhZmUyY2E5NmFkOGMyMi4uMjQxYzI5OTRiNmEzZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuQEAgLTQ5MSw3ICs0OTEsOSBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbitcdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAvKiBBIG1hcHBpbmcgZmFpbHVyZSBzYXlzIG5vdGhpbmcgYWJvdXQgZGV2aWNlIGhlYWx0aCAqL1xuK1x0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0bWRfZXJyb3IocjFfYmlvLVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0fVxuIFxuQEAgLTE1NzUsOSArMTU3NywxMiBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0LypcbiBcdFx0ICogVGhlIHdyaXRlLWJlaGluZCBpbyBpcyBvbmx5IGF0dGVtcHRlZCBvbiBkcml2ZXMgbWFya2VkIGFzXG4gXHRcdCAqIHdyaXRlLW1vc3RseSwgd2hpY2ggbWVhbnMgd2UgY291bGQgYWxsb2NhdGUgd3JpdGUgYmVoaW5kXG4tXHRcdCAqIGJpbyBsYXRlci5cbitcdFx0ICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXNcbitcdFx0ICogdGhlIGRhdGEgd2l0aCBiaW9fY29weV9kYXRhKCksIGEgQ1BVIGNvcHkgdGhhdCBjYW5ub3QgYmVcbitcdFx0ICogYXNzdW1lZCBzYWZlIG9yIGZhc3Qgb24gUDJQRE1BIChkZXZpY2UgQkFSKSBwYWdlcy5cbiBcdFx0ICovXG4tXHRcdGlmICghaXNfZGlzY2FyZCBcdTAwMjZcdTAwMjYgcmRldiBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFtZF9iaW9faXNfcDJwZG1hKGJpbykpXG4gXHRcdFx0d3JpdGVfYmVoaW5kID0gdHJ1ZTtcbiBcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbaV0gPSBOVUxMO1xuQEAgLTI1MTQsNyArMjUxOSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuK3N0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGksIGJvb2wgY29hcnNlKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByMV9iaW8tXHUwMDNlbWRkZXY7XG4gXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbkBAIC0yNTI4LDYgKzI1MzMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcyBzb21laG93LlxuIFx0ICpcbitcdCAqIFdpdGggJ2NvYXJzZScsIHJldHJ5IHRoZSB3aG9sZSByYW5nZSBhcyBvbmUgYmlvIGFuZCByZWNvcmRcbitcdCAqIG9uZSBiYWQgcmFuZ2UgaWYgaXQgZmFpbHM6IHVzZWQgd2hlbiBwZXItYmxvY2sgbmFycm93aW5nXG4rXHQgKiBjYW5ub3QgZmluZCBhIGdvb2QgYmxvY2sgKFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGZhaWwgdGhlXG4rXHQgKiB3aG9sZSByYW5nZSBpZGVudGljYWxseSksIHdoaWxlIGEgc2luZ2xlIHJldHJ5IHN0aWxsIHRlbGxzXG4rXHQgKiBhIHNpbmNlLWNsZWFyZWQgdHJhbnNpZW50IGVycm9yIGFwYXJ0LlxuK1x0ICpcbiBcdCAqIFdlIGN1cnJlbnRseSBvd24gYSByZWZlcmVuY2Ugb24gdGhlIHJkZXYuXG4gXHQgKi9cbiBcbkBAIC0yNTQyLDkgKzI1NTMsMTIgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuLVx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbi1cdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbi1cdFx0LSBzZWN0b3I7XG4rXHRpZiAoY29hcnNlKVxuK1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbitcdGVsc2VcbitcdFx0c2VjdG9ycyA9ICgoc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbitcdFx0XHQgICBcdTAwMjYgfihzZWN0b3JfdCkoYmxvY2tfc2VjdG9ycyAtIDEpKVxuK1x0XHRcdC0gc2VjdG9yO1xuIFxuIFx0d2hpbGUgKHNlY3RfdG9fd3JpdGUpIHtcbiBcdFx0c3RydWN0IGJpbyAqd2JpbztcbkBAIC0yNTYyLDYgKzI1NzYsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuIFx0XHR9XG4gXG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuK1x0XHQvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqL1xuK1x0XHRpZiAobWRfYmlvX2lzX3AycGRtYSh3YmlvKSlcbitcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHIxX2Jpby1cdTAwM2VzZWN0b3I7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVx1MDAzZXNlY3RvcnMgXHUwMDNjXHUwMDNjIDk7XG4gXG5AQCAtMjYyMyw3ICsyNjQwLDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiBcdFx0XHQgKiBlcnJvcnMuXG4gXHRcdFx0ICovXG4gXHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XG4rXHRcdFx0aWYgKG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihyMV9iaW8tXHUwMDNlYmlvc1ttXSkpXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogQSBQMlBETUEgbWFwcGluZyBmYWlsdXJlIGZhaWxzIHRoZSB3aG9sZVxuK1x0XHRcdFx0ICogcmFuZ2UgaWRlbnRpY2FsbHksIHNvIG5hcnJvd2luZyBibG9jayBieVxuK1x0XHRcdFx0ICogYmxvY2sgY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIC0tIGJ1dCBhXG4rXHRcdFx0XHQgKiB0cmFuc2llbnQgZGV2aWNlIGVycm9yIGFsc28gc3VyZmFjZXMgYXNcbitcdFx0XHRcdCAqIEJMS19TVFNfVEFSR0VULCBzbyBkb24ndCBhc3N1bWUuICBSZXRyeVxuK1x0XHRcdFx0ICogdGhlIHJhbmdlIG9uY2U6IGlmIGl0IGZhaWxzLCByZWNvcmQgaXQgaW5cbitcdFx0XHRcdCAqIG9uZSBnbzsgaWYgaXQgc3VjY2VlZHMsIHRoZXJlIHdhcyBub3RoaW5nXG4rXHRcdFx0XHQgKiB3cm9uZyB3aXRoIHRoZSBtZWRpdW0uXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIGZhbHNlKTtcbiBcdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuIFx0XHRcdFx0XHQgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdH1cbkBAIC0yNjUwLDYgKzI2ODAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4rXHRib29sIHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2OSw2ICsyNzAwLDE1IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0ICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xuK1x0fSBlbHNlIGlmIChwMnBkbWFfZXJyb3IpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHBlZXIgcGFnZXMgY2Fubm90IGJlIERNQS1tYXBwZWQgdG8gdGhpcyBtZW1iZXI7XG4rXHRcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IG9uIHRoZSBtZWRpdW0gYW5kIHRoZSBtZW1iZXJcbitcdFx0ICogaXMgaGVhbHRoeSBmb3IgaG9zdCBJL086IGRvbid0IGNoYXJnZSB0aGUgcmVhZC1lcnJvclxuK1x0XHQgKiBidWRnZXQgb3IgZmFpbCBhIEZhaWxGYXN0IG1lbWJlciwganVzdCBrZWVwIHRoaXMgbGVnXG4rXHRcdCAqIG91dCBvZiB0aGUgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRyMV9iaW8tXHUwMDNlYmlvc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXSA9IElPX0JMT0NLRUQ7XG4gXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uYjI0NDI5YTE5MjU0ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5AQCAtNDg5LDcgKzQ4OSw5IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuIFx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbitcdFx0XHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgLyogQSBtYXBwaW5nIGZhaWx1cmUgc2F5cyBub3RoaW5nIGFib3V0IGRldmljZSBoZWFsdGggKi9cbitcdFx0XHQgICAgIW1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pKSB7XG4gXHRcdFx0XHRtZF9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbiBcdFx0XHR9XG4gXG5AQCAtMjc4Niw3ICsyNzg4LDcgQEAgc3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxuK3N0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSwgYm9vbCBjb2Fyc2UpXG4ge1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjEwX2Jpby1cdTAwM2VtYXN0ZXJfYmlvO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHIxMF9iaW8tXHUwMDNlbWRkZXY7XG5AQCAtMjgwMCw2ICsyODAyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdCAqIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIGJpbyBkb2Vzbid0IGV4YWN0bHkgYWxpZ24gd2l0aFxuIFx0ICogYmxvY2tzLiAgV2UgbXVzdCBoYW5kbGUgdGhpcy5cbiBcdCAqXG4rXHQgKiBXaXRoICdjb2Fyc2UnLCByZXRyeSB0aGUgd2hvbGUgcmFuZ2UgYXMgb25lIGJpbyBhbmQgcmVjb3JkXG4rXHQgKiBvbmUgYmFkIHJhbmdlIGlmIGl0IGZhaWxzOiB1c2VkIHdoZW4gcGVyLWJsb2NrIG5hcnJvd2luZ1xuK1x0ICogY2Fubm90IGZpbmQgYSBnb29kIGJsb2NrIChQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBmYWlsIHRoZVxuK1x0ICogd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHkpLCB3aGlsZSBhIHNpbmdsZSByZXRyeSBzdGlsbCB0ZWxsc1xuK1x0ICogYSBzaW5jZS1jbGVhcmVkIHRyYW5zaWVudCBlcnJvciBhcGFydC5cbitcdCAqXG4gXHQgKiBXZSBjdXJyZW50bHkgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZGV2LlxuIFx0ICovXG4gXG5AQCAtMjgxNCw5ICsyODIyLDEyIEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0YmxvY2tfc2VjdG9ycyA9IHJvdW5kdXAoMSBcdTAwM2NcdTAwM2MgcmRldi1cdTAwM2ViYWRibG9ja3Muc2hpZnQsIGxicyk7XG4gXG4gXHRzZWN0b3IgPSByMTBfYmlvLVx1MDAzZXNlY3Rvcjtcbi1cdHNlY3RvcnMgPSAoKHIxMF9iaW8tXHUwMDNlc2VjdG9yICsgYmxvY2tfc2VjdG9ycylcbi1cdFx0ICAgXHUwMDI2IH4oc2VjdG9yX3QpKGJsb2NrX3NlY3RvcnMgLSAxKSlcbi1cdFx0LSBzZWN0b3I7XG4rXHRpZiAoY29hcnNlKVxuK1x0XHRzZWN0b3JzID0gc2VjdF90b193cml0ZTtcbitcdGVsc2VcbitcdFx0c2VjdG9ycyA9ICgocjEwX2Jpby1cdTAwM2VzZWN0b3IgKyBibG9ja19zZWN0b3JzKVxuK1x0XHRcdCAgIFx1MDAyNiB+KHNlY3Rvcl90KShibG9ja19zZWN0b3JzIC0gMSkpXG4rXHRcdFx0LSBzZWN0b3I7XG4gXG4gXHR3aGlsZSAoc2VjdF90b193cml0ZSkge1xuIFx0XHRzdHJ1Y3QgYmlvICp3YmlvO1xuQEAgLTI4MzEsNiArMjg0Miw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xuIFx0XHRcdFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXG4gXHRcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XG5AQCAtMjg1Myw2ICsyODY3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3I7XG4gXHRzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xuIFxuQEAgLTI4NjUsMTcgKzI4ODAsMjggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdCAqIGZyb3plbi5cbiBcdCAqL1xuIFx0YmlvID0gcjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbztcbitcdHAycGRtYV9lcnJvciA9IG1kX2Jpb19wMnBkbWFfbWFwcGluZ19lcnJvcihiaW8pO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4gXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuLVx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuK1x0ZWxzZSBpZiAocDJwZG1hX2Vycm9yKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBwZWVyIHBhZ2VzIGNhbm5vdCBiZSBETUEtbWFwcGVkIHRvIHRoaXMgbWVtYmVyO1xuK1x0XHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIGZpeCBvbiB0aGUgbWVkaXVtIGFuZCB0aGUgbWVtYmVyXG4rXHRcdCAqIGlzIGhlYWx0aHkgZm9yIGhvc3QgSS9POiBkb24ndCBjaGFyZ2UgdGhlIHJlYWQtZXJyb3JcbitcdFx0ICogYnVkZ2V0IG9yIGZhaWwgYSBGYWlsRmFzdCBtZW1iZXIsIGp1c3Qga2VlcCB0aGlzIGxlZ1xuK1x0XHQgKiBvdXQgb2YgdGhlIHJldHJ5LlxuK1x0XHQgKi9cbitcdFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7XG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4rXHR9IGVsc2Uge1xuIFx0XHRmcmVlemVfYXJyYXkoY29uZiwgMSk7XG4gXHRcdGZpeF9yZWFkX2Vycm9yKGNvbmYsIG1kZGV2LCByMTBfYmlvKTtcbiBcdFx0dW5mcmVlemVfYXJyYXkoY29uZik7XG4tXHR9IGVsc2Vcbi1cdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuK1x0fVxuIFxuIFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7XG4gXHRyMTBfYmlvLVx1MDAzZXN0YXRlID0gMDtcbkBAIC0yOTQ1LDcgKzI5NzEsMjMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fSBlbHNlIGlmIChiaW8gIT0gTlVMTCBcdTAwMjZcdTAwMjYgYmlvLVx1MDAzZWJpX3N0YXR1cykge1xuIFx0XHRcdFx0ZmFpbCA9IHRydWU7XG4tXHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4rXHRcdFx0XHRpZiAobWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yKGJpbykpXG4rXHRcdFx0XHRcdC8qXG4rXHRcdFx0XHRcdCAqIEEgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZSBmYWlsc1xuK1x0XHRcdFx0XHQgKiB0aGUgd2hvbGUgcmFuZ2UgaWRlbnRpY2FsbHksIHNvXG4rXHRcdFx0XHRcdCAqIG5hcnJvd2luZyBibG9jayBieSBibG9jayBjYW5ub3RcbitcdFx0XHRcdFx0ICogZmluZCBhIGdvb2QgYmxvY2sgLS0gYnV0IGFcbitcdFx0XHRcdFx0ICogdHJhbnNpZW50IGRldmljZSBlcnJvciBhbHNvXG4rXHRcdFx0XHRcdCAqIHN1cmZhY2VzIGFzIEJMS19TVFNfVEFSR0VULCBzb1xuK1x0XHRcdFx0XHQgKiBkb24ndCBhc3N1bWUuICBSZXRyeSB0aGUgcmFuZ2VcbitcdFx0XHRcdFx0ICogb25jZTogaWYgaXQgZmFpbHMsIHJlY29yZCBpdCBpblxuK1x0XHRcdFx0XHQgKiBvbmUgZ287IGlmIGl0IHN1Y2NlZWRzLCB0aGVyZVxuK1x0XHRcdFx0XHQgKiB3YXMgbm90aGluZyB3cm9uZyB3aXRoIHRoZVxuK1x0XHRcdFx0XHQgKiBtZWRpdW0uXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSwgdHJ1ZSk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtLCBmYWxzZSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uYjg2NDJjZDJmYjc5M2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiArMTQ2OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXHRcdGludCAqY291bnQsIGludCAqcGlfY291bnQpXG4ge1xuIFx0c3RydWN0IG52bWVfcmRtYV9yZXF1ZXN0ICpyZXEgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbitcdHN0cnVjdCBzZ190YWJsZSBzZ3Q7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikocmVxICsgMSk7XG5AQCAtMTQ4MCwxMiArMTQ4MSwxMiBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0cmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCk7XG4gXG4tXHQqY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2LCByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsLFxuLVx0XHRcdCAgICAgICByZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMsIHJxX2RtYV9kaXIocnEpKTtcbi1cdGlmICh1bmxpa2VseSgqY291bnQgXHUwMDNjPSAwKSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuK1x0c2d0LnNnbCA9IHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2w7XG4rXHRzZ3Qub3JpZ19uZW50cyA9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cztcbitcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG4rXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfZnJlZV90YWJsZTtcbi1cdH1cbitcdCpjb3VudCA9IHNndC5uZW50cztcbiBcbiBcdGlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkge1xuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCA9XG5AQCAtMjAyNiw4ICsyMDI3LDYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubWFwX3FlO1xuIFxuLVx0bnZtZV9zdGFydF9yZXF1ZXN0KHJxKTtcbi1cbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgcXVldWUtXHUwMDNlcGlfc3VwcG9ydCBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYy1cdTAwM2Vjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8XG5AQCAtMjAzOSwxMSArMjAzOCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcbiBcdGVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpO1xuIFx0aWYgKHVubGlrZWx5KGVyciBcdTAwM2MgMCkpIHtcbi1cdFx0ZGV2X2VycihxdWV1ZS1cdTAwM2VjdHJsLVx1MDAzZWN0cmwuZGV2aWNlLFxuLVx0XHRcdCAgICAgXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwiLCBlcnIpO1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4rXHRcdFx0XHQgICAgXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwiLCBlcnIpO1xuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbitcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4rXG4gXHRzcWUtXHUwMDNlY3FlLmRvbmUgPSBudm1lX3JkbWFfc2VuZF9kb25lO1xuIFxuIFx0aWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBzcWUtXHUwMDNlZG1hLFxuQEAgLTIwNjMsNiArMjA2NCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xuIFx0ZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pXG4gXHRcdHJldCA9IEJMS19TVFNfUkVTT1VSQ0U7XG4rXHQvKlxuK1x0ICogVGhlIERNQSBsYXllciByZWZ1c2VkIHRvIG1hcCBwZWVyIG1lbW9yeSB0byB0aGlzIGRldmljZTogYVxuK1x0ICogcHJvcGVydHkgb2YgdGhlIHBhaXJpbmcsIG5vdCBhIHBhdGggZmFpbHVyZS4gIE1hdGNoIG52bWUtcGNpXG4rXHQgKiBhbmQgZG8gbm90IHJldHJ5IChzZWUgYmxrX3BhdGhfZXJyb3IoKSkuXG4rXHQgKi9cbitcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxuK1x0XHRyZXQgPSBCTEtfU1RTX1RBUkdFVDtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MDYuNjY4MzM3NjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNDIxNDIxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFAyUERNQSBIYW5kbGluZyBpbiBCbG9jayBMYXllciwgTUQgUkFJRCwgYW5kIE5WTWUgUkRNQSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lIGludGVyZXN0aW5nIGFyZWFzLCBhbmQgbXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0aW5nbGluZy4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIFAyUERNQSAoUGVlci10by1QZWVyIERNQSkgcmVxdWVzdCBoYW5kbGluZywgYW5kIGl0IHRvdWNoZXMgY29yZSBjb21wb25lbnRzIOKAkyB0aGUgYmxvY2sgbGF5ZXIsIE1EIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcsIG5vIGRvdWJ0LiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIG91dCwgbW9kaWZ5aW5nOiBgYmxvY2svYmxrLW1xLWRtYS5jYCwgYGRyaXZlcnMvbWQvbWQuY2AsIGBkcml2ZXJzL21kL21kLmhgLCBgZHJpdmVycy9tZC9yYWlkMS5jYCwgYGRyaXZlcnMvbWQvcmFpZDEwLmNgLCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY2AuXG5cbkVzc2VudGlhbGx5LCBpdCdzIGFib3V0IHJlZmluaW5nIGhvdyBtYXBwaW5nIGVycm9ycyBmb3IgUDJQRE1BIGFyZSBkZWFsdCB3aXRoIGFjcm9zcyB0aGVzZSBkaWZmZXJlbnQgc3Vic3lzdGVtcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBhbmQgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMgdG8gYWNjb3VudCBmb3IgdGhlc2UgcG90ZW50aWFsIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1kX2Jpb19pc19wMnBkbWFgIGFuZCBgbWRfYmlvX3AycGRtYV9tYXBwaW5nX2Vycm9yYCBpbiBgZHJpdmVycy9tZC9tZC5oYCwgYXMgd2VsbCBhcyBtb2RpZmljYXRpb25zIHRvIGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdGAsIGFuZCBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBuYXJyb3dfd3JpdGVfZXJyb3JgIGZvciBib3RoIFJBSUQxIGFuZCBSQUlEMTAuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggdHJpZXMgdG8gcHJldmVudCBkZXZpY2UgZmFpbHVyZXMgdXBvbiBQMlBETUEgbWFwcGluZyBlcnJvcnMsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBkZXNpZ24gZ29hbC4gVGhpcyBhbGwgcG9pbnRzIHRvIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZmFpbHVyZSBtb2RlcyBhbmQgZWRnZSBjYXNlcywgd2hpY2ggaXMgd2hhdCBtYWtlcyBmdXp6aW5nIHNvIHZhbHVhYmxlIGhlcmUuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkndmUgbmFycm93ZWQgZG93biB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgSSdkIHdhbnQgdG8gZm9jdXMgb246IGBtZF9zdWJtaXRfYmlvYCwgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCwgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGBoYW5kbGVfcmVhZF9lcnJvcmAsIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAsIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYC5cblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gRm9yIE1ELCBpdCBsb29rcyBsaWtlIGBNRF9SQUlEMWAgYW5kIGBNRF9SQUlEMTBgIGFyZSBlc3NlbnRpYWwuIEZvciBOVk1lIFJETUEsIGl0J3MgYE5WTUVfUkRNQWAuIEFuZCwgb2YgY291cnNlLCBmb3IgUDJQRE1BLCBgUENJX1AyUERNQWAgaXMgY3JpdGljYWwuIFRoZXNlIG5lZWQgdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBJIGdvIHRvbyBmYXIuIFdpdGggdGhlc2UgY2hlY2tzIGluIHBsYWNlLCBJIGNhbiBnZXQgZG93biB0byBnZW5lcmF0aW5nIHNvbWUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjE2LjkxMDQ4MzY1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTY5MTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURfUkFJRDFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz0xMDQ9Y29uZmlnIE1EX1JBSUQwXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlJBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzoxNi45OTYxODA4NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkwMzAwOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRE1BIEFjY2VsZXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGVmZmVjdGl2ZWx5IGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgdHdvIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBOVk1FX1JETUFgIGFuZCBgUENJX1AyUERNQWAuXG5cbmBOVk1FX1JETUFgIGlzIHRoZSBvYnZpb3VzIGZpcnN0IHBsYWNlIHRvIHN0YXJ0LiBJZiB0aGUgc3RvcmFnZSBkZXZpY2Ugc3VwcG9ydHMgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzLCBhbmQgd2UgY2FuIGNvbmZpZ3VyZSBvdXIgc3lzdGVtIHRvIHV0aWxpemUgaXQsIHRoYXQgY291bGQgYnlwYXNzIGEgbG90IG9mIHRoZSB0cmFkaXRpb25hbCBkYXRhIHRyYW5zZmVyIG92ZXJoZWFkLiBJIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIE5WTWUgY29udHJvbGxlcidzIGNhcGFiaWxpdGllcyBhbmQgdGhlIFJETUEgaW1wbGVtZW50YXRpb24gb24gdGhpcyBwbGF0Zm9ybS4gV2hhdCBhcmUgdGhlIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnMgaW4gdGVybXMgb2YgbWVtb3J5IHJlZ2lzdHJhdGlvbiBhbmQgYWRkcmVzc2luZz9cblxuVGhlbiwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnNpZGVyIGBQQ0lfUDJQRE1BYC4gUG9pbnQtdG8tcG9pbnQgRE1BIG9uIHRoZSBQQ0llIGJ1cyAqY291bGQqIG9mZmVyIGEgZmFzdCBwYXRoIGZvciBkYXRhIHRyYW5zZmVyLCBhc3N1bWluZyB0aGUgZGV2aWNlcyBhcmUgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIHNhbWUgSS9PIGRvbWFpbi4gVGhpcyBpcyBnb2luZyB0byBkZXBlbmQgaGVhdmlseSBvbiB0aGUgc3lzdGVtJ3MgdG9wb2xvZ3kgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFBDSWUgcm9vdCBjb21wbGV4ZXMgYW5kIHN3aXRjaGVzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBwb3RlbnRpYWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZlYXNpYmlsaXR5LiBXaGF0IGtpbmQgb2YgYmFuZHdpZHRoIGNhbiB3ZSBhY3R1YWxseSBleHBlY3Q/IERvZXMgdGhlIHN5c3RlbSBoYXJkd2FyZSBzdXBwb3J0IHBlZXItdG8tcGVlciB0cmFuc2ZlcnMsIGFuZCBhcmUgdGhlcmUgYW55IHJlcXVpcmVkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjAuODg2NDgzNDc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI1MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfUkRNQVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBSRE1BIGhvc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzoyMS4wMDM3Mzg5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODUwNzM1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipQQ0lfUDJQRE1BIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkZWx2ZSBpbnRvIHRoaXMgUENJX1AyUERNQSBzaXR1YXRpb24uIE5vIG5lZWQgZm9yIGZsdWZmLCBJJ20gZ29pbmcgc3RyYWlnaHQgaW4sIGFzc3VtaW5nIGV2ZXJ5b25lIGtub3dzIHRoZSBiYXNpY3MuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVja1wiIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdHVzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuIFdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IFRoZSByZWdpc3RlcnMsIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXJlIHRoaXMgbW9kdWxlIHNpdHMgd2l0aGluIGl0LCB0aGUgY3VycmVudCBzdGF0ZSBvZiBpdCwgYW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBhcmlzaW5nLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgYSBtZXRob2RpY2FsIGFwcHJvYWNoLiBUaW1lIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjQuMDg4ODE0MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNzY3MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvS2NvbmZpZz0xOTc9Y29uZmlnIFBDSUVfVFBIXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwNjpjb25maWcgUENJX1AyUERNQVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MjQuMjAyNTg1MDcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzOTkwMzI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgb2YgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIERNQSBNYXBwaW5nIEl0ZXJhdGlvbiBTdGFydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQgaXMgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCB3aGVyZSBpcyB0aGlzIGRlZmluZWQ/IElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gTXkga25vd2xlZGdlIGlzIHRoYXQgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgIGlzIGxpa2VseSBpbiBgYmxrLW1xLWRtYS5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5OyBteSBtZW1vcnkgY291bGQgYmUgb2ZmLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBsb2NhdGlvbiBhbmQgdGhlbiBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5OTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzozMC41NDI0OTIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTYxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLW1xLWRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS1kbWEuYz0xNDA9c3RhdGljIGlubGluZSB2b2lkIGJsa19ycV9tYXBfaXRlcl9pbml0KHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0xNjMtXFxuYmxvY2svYmxrLW1xLWRtYS5jOjE2NDpzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuYmxvY2svYmxrLW1xLWRtYS5jLTE2NS1cXHRcXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmxrLW1xLWRtYS5jPTIzND1ib29sIGJsa19ycV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzctXFx0YmxrX3JxX21hcF9pdGVyX2luaXQocmVxLCBcXHUwMDI2aXRlci1cXHUwMDNlaXRlcik7XFxuYmxvY2svYmxrLW1xLWRtYS5jOjIzODpcXHRyZXR1cm4gYmxrX2RtYV9tYXBfaXRlcl9zdGFydChyZXEsIGRtYV9kZXYsIHN0YXRlLCBpdGVyLFxcbmJsb2NrL2Jsay1tcS1kbWEuYy0yMzktXFx0XFx0XFx0XFx0ICAgICAgYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSk7XFxuLS1cXG5ibG9jay9ibGstbXEtZG1hLmM9MzQ5PWJvb2wgYmxrX3JxX2ludGVncml0eV9kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS1kbWEuYy0zNjItXFx0fTtcXG5ibG9jay9ibGstbXEtZG1hLmM6MzYzOlxcdHJldHVybiBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHJlcSwgZG1hX2Rldiwgc3RhdGUsIGl0ZXIsIGxlbik7XFxuYmxvY2svYmxrLW1xLWRtYS5jLTM2NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjMwLjY5MDY1ODM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNzg2MTQzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIFJvYWRtYXAgZm9yIFJBSUQgYW5kIE5WTWUgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZSwgbXkgbWluZCdzIGJlZW4gY2h1cm5pbmcgdGhyb3VnaCBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBibG9jayBsYXllciBhbmQgc3RvcmFnZSBkcml2ZXJzLiBJJ20gZm9jdXNpbmcgb24gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGRyaXZlcnMsIGVzcGVjaWFsbHkgdGhvc2UgaGFuZGxpbmcgUkFJRCBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBOVk1lIChOb24tVm9sYXRpbGUgTWVtb3J5IEV4cHJlc3MpIG92ZXIgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSBzdWJzeXN0ZW0uXG5cbkZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudHJ5IHBvaW50LCB0aGUgYG1kX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBndW4gZm9yIGJsb2NrIEkvTyBvcGVyYXRpb25zIGluIHRoZSBNRCBsYXllci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBkYXRhIGZsb3dpbmcgdGhyb3VnaCB0aGUgUkFJRCBhbGdvcml0aG1zLlxuXG5UaGVuLCBJJ20gemVyb2luZyBpbiBvbiBSQUlEMSwgd2hpY2ggaXMgbWlycm9yaW5nLiBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgd3JpdGUgcGF0aDogYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGlzIGhvdyB0aGUgd3JpdGUgaXMgaW5pdGlhdGVkLCBhbmQgYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCBpcyBjYWxsZWQgd2hlbiBpdCBjb21wbGV0ZXMuIEl0IGFsc28gaGFzIGVycm9yIGhhbmRsZXJzOyBJJ20gcGljdHVyaW5nIGhvdyBgbmFycm93X3dyaXRlX2Vycm9yYCwgYW5kIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIHdvdWxkIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkgaW4gZXJyb3IgcmVjb3ZlcnkgYW5kIGNvbXBsZXRpb24gc2lnbmFsaW5nIGZvciB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgUkFJRDEgc2V0dXAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgYGhhbmRsZV9yZWFkX2Vycm9yYCBkZWFscyB3aXRoIHJlYWQgZmFpbHVyZXMgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMgb24gUkFJRDEuXG5cbkV4cGFuZGluZyBpbnRvIFJBSUQxMCwgSSdtIGNvbnNpZGVyaW5nIGByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAuIEhvdyBkbyB0aGVzZSBkaWZmZXIgZnJvbSBSQUlEMSBpbiB0aGVpciBoYW5kbGluZyBvZiB3cml0ZSBjb21wbGV0aW9ucyBhbmQgdGhlIGVuZC10by1lbmQgd3JpdGUgbGlmZWN5Y2xlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzdHJpcGluZyBhbmQgbWlycm9yaW5nIGNvbWJpbmF0aW9uPyBJJ20gdHJ5aW5nIHRvIHNlZSBpZiBJIGNhbiB1bmlmeSB0aGUgaGFuZGxpbmcgb3IgZmluZCBhIHNwZWNpZmljIHJhdGlvbmFsZSBmb3IgdGhlaXIgc2VwYXJhdGUgZXhpc3RlbmNlLlxuXG5Ob3csIG15IHRob3VnaHRzIGFyZSBzd2l0Y2hpbmcgZ2VhcnMgdG8gTlZNZSBvdmVyIFJETUEuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgcmVtb3RlIE5WTWUgZGV2aWNlLCBhbmQgaG93IHRoZXNlIHdyaXRlIG9wZXJhdGlvbnMgYXJlIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJ20gZm9jdXNpbmcgb24gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIHdoaWNoIHdpbGwgaGFuZGxlIERNQSBtYXBwaW5nLCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAsIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSBxdWV1aW5nIG9mIHRoZSByZXF1ZXN0LlxuXG5GaW5hbGx5LCBJJ20gbW9tZW50YXJpbHkgaW50ZXJydXB0aW5nIG15c2VsZi4gSnVzdCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGp1c3QgYSBxdWljayBkZXRhaWwsIGJ1dCBpdCBjb3VsZCBpbXBhY3QgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6MDc6MzcuOTY5Mjc3MTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwNTIyNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvcmFpZDEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL3JhaWQxLmM9MjQzNz1zdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIxLVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNTIyOnN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGksIGJvb2wgY29hcnNlKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTIzLXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNjI1PXN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjUzLVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjU0OlxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0sIHRydWUpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU1LVxcdFxcdFxcdGVsc2VcXG5kcml2ZXJzL21kL3JhaWQxLmM6MjY1NjpcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtLCBmYWxzZSk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2NTctXFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhjb25mLVxcdTAwM2VtaXJyb3JzW21dLnJkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjA3OjM4LjA5MDMzODM2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY5MDkyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBQMlBETUEgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gUDJQRE1BLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWFsbXMgb2YgTUQgUkFJRCAoUkFJRDEgYW5kIFJBSUQxMCwgaXQgc2VlbXMpIGFuZCBOVk1lIFJETUEuIEl0J3MgZnVuY3Rpb25hbCwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGludGVuZGVkIGNoYW5nZSBpcyBpbXBsZW1lbnRlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgaWYgdGhlIGBQQ0lfUDJQRE1BYCBjb25maWcgb3B0aW9uIGlzIHN1ZmZpY2llbnQuIEl0IGlzOyBpdCdzIGEgc2ltcGxlIGJvb2xlYW4uIE5vIG5lZWQgdG8gbXVkZHkgdGhlIHdhdGVycyB3aXRoIGBQQ0lfUDJQRE1BX1RFU1RgIG9yIGFueXRoaW5nIG1vcmUgY29tcGxleC5cblxuTm93LCBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gcHJvdmlkZSBhcyB0YXJnZXRlZCBhIHJldmlldyBhcyBwb3NzaWJsZS4gVGhlIG9yaWdpbmFsIGxpc3QgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbnRyeSBwb2ludHMsIGBtZF9zdWJtaXRfYmlvYCBmb3IgTUQgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGZvciBOVk1lIFJETUEsIGFyZSBjcnVjaWFsIHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyB0aGVyZS4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBhcmUga2V5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIFJBSUQgaW1wbGVtZW50YXRpb25zLiBUaGUgY2hhbmdlIGlzIHByZWNpc2VseSB3aXRoaW4gdGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMuXG5cblRoZSBpbmNsdXNpb24gb2YgYGJsa19kbWFfbWFwX2l0ZXJfc3RhcnRgLCBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCwgYGhhbmRsZV9yZWFkX2Vycm9yYCwgYHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdGAsIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCwgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAsIGFuZCBgbmFycm93X3dyaXRlX2Vycm9yYCByb3VuZHMgb3V0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFuZCBjbGFyaWZpZXMgdGhlIGZvY3VzIG9uIGVycm9yLXJlbGF0ZWQgZmxvd3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzI2LCJPdXRwdXRUb2tlbnMiOjI1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzowNzo0Ni44NTk0MzUzMjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzMDk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19kbWFfbWFwX2l0ZXJfc3RhcnRcIixcbiAgICBcIm1kX3N1Ym1pdF9iaW9cIixcbiAgICBcInJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJyYWlkMV93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcInJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIChQZWVyLXRvLVBlZXIgRE1BKSByZXF1ZXN0cyBhbmQgbWFwcGluZyBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEMS9SQUlEMTAsIGFuZCBOVk1lIFJETUEuIEl0IGNoYW5nZXMgaG93IG1hcHBpbmcgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLCBlbnN1cmluZyB0aGV5IGFyZSBub3QgbWlzdGFrZW4gZm9yIGRldmljZSBoZWFsdGggaXNzdWVzIG9yIGludmFsaWQgcmVxdWVzdHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX2RtYV9tYXBfaXRlcl9zdGFydFwiLFxuICAgIFwibWRfc3VibWl0X2Jpb1wiLFxuICAgIFwicmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcInJhaWQxX3dyaXRlX3JlcXVlc3RcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwicmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0XCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBQMlBETUEgKFBlZXItdG8tUGVlciBETUEpIHJlcXVlc3RzIGFuZCBtYXBwaW5nIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQxL1JBSUQxMCwgYW5kIE5WTWUgUkRNQS4gSXQgY2hhbmdlcyBob3cgbWFwcGluZyBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQsIGVuc3VyaW5nIHRoZXkgYXJlIG5vdCBtaXN0YWtlbiBmb3IgZGV2aWNlIGhlYWx0aCBpc3N1ZXMgb3IgaW52YWxpZCByZXF1ZXN0cy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbmkr6[1] Phase: Succeeded StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 17:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 17:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2] Phase: Succeeded StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 17:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 17:07:58 +0000 UTC FinishedAt: 2026-07-18 17:08:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowbmkr6/series-workflowbmkr6-convert-artifact-1923886589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 17:08:19 +0000 UTC FinishedAt: 2026-07-18 17:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 17:08:19 +0000 UTC FinishedAt: 2026-07-18 17:44:49 +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:*d83ac724-5ee0-4e35-b0d6-e1ff4f1a26b2,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-workflowbmkr6/series-workflowbmkr6-convert-artifact-1923886589/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": "49b26be1-a847-4580-acca-a22ceb6d86eb", "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-workflowbmkr6/series-workflowbmkr6-build-action-2645628723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 17:08:19 +0000 UTC FinishedAt: 2026-07-18 17:44: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:*d83ac724-5ee0-4e35-b0d6-e1ff4f1a26b2,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-workflowbmkr6/series-workflowbmkr6-convert-artifact-1923886589/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": "49b26be1-a847-4580-acca-a22ceb6d86eb", "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-workflowbmkr6/series-workflowbmkr6-build-action-2645628723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 17:44:49 +0000 UTC FinishedAt: 2026-07-18 17:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 17:44:49 +0000 UTC FinishedAt: 2026-07-18 17:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 17:44:49 +0000 UTC FinishedAt: 2026-07-18 17:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 17:44:49 +0000 UTC FinishedAt: 2026-07-18 17:44:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowbmkr6/series-workflowbmkr6-convert-artifact-2871062616/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 17:45:10 +0000 UTC FinishedAt: 2026-07-18 17:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 17:45:10 +0000 UTC FinishedAt: 2026-07-18 17:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b26be1-a847-4580-acca-a22ceb6d86eb,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-workflowbmkr6/series-workflowbmkr6-build-action-2645628723/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-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 17:47:02 +0000 UTC FinishedAt: 2026-07-18 17:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 17:47:02 +0000 UTC FinishedAt: 2026-07-18 17:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 17:47:02 +0000 UTC FinishedAt: 2026-07-18 18:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 17:47:02 +0000 UTC FinishedAt: 2026-07-18 18:44:15 +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:*d83ac724-5ee0-4e35-b0d6-e1ff4f1a26b2,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-workflowbmkr6/series-workflowbmkr6-convert-artifact-2871062616/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": "2398cfaa-1830-4f7d-ba65-2d70c542fe2c", "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-workflowbmkr6/series-workflowbmkr6-build-action-332175812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 17:47:02 +0000 UTC FinishedAt: 2026-07-18 18:44:05 +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:*d83ac724-5ee0-4e35-b0d6-e1ff4f1a26b2,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-workflowbmkr6/series-workflowbmkr6-convert-artifact-2871062616/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": "2398cfaa-1830-4f7d-ba65-2d70c542fe2c", "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-workflowbmkr6/series-workflowbmkr6-build-action-332175812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 18:44:15 +0000 UTC FinishedAt: 2026-07-18 18:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 18:44:15 +0000 UTC FinishedAt: 2026-07-18 18:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 18:44:15 +0000 UTC FinishedAt: 2026-07-18 18:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 18:44:15 +0000 UTC FinishedAt: 2026-07-18 18:47:01 +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:*2398cfaa-1830-4f7d-ba65-2d70c542fe2c,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-workflowbmkr6/series-workflowbmkr6-build-action-332175812/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-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"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:*49b26be1-a847-4580-acca-a22ceb6d86eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2398cfaa-1830-4f7d-ba65-2d70c542fe2c,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-workflowbmkr6/series-workflowbmkr6-build-action-2645628723/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-workflowbmkr6/series-workflowbmkr6-build-action-332175812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 18:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 18:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"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-workflowbmkr6/series-workflowbmkr6-convert-artifact-1280434737/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 18:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 18:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 18:47:11 +0000 UTC FinishedAt: 2026-07-18 18:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 18:47:21 +0000 UTC FinishedAt: 2026-07-18 21:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_dma_map_iter_start","md_submit_bio","raid1_end_write_request","raid1_write_request","narrow_write_error","handle_write_finished","handle_read_error","raid10_end_write_request","handle_write_completed","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA"],"series_id":"2b92b30c-7da4-4d0e-9f77-58210d51f51c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 18:47:21 +0000 UTC FinishedAt: 2026-07-18 21:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b26be1-a847-4580-acca-a22ceb6d86eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2398cfaa-1830-4f7d-ba65-2d70c542fe2c,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-workflowbmkr6/series-workflowbmkr6-build-action-2645628723/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-workflowbmkr6/series-workflowbmkr6-build-action-332175812/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-workflowbmkr6/series-workflowbmkr6-convert-artifact-1280434737/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,}