Name: series-workflowzk6j9 Phase: Succeeded StartedAt: 2026-08-18 14:21:07 +0000 UTC FinishedAt: 2026-08-18 18:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[0] Phase: Succeeded StartedAt: 2026-08-18 14:21:07 +0000 UTC FinishedAt: 2026-08-18 14:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 14:21:07 +0000 UTC FinishedAt: 2026-08-18 14:56:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f1a8846e06388113dfdbb89dee005083fa9afdf9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_MULTIPATH", "NVME_TARGET_LOOP", "NVME_TARGET", "BLK_DEV_NVME" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f1a8846e06388113dfdbb89dee005083fa9afdf9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_MULTIPATH", "NVME_TARGET_LOOP", "NVME_TARGET", "BLK_DEV_NVME" ], "series_id": "a2036541-68a8-4ea4-95be-728a792efb7d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "device_add_disk", "bdev_disk_changed", "disk_scan_partitions", "blkdev_ioctl", "nvme_failover_req" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MDYsMTUgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xuIFxuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuLVx0XHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuLVx0XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFx1MDAyNlx1MDAyNiBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSlcbi1cdFx0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuJiM0MztcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuJiM0MztcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4gXG4tXHRcdGJkZXZfYWRkKGRpc2stXHUwMDNlcGFydDAsIGRkZXYtXHUwMDNlZGV2dCk7XG4tXHRcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG4tXHRcdFx0ZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7XG4mIzQzO1x0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbiYjNDM7XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuJiM0MztcdFx0ZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7XG4gXG4mIzQzO1x0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcbiBcdFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxuQEAgLTQ5MSw4ICYjNDM7NDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRkZXZfc2V0X25hbWUoZGRldiwgXCYjMzQ7JXNcJiMzNDssIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbiBcdGlmIChmd25vZGUpXG4gXHRcdGRldmljZV9zZXRfbm9kZShkZGV2LCBmd25vZGUpO1xuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbi1cdFx0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4mIzQzO1x0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4gXHRyZXQgPSBkZXZpY2VfYWRkKGRkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9leHRfbWlub3I7XG5AQCAtMTM2OCw3ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2Z3AtXHUwMDNlcGFydF90YmwsIGlkeCwgaGQpIHtcbi1cdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXG4mIzQzO1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTE1Miw3ICYjNDM7MTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcbiBcbiBcdH1cbiBcdGlmIChyZXMgXHUwMDNlIDApIHtcbi1cdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslc1wmIzM0Oywgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4mIzQzO1x0XHRpZiAoIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbiYjNDM7XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslc1wmIzM0Oywgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4gXG4gXHRcdGtmcmVlKHN0YXRlLVx1MDAzZXBwX2J1Zi5idWZmZXIpO1xuIFx0XHRyZXR1cm4gc3RhdGU7XG5AQCAtMTY0LDcgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFx0ICovXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXMgPSBlcnI7XG4tXHRpZiAocmVzKSB7XG4mIzQzO1x0aWYgKHJlcyBcdTAwMjZcdTAwMjYgIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLFxuIFx0XHRcdCAgICAgXCYjMzQ7IHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZVxcblwmIzM0Oyk7XG4gXHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7JXNcJiMzNDssIHNlcV9idWZfc3RyKFx1MDAyNnN0YXRlLVx1MDAzZXBwX2J1ZikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uZWQyMWY0ZWYzNmM5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtMTgwOCwxMCAmIzQzOzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4ge1xuLVxuLVx0Lyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXHUwMDNlaGVhZCkpKVxuLVx0XHRnb3RvIGZhaWw7XG4gXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcbiBcdFx0Z290byBmYWlsO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChucy1cdTAwM2VjdHJsLVx1MDAzZW9wcy1cdTAwM2Vtb2R1bGUpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbmluZGV4IDc1ZGJiNTgyODZhMzIuLjVjOTVhMmFiNzc1NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbiYjNDM7XG4mIzQzO1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4mIzQzO1x0aWYgKCFwYXJ0bm8pXG4mIzQzO1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0YmRldiA9IHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRyZXR1cm4gYmRldjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4ge1xuIFx0c3RydWN0IG52bWVfbnMgKm5zID0gcmVxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuQEAgLTE2NSw4ICYjNDM7MTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbiYjNDM7XHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuJiM0MztcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbiYjNDM7XHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCAmIzQzOzIwOSw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuJiM0MztcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuJiM0MztcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksXG4mIzQzO1x0XHRcdHJlcV9vcChycSksIGppZmZpZXMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xuIFxuQEAgLTIwOCw3ICYjNDM7MjI0LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuJiM0MztcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuJiM0MztcdFx0XHQgYmRldl9wYXJ0bm8ocnEtXHUwMDNlcGFydCkpLCByZXFfb3AocnEpLFxuIFx0XHRcdCBibGtfcnFfYnl0ZXMocnEpIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQsXG4gXHRcdFx0IG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lKTtcbiB9XG5AQCAtNTQ5LDcgJiM0Mzs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4gXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuIFx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlZGlzayxcbiYjNDM7XHRcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoR0VOSERfRkxfTk9fUEFSVCB8IEdFTkhEX0ZMX0hJRERFTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdHJldHVybiAhKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX05PX1BBUlQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhdGVzdF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDMwYWMwZmZlNjUxNzQuLjA1MzAxZWU1ZDRjYTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuYwpAQCAtNDA2LDE1ICYjNDM7NDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewogCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTsKIAotCWlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKLQkJLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KLQkJaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQotCQkJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiYjNDM7CS8qIE1ha2Ugc3VyZSB0aGUgZmlyc3QgcGFydGl0aW9uIHNjYW4gd2lsbCBiZSBwcm9jZWVkICovCiYjNDM7CWlmIChnZXRfY2FwYWNpdHkoZGlzaykgJmFtcDsmYW1wOyBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSkKJiM0MzsJCXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogCi0JCWJkZXZfYWRkKGRpc2stJmd0O3BhcnQwLCBkZGV2LSZndDtkZXZ0KTsKLQkJaWYgKGdldF9jYXBhY2l0eShkaXNrKSkKLQkJCWRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpOwomIzQzOwliZGV2X2FkZChkaXNrLSZndDtwYXJ0MCwgZGRldi0mZ3Q7ZGV2dCk7CiYjNDM7CWlmIChnZXRfY2FwYWNpdHkoZGlzaykpCiYjNDM7CQlkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTsKIAomIzQzOwlpZiAoIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSB7CiAJCS8qCiAJCSAqIEFubm91bmNlIHRoZSBkaXNrIGFuZCBwYXJ0aXRpb25zIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGFyZQogCQkgKiBjcmVhdGVkLiAoZm9yIGhpZGRlbiBkaXNrcyB1ZXZlbnRzIHJlbWFpbiBzdXBwcmVzc2VkIGZvcmV2ZXIpCkBAIC00OTEsOCAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWRldl9zZXRfbmFtZShkZGV2LCAmIzM0OyVzJiMzNDssIGRpc2stJmd0O2Rpc2tfbmFtZSk7CiAJaWYgKGZ3bm9kZSkKIAkJZGV2aWNlX3NldF9ub2RlKGRkZXYsIGZ3bm9kZSk7Ci0JaWYgKCEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKLQkJZGRldi0mZ3Q7ZGV2dCA9IE1LREVWKGRpc2stJmd0O21ham9yLCBkaXNrLSZndDtmaXJzdF9taW5vcik7CiYjNDM7CWRkZXYtJmd0O2RldnQgPSBNS0RFVihkaXNrLSZndDttYWpvciwgZGlzay0mZ3Q7Zmlyc3RfbWlub3IpOwogCXJldCA9IGRldmljZV9hZGQoZGRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9leHRfbWlub3I7CkBAIC0xMzY4LDcgJiM0MzsxMzY3LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJeGFfZm9yX2VhY2goJmFtcDtncC0mZ3Q7cGFydF90YmwsIGlkeCwgaGQpIHsKLQkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7ICFiZGV2X25yX3NlY3RvcnMoaGQpKQomIzQzOwkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7CmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmE0ODg5NmM2Yzc5MWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCkBAIC0xNTIsNyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpCiAKIAl9CiAJaWYgKHJlcyAmZ3Q7IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAmIzM0OyVzJiMzNDssIHNlcV9idWZfc3RyKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZikpOwomIzQzOwkJaWYgKCEoaGQtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpCiYjNDM7CQkJcHJpbnRrKEtFUk5fSU5GTyAmIzM0OyVzJiMzNDssIHNlcV9idWZfc3RyKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZikpOwogCiAJCWtmcmVlKHN0YXRlLSZndDtwcF9idWYuYnVmZmVyKTsKIAkJcmV0dXJuIHN0YXRlOwpAQCAtMTY0LDcgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKQogCSAqLwogCWlmIChlcnIpCiAJCXJlcyA9IGVycjsKLQlpZiAocmVzKSB7CiYjNDM7CWlmIChyZXMgJmFtcDsmYW1wOyAhKGhkLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSB7CiAJCXNlcV9idWZfcHV0cygmYW1wO3N0YXRlLSZndDtwcF9idWYsCiAJCQkgICAgICYjMzQ7IHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZVxuJiMzNDspOwogCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggMTMyMmM2NzhmNGViOC4uZWQyMWY0ZWYzNmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMTgwOCwxMCAmIzQzOzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybCkKIAogc3RhdGljIGludCBudm1lX25zX29wZW4oc3RydWN0IG52bWVfbnMgKm5zKQogewotCi0JLyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovCi0JaWYgKFdBUk5fT05fT05DRShudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKSkpCi0JCWdvdG8gZmFpbDsKIAlpZiAoIW52bWVfZ2V0X25zKG5zKSkKIAkJZ290byBmYWlsOwogCWlmICghdHJ5X21vZHVsZV9nZXQobnMtJmd0O2N0cmwtJmd0O29wcy0mZ3Q7bW9kdWxlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKaW5kZXggNzVkYmI1ODI4NmEzMi4uNWM5NWEyYWI3NzU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDE5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpCiAJCQlibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCiYjNDM7CWlmICghcGFydG5vKQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWJkZXYgPSB4YV9sb2FkKCZhbXA7ZGlzay0mZ3Q7cGFydF90YmwsIHBhcnRubyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gYmRldjsKJiM0Mzt9CiYjNDM7CiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG52bWVfbnMgKm5zID0gcmVxLSZndDtxLSZndDtxdWV1ZWRhdGE7CkBAIC0xNjUsOCAmIzQzOzE3OCwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7Ci0JZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpCi0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJYmRldl9wYXJ0bm8oYmlvLSZndDtiaV9iZGV2KSkpOwomIzQzOwl9CiAJYmxrX3N0ZWFsX2Jpb3MoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9saXN0LCByZXEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCw4ICYjNDM7MjA5LDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCQlyZXR1cm47CiAKIAludm1lX3JlcShycSktJmd0O2ZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7Ci0JbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAotCQkJCQkJICAgICAgamlmZmllcyk7CiYjNDM7CW52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdCgKJiM0MzsJCQludm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS0mZ3Q7cGFydCkpLAomIzQzOwkJCXJlcV9vcChycSksIGppZmZpZXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTsKIApAQCAtMjA4LDcgJiM0MzsyMjQsOCBAQCB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCiAJaWYgKCEobnZtZV9yZXEocnEpLSZndDtmbGFncyAmYW1wOyBOVk1FX01QQVRIX0lPX1NUQVRTKSkKIAkJcmV0dXJuOwotCWJkZXZfZW5kX2lvX2FjY3QobnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAomIzQzOwliZGV2X2VuZF9pb19hY2N0KG52bWVfdG9fZGlza19wYXJ0KG5zLSZndDtoZWFkLSZndDtkaXNrLAomIzQzOwkJCSBiZGV2X3BhcnRubyhycS0mZ3Q7cGFydCkpLCByZXFfb3AocnEpLAogCQkJIGJsa19ycV9ieXRlcyhycSkgJmd0OyZndDsgU0VDVE9SX1NISUZULAogCQkJIG52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSk7CiB9CkBAIC01NDksNyAmIzQzOzU2Niw5IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbykKIAlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7aGVhZC0mZ3Q7c3JjdSk7CiAJbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKIAlpZiAobGlrZWx5KG5zKSkgewotCQliaW9fc2V0X2RldihiaW8sIG5zLSZndDtkaXNrLSZndDtwYXJ0MCk7CiYjNDM7CQliaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLSZndDtkaXNrLAomIzQzOwkJCQliZGV2X3BhcnRubyhiaW8tJmd0O2JpX2JkZXYpKSk7CiYjNDM7CiAJCS8qCiAJCSAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpbwogCQkgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggOTIxM2E1NzE2Zjk1YS4uYTI3MGNmMTM5NGM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpc2tfb3BlbmVycyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKICAqLwogc3RhdGljIGlubGluZSBib29sIGRpc2tfaGFzX3BhcnRzY2FuKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXJldHVybiAhKGRpc2stJmd0O2ZsYWdzICZhbXA7IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgJmFtcDsmYW1wOwomIzQzOwlyZXR1cm4gIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9OT19QQVJUKSAmYW1wOyZhbXA7CiAJCSF0ZXN0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhczogYGJsb2NrL2dlbmhkLmNgLCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLCBhbmQgdGhlIE5WTWUgZHJpdmVyIGNvZGUgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSAmIzM0O2hpZGRlbiYjMzQ7IGRpc2tzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZmxhZ2dlZCB3aXRoIGBHRU5IRF9GTF9ISURERU5gLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBwYXJ0aXRpb24gc2Nhbm5pbmcgZm9yIGhpZGRlbiBkaXNrcy4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IHByZXZlbnRlZCBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGUgYGJkZXZfYWRkYCBhbmQgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZy4gV2UgYWxzbyBjaGFuZ2UgYGRpc2tfaGFzX3BhcnRzY2FuYCB0byBub3QgY2hlY2sgYEdFTkhEX0ZMX0hJRERFTmAuIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaGlkZGVuIGRpc2tzICpjYW4qIG5vdyBoYXZlIHBhcnRpdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgcHJldHR5IGNsZWFyLCB3ZSBzaG91bGQgYmUgYXdhcmUgb2YgYWxsIHBhcnRpdGlvbnMsIGV2ZW4gb25lcyB0aGF0IHdlIGRvbiYjMzk7dCB3YW50IHRvIHVzZSBkaXJlY3RseSwgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIGRpc2suCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbXBhY3Qgb24gTlZNZSBtdWx0aXBhdGguIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBwYXkgY2xvc2VyIGF0dGVudGlvbi4gVGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBzZWVtIHRvIGFkYXB0IHNldmVyYWwgTlZNZSBmdW5jdGlvbnMgbGlrZSBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIG90aGVycyB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgcGFydGl0aW9ucyBvbiB0aGVzZSBwcmV2aW91c2x5IGhpZGRlbiBOVk1lIGRpc2tzLiBIb2xkIG9uLCB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZyBpcyB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLiBUaGlzIG1lYW5zIGEgY2hhbmdlIGluIGJlaGF2aW9yLCB3aGljaCBtYWtlcyBtZSB0aGluayBvZiBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVhY2hhYmxlIHVzaW5nIHRoZSBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTlZNZSBpcyByZWFjaGFibGUsIGV2ZW4gd2l0aCBRRU1VLCBzaW5jZSB0aGVyZSBhcmUgbG9vcGJhY2sgYW5kIFFFTVUgTlZNZSBkZXZpY2VzLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhlIE5WTWUgbG9vcCB0YXJnZXQgZm9yIHRlc3RpbmcgTlZNZSBtdWx0aXBhdGguIFRpbWUgdG8gY2hlY2sgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTc6Y29uZmlnIE5WTUVfTVVMVElQQVRIXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtOVk1lIG11bHRpcGF0aCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5WTWUgVGFyZ2V0IExvb3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLiBSaWdodCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIGZldyBrZXkgYXNwZWN0czogZmlyc3QsIGlzIHRoaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlbiwgd2hhdCBsZXZlbCBvZiBjb250cm9sIGRvZXMgdGhpcyBvcHRpb24gb2ZmZXI/IElzIGl0IGEgY29tcGlsZS10aW1lIGRpcmVjdGl2ZSwgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgYm90aD8KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmU6IHdoYXQgZXhhY3RseSAqaXMqIHRoZSAmIzM0O05WTWUgdGFyZ2V0IGxvb3AmIzM0Oz8gSXMgaXQgcmVmZXJyaW5nIHRvIHRoZSBzb2Z0d2FyZSBzaWRlIG9mIGFuIE5WTWUgdGFyZ2V0IGVtdWxhdG9yIG9yIGlzIHRoZXJlIGFub3RoZXIgbnVhbmNlIEkmIzM5O20gbWlzc2luZz8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBOVk1lIHRhcmdldCBmZWF0dXJlcy4gSXMgdGhpcyBqdXN0IGEgdGVzdCBzZXR1cCwgb3IgaXMgaXQgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcyBpbiBpbnZlc3RpZ2F0aW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVRfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc9Mjk9Y29uZmlnIE5WTUVfVEFSR0VUX1BBU1NUSFJVXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjQxOmNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYE5WTUVfTVVMVElQQVRIYC4gQmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBtZW50YWwgaW52ZW50b3J5IG9mIHdoYXQgdGhpcyBpcyAqYWN0dWFsbHkqIHJlbHlpbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN0b3JhZ2Ugc3RhY2suIElzIGl0IHRpZWQgZGlyZWN0bHkgdG8gc3BlY2lmaWMgTlZNZSBjb250cm9sbGVyIGRyaXZlcnM/IEFyZSB0aGVyZSBrZXJuZWwgZmVhdHVyZXMgbGlrZSBkZXZpY2UgbWFwcGVyIG9yIG11bHRpcGF0aGQgdGhhdCBpdCBsZXZlcmFnZXM/IEkgaGF2ZSB0byBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgbGF5ZXJzIGhlcmUsIG90aGVyd2lzZSwgSSYjMzk7bSBqdXN0IHBva2luZyBhcm91bmQgaW4gdGhlIGRhcmsuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgc3R1ZmYgZmlyc3QuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBOVk1lIGNvbW1hbmRzIG9yIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBlc3NlbnRpYWwgZm9yIG11bHRpcGF0aGluZyB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRlcGVuZHMgb24/IEFuZCB0aGVuIHdoYXQgYWJvdXQgdGhlIGhpZ2hlciBsZXZlbD8gSXMgaXQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLWhlYXZ5LCBvciBtb3JlIGtlcm5lbC1kcml2ZW4sIHJlcXVpcmluZyBjZXJ0YWluIG1vZHVsZSBidWlsZHMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncz8gSSBjYW4gYWxtb3N0IHNlZSB0aGUgY29kZSBzdHJ1Y3R1cmUsIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHRoZSBpbmNsdWRlIGRpcmVjdGl2ZXMgYWxyZWFkeS4gSSB3aWxsIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgYWxsIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qTlZNRV9NVUxUSVBBVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVk1lIEhvc3QgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBOVk1lIGhvc3QgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYXJvdW5kIGxpbmUgMTcsIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ3VhcmRlZCBieSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucywgaG93IHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIG1vZHVsZXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGV4cGxvcmUgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBrbm9icyBhdmFpbGFibGUgZm9yIHRoaXMgTlZNZSBob3N0IGNvbnRyb2xsZXIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXImIzM5O3MgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGl0JiMzOTtzIGludGVuZGVkIHRvIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTA6XHRcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XG4gIDExOlx0XHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxuICAxMjpcdFx0ICBkb24mIzM5O3QgaGF2ZSBvbmUgb2YgdGhlc2UsIGl0IGlzIHNhZmUgdG8gYW5zd2VyIE4uXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnZtZS5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTlZNRV9NVUxUSVBBVEhcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBOVk1FX0NPUkVcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgVGhpcyBvcHRpb24gY29udHJvbHMgc3VwcG9ydCBmb3IgbXVsdGlwYXRoIGFjY2VzcyB0byBOVk1lXG4gIDIyOlx0XHQgIHN1YnN5c3RlbXMuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgc3VwcG9ydCBmb3IgTlZNZSBtdWx0aXBhdGhcbiAgMjM6XHRcdCAgYWNjZXNzIGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIHN1cHBvcnRcbiAgMjQ6XHRcdCAgZm9yIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpcyBleGNsdWRlZCBmcm9tIHRoZSBrZXJuZWwuIFdoZW4gdGhpc1xuICAyNTpcdFx0ICBvcHRpb24gaXMgZGlzYWJsZWQgZWFjaCBjb250cm9sbGVyL25hbWVzcGFjZSByZWNlaXZlcyBpdHNcbiAgMjY6XHRcdCAgb3duIC9kZXYvbnZtZVhuWSBkZXZpY2UgZW50cnkgYW5kIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpc1xuICAyNzpcdFx0ICBub3Qgc3VwcG9ydGVkLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5WTWUgTXVsdGlwYXRoIGFuZCBQYXJ0aXRpb24gSGFuZGxpbmc6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGBOVk1FX01VTFRJUEFUSGAgZnVuY3Rpb25hbGl0eSBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgTlZNRV9DT1JFYCDigJMgdGhhdCBtYWtlcyBzZW5zZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBoaXR0aW5nIHNvbWUgY29yZSBibG9jayBsYXllciBmaWxlczogYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBob3cgZGlza3MgYW5kIHBhcnRpdGlvbnMgYXJlIGhhbmRsZWQuICBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgTlZNZSBkcml2ZXIgaXRzZWxmIHdpdGggYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYWJvdXQgZW5hYmxpbmcgcGFydGl0aW9ucyBvbiB3aGF0IEkmIzM5O20gZ3Vlc3NpbmcgYXJlICYjMzQ7aGlkZGVuJiMzNDsgZGlza3MsIGxpa2VseSB1c2VkIGluIGFuIE5WTWUgbXVsdGlwYXRoIHNldHVwLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZ2FtZS1jaGFuZ2VyIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBOVk1lIGRldmljZXMgaW4gYSBtdWx0aXBhdGhlZCBlbnZpcm9ubWVudC4gIEdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNvcmUgZmlsZXMgaW52b2x2ZWQsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gR290dGEgbG9vayBmb3IgdGhvc2UgZWRnZSBjYXNlcyEKCkxldCYjMzk7cyBzZWXigKYgZm9yIGZ1enppbmcsIHRoZSBrZXkgc3ltYm9scyBzZWVtIHRvIGJlOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgYWRkX2Rpc2tfZmluYWxgLCBgX19hZGRfZGlza2AsIGFuZCBgY2hlY2tfcGFydGl0aW9uYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRlY2lzaW9uIHBvaW50cy4KCldhaXQgYSBzZWNvbmTigKYgaXMgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBzdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSEgTGV0IG1lIGp1bXAgaW50byBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHRvIHZlcmlmeSB0aGF0IGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBHb3R0YSBtYWtlIHN1cmUgb3VyIGZ1enppbmcgc3RyYXRlZ2llcyBhcmUgaGl0dGluZyB0aGUgcmlnaHQgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NTE2PXN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDktXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NTA6c3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTUxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02NDU9Y29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfbnNfaGVhZF9vcHMgPSB7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDYtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjY0NzpcdC5zdWJtaXRfYmlvXHQ9IG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvLFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ4LVx0Lm9wZW5cdFx0PSBudm1lX25zX2hlYWRfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIEl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IHRocm93cyBhIHJlZCBmbGFnIGZvciBBUEkgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCYjMzk7cyB1c2VkIGFzIGAuc3VibWl0X2Jpb2Agd2l0aGluIGBudm1lX25zX2hlYWRfb3BzYCwgbWFraW5nIGl0IGFuIGVudHJ5IHBvaW50IGluIHRoYXQgY29udGV4dC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBiZXN0IHByYWN0aWNlIGlzIHRvIGxlYW4gdG93YXJkcyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMsIGJlY2F1c2Ugb2YgcG90ZW50aWFsIGlubGluaW5nIGFuZCBsYWNrIG9mIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIHRoZSBsYXR0ZXIuCgpCdXQsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJiMzOTt0KiBpbmxpbmUgaXQsIGFuZCBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgSSB0aGluayB3ZSYjMzk7cmUgc2FmZSB3aXRoIHRoaXMgb25lLCBnaXZlbiB0aGUgd2F5IGl0JiMzOTtzIHVzZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgYWxzbyBjb25zaWRlciBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBhbmQgYG52bWVfZmFpbG92ZXJfcmVxYCBhcyBwb3RlbnRpYWwgQVBJIGVudHJ5IHBvaW50cyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLiBUaGlzIGhlbHBzIG1haW50YWluIGNsYXJpdHkgYW5kIGVhc2Ugb2YgZnV0dXJlIG1haW50ZW5hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTYwPXZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xOTItXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxOTM6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTk0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTUtfVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6MjE2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTctXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwNzk9dm9pZCBudm1lX21wYXRoX3JlbW92ZV9kaXNrKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEwODA6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDgxLXZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTg2PXN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX2RlZmF1bHRfaW9wb2xpY3koc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExODgtfVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExODk6c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5MC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyNjQ9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyNjYtXHRpZiAocnEtXHUwMDNlY21kX2ZsYWdzIFx1MDAyNiBSRVFfTlZNRV9NUEFUSClcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjY3Olx0XHRudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyNjgtXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOVk1lIE11bHRpcGF0aCBSZXF1ZXN0IEhhbmRsaW5nIC0gUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCBpcyBkZWZpbml0ZWx5IGV4cG9zZWQsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQgZm9yIG11bHRpcGF0aCByZXF1ZXN0IGhhbmRsaW5nLCB0aGUgY29yZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgYWxzbyBhdmFpbGFibGUgZXh0ZXJuYWxseT8gVGhhdCYjMzk7cyBhIGtleSBwaWVjZTsgaXQgd291bGQgZGljdGF0ZSBob3cgd2UgaGFuZGxlIGZhaWxvdmVyIHNjZW5hcmlvcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRob3NlIHJlcXVlc3RzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgaWYgdGhlcmUmIzM5O3MgYW5vdGhlciBtZWNoYW5pc20gaW52b2x2ZWQuIFRpbWUgZm9yIGEgcXVpY2sgbG9vayBhdCB0aGUgZXhwb3J0IHRhYmxlLi4uIG9yIG1heWJlIEkgaGF2ZSBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN0cnVjdHVyZSBoZXJlLiBMZXQgbWUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfZmFpbG92ZXJfcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NzY9c3RhdGljIHZvaWQgX19udm1lX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMS1cdGNhc2UgRkFJTE9WRVI6XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTAyOlx0XHRudm1lX2ZhaWxvdmVyX3JlcShyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMy1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTE0Nz1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xNTktXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxNjA6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTYxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTA2Mz12b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cyk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA2NDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEwNjUtdm9pZCBudm1lX2tpY2tfcmVxdWV1ZV9saXN0cyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTExND1zdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9jdHJsX3VzZV9hbmEoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExNy19XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTExODpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTlZNZSBGYWlsb3ZlciBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnZtZV9mYWlsb3Zlcl9yZXFgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBhbmQgaW50ZXJhY3QuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIGJsb2NrIGxheWVyLCBzcGVjaWZpY2FsbHkgYGFkZF9kaXNrX2ZpbmFsYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IG9uZSAqaXMqIHN0YXRpYywgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgY2hhaW4gdGhlcmUgaXMgaW1wb3J0YW50OiBgZGV2aWNlX2FkZF9kaXNrYCBjYWxscyBgX19hZGRfZGlza2AsIGFuZCAqdGhhdCogdGhlbiBjYWxscyBgYWRkX2Rpc2tfZmluYWxgLiBTbywgZXZlbiBpZiBgYWRkX2Rpc2tfZmluYWxgIGlzIHN0YXRpYywgdGhhdCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSBmdWxsIHN0b3J5IGFib3V0IHRoZSBmYWlsb3ZlciBsb2dpYy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0LiBJIHNob3VsZCBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIGFyb3VuZCBlaXRoZXIgYF9fYWRkX2Rpc2tgIG9yIGBkZXZpY2VfYWRkX2Rpc2tgLCBzZWUgd2hlcmUgdGhvc2UgYXJlIGdldHRpbmcgY2FsbGVkIGZyb20sIGFuZCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nLiBJdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz04Mjk9c3RhdGljIGludCB1YmRfYWRkKGludCBuLCBjaGFyICoqZXJyb3Jfb3V0KVxuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTg5NS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjg5NjpcdGVyciA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZ1YmRfZGV2LVx1MDAzZXBkZXYuZGV2LCBkaXNrLCB1YmRfYXR0cl9ncm91cHMpO1xuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtODk3LVx0aWYgKGVycilcbi0tXG5ibG9jay9nZW5oZC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChhZGRfZGlza19md25vZGUpO1xuLS1cbmJsb2NrL2dlbmhkLmMtNjE0LS8qKlxuYmxvY2svZ2VuaGQuYzo2MTU6ICogZGV2aWNlX2FkZF9kaXNrIC0gYWRkIGRpc2sgaW5mb3JtYXRpb24gdG8ga2VybmVsIGxpc3RcbmJsb2NrL2dlbmhkLmMtNjE2LSAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkaXNrXG4tLVxuYmxvY2svZ2VuaGQuYy02MjItICovXG5ibG9jay9nZW5oZC5jOjYyMzppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svZ2VuaGQuYy02MjQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcylcbi0tXG5ibG9jay9nZW5oZC5jLTYyNy19XG5ibG9jay9nZW5oZC5jOjYyODpFWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XG5ibG9jay9nZW5oZC5jLTYyOS1cbi0tXG5ibG9jay9nZW5oZC5jPTc3OT1zdGF0aWMgdm9pZCBkaXNhYmxlX2Vsdl9zd2l0Y2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svZ2VuaGQuYy03OTYtICpcbmJsb2NrL2dlbmhkLmM6Nzk3OiAqIFRoaXMgaXMgdGhlIGNvdW50ZXIgdG8gdGhlIHJlc3BlY3RpdmUgZGV2aWNlX2FkZF9kaXNrKCkgY2FsbC5cbmJsb2NrL2dlbmhkLmMtNzk4LSAqXG4tLVxuYmxvY2svZ2VuaGQuYy04MDAtICogd2l0aCBwdXRfZGlzaygpLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRlbF9nZW5kaXNrKCksIGlmXG5ibG9jay9nZW5oZC5jOjgwMTogKiBkZXZpY2VfYWRkX2Rpc2soKSB3YXMgdXNlZC5cbmJsb2NrL2dlbmhkLmMtODAyLSAqXG4tLVxuYmxvY2svZ2VuaGQuYz0xMjUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpkaXNrX2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xMjY2LSAqXG5ibG9jay9nZW5oZC5jOjEyNjc6ICogRHJpdmVycyB3aGljaCB1c2VkIGRldmljZV9hZGRfZGlzaygpIGhhdmUgYSBnZW5kaXNrIHdpdGggYSByZXF1ZXN0X3F1ZXVlXG5ibG9jay9nZW5oZC5jLTEyNjgtICogYXNzaWduZWQuIFNpbmNlIHRoZSByZXF1ZXN0X3F1ZXVlIHNpdHMgb24gdG9wIG9mIHRoZSBnZW5kaXNrIGZvciB0aGVzZVxuLS1cbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jPTMzMD1hb2VibGtfZ2RhbGxvYyh2b2lkICp2cClcbi0tXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MDktXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzo0MTA6XHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZ2QsIGFvZV9hdHRyX2dyb3Vwcyk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MTEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM9NDU2Nz1zdGF0aWMgaW50IF9faW5pdCBkb19mbG9wcHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtNDcyOS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6NDczMDpcdFx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmZsb3BweV9kZXZpY2VbZHJpdmVdLmRldixcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtNDczMS1cdFx0XHRcdCAgICAgIGRpc2tzW2RyaXZlXVswXSwgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMzOTk9c3RhdGljIGludCBtdGlwX2Jsb2NrX2luaXRpYWxpemUoc3RydWN0IGRyaXZlcl9kYXRhICpkZClcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ3OS1cdCAqIGlmIHJlYnVpbGQgcGVuZGluZywgc3RhcnQgdGhlIHNlcnZpY2UgdGhyZWFkLCBhbmQgZGVsYXkgdGhlIGJsb2NrXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MzQ4MDpcdCAqIHF1ZXVlIGNyZWF0aW9uIGFuZCBkZXZpY2VfYWRkX2Rpc2soKVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTM0ODEtXHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ5Ny1cdC8qIEVuYWJsZSB0aGUgYmxvY2sgZGV2aWNlIGFuZCBhZGQgaXQgdG8gL2RldiAqL1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jOjM0OTg6XHRydiA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZkZC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZGQtXHUwMDNlZGlzaywgbXRpcF9kaXNrX2F0dHJfZ3JvdXBzKTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDk5LVx0aWYgKHJ2KVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTM4Mz1zdGF0aWMgaW50IHBzM2Rpc2tfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqX2Rldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy00NjktXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzo0NzA6XHRlcnJvciA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZkZXYtXHUwMDNlc2JkLmNvcmUsIGdlbmRpc2ssIE5VTEwpO1xuZHJpdmVycy9ibG9jay9wczNkaXNrLmMtNDcxLVx0aWYgKGVycm9yKVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jPTYwNT1zdGF0aWMgaW50IHBzM3ZyYW1fcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc0OS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jOjc1MDpcdGVycm9yID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmRldi1cdTAwM2Vjb3JlLCBnZW5kaXNrLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc1MS1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTcwODA9c3RhdGljIHNzaXplX3QgZG9fcmJkX2FkZChjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTcxNTgtXG5kcml2ZXJzL2Jsb2NrL3JiZC5jOjcxNTk6XHRyYyA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZyYmRfZGV2LVx1MDAzZWRldiwgcmJkX2Rldi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svcmJkLmMtNzE2MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jPTc4ND1zdGF0aWMgaW50IHByb2JlX2Rpc2soc3RydWN0IHZkY19wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtODgxLVxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo4ODI6XHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2cG9ydC1cdTAwM2V2aW8udmRldi1cdTAwM2VkZXYsIGcsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9zdW52ZGMuYy04ODMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1NDItXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTQzOlx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCB2YmxrLVx1MDAzZWRpc2ssIHZpcnRibGtfYXR0cl9ncm91cHMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU0NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz0yMzEyPXN0YXRpYyB2b2lkIGJsa2Zyb250X2Nvbm5lY3Qoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMzk0LVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMzk1Olx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmluZm8tXHUwMDNleGJkZXYtXHUwMDNlZGV2LCBpbmZvLVx1MDAzZWdkLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjM5Ni1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDI0PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDg4LVx0c2V0X2NhcGFjaXR5KHpyYW0tXHUwMDNlZGlzaywgMCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDg5Olx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKE5VTEwsIHpyYW0tXHUwMDNlZGlzaywgenJhbV9kaXNrX2dyb3Vwcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDkwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYz0yMDc3PXN0YXRpYyBpbnQgbXNiX2luaXRfZGlzayhzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkKVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMjgtXHRtc2Jfc3RhcnQoY2FyZCk7XG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYzoyMTI5Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2Y2FyZC1cdTAwM2VkZXYsIG1zYi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMzAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM9MTA5OT1zdGF0aWMgaW50IG1zcHJvX2Jsb2NrX2luaXRfZGlzayhzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkKVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjUtXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYzoxMTY2Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2Y2FyZC1cdTAwM2VkZXYsIG1zYi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0yNzY9aW50IGFkZF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpuZXcpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0zODEtXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjM4MjpcdHJldCA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZuZXctXHUwMDNlbXRkLVx1MDAzZWRldiwgZ2QsIE5VTEwpO1xuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0zODMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jPTM0OT1pbnQgdWJpYmxvY2tfY3JlYXRlKHN0cnVjdCB1Ymlfdm9sdW1lX2luZm8gKnZpKVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTQyNi1cdC8qIE11c3QgYmUgdGhlIGxhc3Qgc3RlcDogYW55b25lIGNhbiBjYWxsIGZpbGUgb3BzIGZyb20gbm93IG9uICovXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYzo0Mjc6XHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2sodmktXHUwMDNlZGV2LCBkZXYtXHUwMDNlZ2QsIE5VTEwpO1xuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMtNDI4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz0xNDk2PXN0YXRpYyBpbnQgYnR0X2Jsa19pbml0KHN0cnVjdCBidHQgKmJ0dClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy0xNTIyLVx0c2V0X2NhcGFjaXR5KGJ0dC1cdTAwM2VidHRfZGlzaywgYnR0LVx1MDAzZW5sYmEgKiBidHQtXHUwMDNlc2VjdG9yX3NpemUgXHUwMDNlXHUwMDNlIDkpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6MTUyMzpcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmJ0dC1cdTAwM2VuZF9idHQtXHUwMDNlZGV2LCBidHQtXHUwMDNlYnR0X2Rpc2ssIE5VTEwpO1xuZHJpdmVycy9udmRpbW0vYnR0LmMtMTUyNC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3MS1cdH1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NzI6XHRyYyA9IGRldmljZV9hZGRfZGlzayhkZXYsIGRpc2ssIHBtZW1fYXR0cmlidXRlX2dyb3Vwcyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTczLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00MjI1PXN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0Mjk4Olx0aWYgKGRldmljZV9hZGRfZGlzayhjdHJsLVx1MDAzZWRldmljZSwgbnMtXHUwMDNlZGlzaywgbnZtZV9uc19hdHRyX2dyb3VwcykpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5OS1cdFx0Z290byBvdXRfY2xlYW51cF9uc19mcm9tX2xpc3Q7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9ODA5PXN0YXRpYyB2b2lkIG52bWVfbXBhdGhfc2V0X2xpdmUoc3RydWN0IG52bWVfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTgxOC1cdCAqIHRlc3RfYW5kX3NldF9iaXQoKSBpcyB1c2VkIGJlY2F1c2UgaXQgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IHR3byBudm1lXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo4MTk6XHQgKiBwYXRocyBzaW11bHRhbmVvdXNseSBjYWxsaW5nIGRldmljZV9hZGRfZGlzaygpIG9uIHRoZSBzYW1lIG5hbWVzcGFjZVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODIwLVx0ICogaGVhZC5cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy04MjItXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTlZNRV9OU0hFQURfRElTS19MSVZFLCBcdTAwMjZoZWFkLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6ODIzOlx0XHRyYyA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZoZWFkLVx1MDAzZXN1YnN5cy1cdTAwM2VkZXYsIGhlYWQtXHUwMDNlZGlzayxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTgyNC1cdFx0XHRcdCAgICAgbnZtZV9uc19hdHRyX2dyb3Vwcyk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz02Nz1pbnQgZGFzZF9nZW5kaXNrX2FsbG9jKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jLTEyNC1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM6MTI1Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2YmFzZS1cdTAwM2VjZGV2LVx1MDAzZWRldiwgYmxvY2stXHUwMDNlZ2RwLCBOVUxMKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTI2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy03MDktXHRnZXRfZGV2aWNlKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldik7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jOjcxMDpcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgZGV2X2luZm8tXHUwMDNlZ2QsIE5VTEwpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy03MTEtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYz00MzQ9aW50IHNjbV9ibGtfZGV2X3NldHVwKHN0cnVjdCBzY21fYmxrX2RldiAqYmRldiwgc3RydWN0IHNjbV9kZXZpY2UgKnNjbWRldilcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5MC1cdHNldF9jYXBhY2l0eShiZGV2LVx1MDAzZWdlbmRpc2ssIHNjbWRldi1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSA5KTtcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6NDkxOlx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnNjbWRldi1cdTAwM2VkZXYsIGJkZXYtXHUwMDNlZ2VuZGlzaywgTlVMTCk7XG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Mzk5Mz1zdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTQxMDctXG5kcml2ZXJzL3Njc2kvc2QuYzo0MTA4Olx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soZGV2LCBnZCwgTlVMTCk7XG5kcml2ZXJzL3Njc2kvc2QuYy00MTA5LVx0aWYgKGVycm9yKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NyLmM9NjE5PXN0YXRpYyBpbnQgc3JfcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTcwMy1cbmRyaXZlcnMvc2NzaS9zci5jOjcwNDpcdGVycm9yID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnNkZXYtXHUwMDNlc2Rldl9nZW5kZXYsIGRpc2ssIE5VTEwpO1xuZHJpdmVycy9zY3NpL3NyLmMtNzA1LVx0aWYgKGVycm9yKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9NzkzPWludCBfX211c3RfY2hlY2sgYWRkX2Rpc2tfZndub2RlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTUtXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjc5NjppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTc5OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTc5OS17XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjgwMDpcdHJldHVybiBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZGlzaywgTlVMTCk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTgwMS19XG4tLVxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM9OTg9ICAgIHB1YiBmbiBidWlsZFx1MDAzY1Q6IE9wZXJhdGlvbnNcdTAwM2UoXG4tLVxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMtMTgzLSAgICAgICAgICAgIHVuc2FmZSB7XG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxODQ6ICAgICAgICAgICAgICAgIGJpbmRpbmdzOjpkZXZpY2VfYWRkX2Rpc2soY29yZTo6cHRyOjpudWxsX211dCgpLCBnZW5kaXNrLCBjb3JlOjpwdHI6Om51bGxfbXV0KCkpXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xODUtICAgICAgICAgICAgfSxcbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xOTAtICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgaW5pdGlhbGl6ZWQgYWJvdmUuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxOTE6ICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB2aWEgYGRldmljZV9hZGRfZGlza2AgYWJvdmUuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xOTItICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrLnF1ZXVlLnF1ZXVlX2RhdGFgIGlzIHNldCB0byBgZGF0YWAgaW4gdGhlIGNhbGwgdG9cbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDYtLy8vICAtIGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB0aHJvdWdoIGEgY2FsbCB0b1xucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM6MjA3Oi8vLyAgICBgYmluZGluZ3M6OmRldmljZV9hZGRfZGlza2AuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDgtLy8vICAtIGBzZWxmLmdlbmRpc2sucXVldWUucXVldWVkYXRhYCBpcyBpbml0aWFsaXplZCBieSBhIGNhbGwgdG8gYEZvcmVpZ25Pd25hYmxlOjppbnRvX2ZvcmVpZ25gLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBEaXNrIEFkZGl0aW9uIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIGBkZXZpY2VfYWRkX2Rpc2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQsIHJpZ2h0PyBBbmQgYGFkZF9kaXNrYCBpdHNlbGYsIHRoYXQgaW5saW5lIGZ1bmN0aW9uLCBqdXN0IGNhbGxzIGBkZXZpY2VfYWRkX2Rpc2tgLiAgTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgY2xhc3NpYyBlbmNhcHN1bGF0aW9uLiBHb29kLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNlbnRlciBteSBhdHRlbnRpb24gb24gYGRldmljZV9hZGRfZGlza2Ag4oCTIGl0JiMzOTtzIHRoZSByaWdodCBzeW1ib2wgdG8gZGlnIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZGlzayBhZGRpdGlvbiBwcm9jZXNzIHdvcmtzLgoKSG1tLCBidXQgd2FpdC4uLiBJJiMzOTttIGp1c3QgcmVjYWxsaW5nIHNvbWV0aGluZy4gVGhlIGBjaGVja19wYXJ0aXRpb25gIGZ1bmN0aW9uLCBJICp0aGluayogdGhhdCYjMzk7cyBzdGF0aWMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgbG9jYXRpb24uIE9oLCByaWdodCwgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gT2theSwgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gTm93LCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGluZ3MgYXJlIHJlYWxseSBpbXBhY3RlZC4gU28sIGJlZm9yZSBJIGdldCBjYXJyaWVkIGF3YXksIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgYmRldl9kaXNrX2NoYW5nZWRgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3BhcnRpdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xMTM9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aXRpb25zKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMTE4LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MTE5OnN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0xMjAte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTU4ND1zdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OTEtXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1OTI6XHRzdGF0ZSA9IGNoZWNrX3BhcnRpdGlvbihkaXNrKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5My1cdGlmICghc3RhdGUpXG4tLVxuZnMvdWRmL3N1cGVyLmM9MTA0Nj1zdGF0aWMgc3RydWN0IHVkZl9iaXRtYXAgKnVkZl9zYl9hbGxvY19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGluZGV4KVxuLS1cbmZzL3VkZi9zdXBlci5jLTEwNTgtXG5mcy91ZGYvc3VwZXIuYzoxMDU5OnN0YXRpYyBpbnQgY2hlY2tfcGFydGl0aW9uX2Rlc2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL3VkZi9zdXBlci5jLTEwNjAtXHRcdFx0XHRzdHJ1Y3QgcGFydGl0aW9uRGVzYyAqcCxcbi0tXG5mcy91ZGYvc3VwZXIuYz0xMTA4PXN0YXRpYyBpbnQgdWRmX2ZpbGxfcGFydGRlc2NfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3VkZi9zdXBlci5jLTExNDAtXG5mcy91ZGYvc3VwZXIuYzoxMTQxOlx0ZXJyID0gY2hlY2tfcGFydGl0aW9uX2Rlc2Moc2IsIHAsIG1hcCk7XG5mcy91ZGYvc3VwZXIuYy0xMTQyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUGFydGl0aW9uaW5nIExvZ2ljKioKCk9rYXksIHNvIGBjaGVja19wYXJ0aXRpb25gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGdldHRpbmcgaW52b2tlZCBieSBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gIFRoYXQgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBXZSYjMzk7cmUgYWRkaW5nIHBhcnRpdGlvbnMsIGFuZCB3ZSBuZWVkIHRvIGNoZWNrIHRoZW0uIE5vdywgd2hlcmUgYXJlIHRob3NlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSB0ZXh0IG1lbnRpb25zIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgYW5kIGBiZGV2X2Rpc2tfY2hhbmdlZGAuICBMZXQmIzM5O3MgZGlnIGludG8gdGhvc2UgYW5kIHNlZSB3aG8mIzM5O3Mga2lja2luZyBvZmYgdGhlIHdob2xlIHByb2Nlc3Mgb2YgcGFydGl0aW9uIGNoZWNraW5nLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfc2Nhbl9wYXJ0aXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay5oPTY0Nj1zdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX2FsbG9jX3F1ZXVlKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGVfaWQpO1xuYmxvY2svYmxrLmgtNjQ3LVxuYmxvY2svYmxrLmg6NjQ4OmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKTtcbmJsb2NrL2Jsay5oLTY0OS1cbi0tXG5ibG9jay9nZW5oZC5jPTM2MT1FWFBPUlRfU1lNQk9MX0dQTChkaXNrX3VldmVudCk7XG5ibG9jay9nZW5oZC5jLTM2Mi1cbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuYmxvY2svZ2VuaGQuYy0zNjQte1xuLS1cbmJsb2NrL2dlbmhkLmMtMzc5LVx0aWYgKCEobW9kZSBcdTAwMjYgQkxLX09QRU5fRVhDTCkpIHtcbmJsb2NrL2dlbmhkLmM6MzgwOlx0XHRyZXQgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGRpc2stXHUwMDNlcGFydDAsIGRpc2tfc2Nhbl9wYXJ0aXRpb25zLFxuYmxvY2svZ2VuaGQuYy0zODEtXHRcdFx0XHRcdCAgTlVMTCk7XG4tLVxuYmxvY2svZ2VuaGQuYy00MDAtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbmJsb2NrL2dlbmhkLmM6NDAxOlx0XHRiZF9hYm9ydF9jbGFpbWluZyhkaXNrLVx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyk7XG5ibG9jay9nZW5oZC5jLTQwMi1cdHJldHVybiByZXQ7XG4tLVxuYmxvY2svZ2VuaGQuYz00MDU9c3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svZ2VuaGQuYy00MTQtXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuYmxvY2svZ2VuaGQuYzo0MTU6XHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuYmxvY2svZ2VuaGQuYy00MTYtXG4tLVxuYmxvY2svaW9jdGwuYz02NTA9c3RhdGljIGludCBibGtkZXZfY29tbW9uX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9pb2N0bC5jLTcxMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2lvY3RsLmM6NzEyOlx0XHRyZXR1cm4gZGlza19zY2FuX3BhcnRpdGlvbnMoYmRldi1cdTAwM2ViZF9kaXNrLFxuYmxvY2svaW9jdGwuYy03MTMtXHRcdFx0XHRtb2RlIHwgQkxLX09QRU5fU1RSSUNUX1NDQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI1NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgSS9PIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHBhcnRpdGlvbiByZS1yZWFkaW5nIHdvcmtzIGluIHRoaXMgYmxvY2sgZGV2aWNlIGRyaXZlci4gSSBub3RpY2VkIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgaXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgdGhhdCwgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG1tLCBpbnRlcmVzdGluZy4gQnV0IGl0IGxvb2tzIGxpa2UgYGJsa2Rldl9jb21tb25faW9jdGxgICpkb2VzKiBjYWxsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2Agd2hlbiBpdCByZWNlaXZlcyB0aGUgYEJMS1JSUEFSVGAgaW9jdGwgY29tbWFuZC4gVGhhdCYjMzk7cyBhIHNvbGlkIGxlYWQuCgpSaWdodCwgYGJsa2Rldl9jb21tb25faW9jdGxgIGhhbmRsZXMgaW9jdGxzIGZvciBibG9jayBkZXZpY2VzIOKAkyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50LiBUaGF0IGdpdmVzIG1lIGEgZ29vZCwgZm9jdXNlZCBzeW1ib2wgdG8gc3RhcnQgZnJvbS4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AuIE9rYXksIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgYW5hbHlzaXMgYXMgSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyBpdCYjMzk7cyBjYWxsZWQuIExldCBtZSBjaGVjayB0aGUgY2FsbGVyIG9mIGBibGtkZXZfY29tbW9uX2lvY3RsYC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBhdCBgYmxrZGV2X2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIGZvcndhcmQgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtkZXZfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MzU0PXN0YXRpYyBpbnQgYmxrZGV2X2NvcHlfem9uZV90b191c2VyKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0zNzAtICogQkxLUkVQT1JUWk9ORSBhbmQgQkxLUkVQT1JUWk9ORVYyIGlvY3RsIHByb2Nlc3NpbmcuXG5ibG9jay9ibGstem9uZWQuYzozNzE6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxuYmxvY2svYmxrLXpvbmVkLmMtMzcyLSAqL1xuLS1cbmJsb2NrL2Jsay16b25lZC5jPTQyMD1zdGF0aWMgaW50IGJsa2Rldl9yZXNldF96b25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9ibGstem9uZWQuYy00NDktICogQkxLUkVTRVRaT05FLCBCTEtPUEVOWk9ORSwgQkxLQ0xPU0VaT05FIGFuZCBCTEtGSU5JU0haT05FIGlvY3RsIHByb2Nlc3NpbmcuXG5ibG9jay9ibGstem9uZWQuYzo0NTA6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxuYmxvY2svYmxrLXpvbmVkLmMtNDUxLSAqL1xuLS1cbmJsb2NrL2Jsay5oPTY2ND1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5ibG9jay9ibGsuaC02NjUtXHRcdGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcbmJsb2NrL2Jsay5oOjY2Njpsb25nIGJsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5ibG9jay9ibGsuaC02NjctaW50IGJsa2Rldl91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuYmxvY2svYmxrLmg6NjY4OmxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5ibG9jay9ibGsuaC02NjktXG4tLVxuYmxvY2svZm9wcy5jPTkyNz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcbi0tXG5ibG9jay9mb3BzLmMtOTM1LVx0LmZzeW5jXHRcdD0gYmxrZGV2X2ZzeW5jLFxuYmxvY2svZm9wcy5jOjkzNjpcdC51bmxvY2tlZF9pb2N0bFx0PSBibGtkZXZfaW9jdGwsXG5ibG9jay9mb3BzLmMtOTM3LSNpZmRlZiBDT05GSUdfQ09NUEFUXG5ibG9jay9mb3BzLmM6OTM4Olx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfYmxrZGV2X2lvY3RsLFxuYmxvY2svZm9wcy5jLTkzOS0jZW5kaWZcbi0tXG5ibG9jay9pb2N0bC5jPTY1MD1zdGF0aWMgaW50IGJsa2Rldl9jb21tb25faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmJsb2NrL2lvY3RsLmMtNzQzLS8qXG5ibG9jay9pb2N0bC5jOjc0NDogKiBBbHdheXMga2VlcCB0aGlzIGluIHN5bmMgd2l0aCBjb21wYXRfYmxrZGV2X2lvY3RsKClcbmJsb2NrL2lvY3RsLmMtNzQ1LSAqIHRvIGhhbmRsZSBhbGwgaW5jb21wYXRpYmxlIGNvbW1hbmRzIGluIGJvdGggZnVuY3Rpb25zLlxuLS1cbmJsb2NrL2lvY3RsLmMtNzQ4LSAqL1xuYmxvY2svaW9jdGwuYzo3NDk6bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5ibG9jay9pb2N0bC5jLTc1MC17XG4tLVxuYmxvY2svaW9jdGwuYy04MDgtICAgRU5PSU9DVExDTUQgZm9yIHVua25vd24gaW9jdGxzLiAqL1xuYmxvY2svaW9jdGwuYzo4MDk6bG9uZyBjb21wYXRfYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuYmxvY2svaW9jdGwuYy04MTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBNdWx0aXBhdGggRW50cnkgUG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcga2V5IGVudHJ5IHBvaW50cyBmb3IgTlZNZSBtdWx0aXBhdGhpbmcgZnVuY3Rpb25hbGl0eS4gSXQgbG9va3MgbGlrZSBgYmxrZGV2X2lvY3RsYCBpcyBkZWZpbml0ZWx5IG9uZS4gVGhlbiB0aGVyZSYjMzk7cyBgZGV2aWNlX2FkZF9kaXNrYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50LiBNb3ZpbmcgaW50byB0aGUgbXVsdGlwYXRoLXNwZWNpZmljIGZ1bmN0aW9ucywgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYW5kIGBudm1lX2ZhaWxvdmVyX3JlcWAgYXJlIG9idmlvdXNseSBjcml0aWNhbCBmb3IgaGFuZGxpbmcgdGhlIHBhdGggc2VsZWN0aW9uIGFuZCBmYWlsb3ZlciBsb2dpYy4KCkhhbmcgb27igKYgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgc3RhdGljLCB3aGljaCB0eXBpY2FsbHkgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgYnV0IGl0JiMzOTtzIHRoZSBgc3VibWl0X2Jpb2AgZnVuY3Rpb24gZm9yIHRoZSBtdWx0aXBhdGggaGVhZCwgc28gdGhhdCYjMzk7cyBhY3R1YWxseSB0aGUgc3VibWl0X2JpbyBmdW5jdGlvbiBmb3IgdGhlIGFjdHVhbCBibG9jayBJL08uIFNvIEkgcmVhbGx5IHNob3VsZCBpbmNsdWRlIHRoYXQgb25lIGFzIHdlbGwuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSS9PIHJlcXVlc3RzIGFyZSBpbml0aWF0ZWQgd2l0aGluIHRoZSBtdWx0aXBhdGggY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSS9PIGFjdHVhbGx5IGdldHMgc3VibWl0dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX25zX2hlYWRfc3VibWl0X2JpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz01MTY9c3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0OS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU1MDpzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NTEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTY0NT1jb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9uc19oZWFkX29wcyA9IHtcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY0Ni1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NjQ3Olx0LnN1Ym1pdF9iaW9cdD0gbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8sXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDgtXHQub3Blblx0XHQ9IG52bWVfbnNfaGVhZF9vcGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOVk1lIE11bHRpcGF0aCBCbG9jayBEZXZpY2UqKgoKT2theSwgc28gYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGJsb2NrIGRldmljZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyB3ZSYjMzk7bGwgYmUgZm9jdXNpbmcgb246IGBkZXZpY2VfYWRkX2Rpc2tgLCBgYmxrZGV2X2lvY3RsYCwgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kLCBvZiBjb3Vyc2UsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuCgpIbW0sIGhvbGQgb24uIEFyZW4mIzM5O3QgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBzdXBwb3NlZCB0byBiZSBleHBvcnRlZD8gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBBaCwgZ29vZCwgaXQgbG9va3MgbGlrZSBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCAqaXMqIGV4cG9ydGVkLCBidXQgSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ0Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19udm1lX2VuZF9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY0LVx0aWYgKHJlcS1cdTAwM2VjbWRfZmxhZ3MgXHUwMDI2IFJFUV9OVk1FX01QQVRIKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NTpcdFx0bnZtZV9tcGF0aF9lbmRfcmVxdWVzdChyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2Ni19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MjE2PUVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTctXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoyMTg6dm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxOS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwODA9dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMDgxOnZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEwODItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExODk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTEtfVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExOTI6c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBOVk1lIE11bHRpLVBhdGhpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE5WTWUgbXVsdGktcGF0aGluZyBtb2R1bGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyBldmVyeXRoaW5nJiMzOTtzIGNvbm5lY3RlZC4gSXQgc2VlbXMgbGlrZSBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgaXNuJiMzOTt0IGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIHN1cnByaXNlLCBidXQgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgICppcyogZXhwb3J0ZWQsIHdoaWNoIGNoYW5nZXMgdGhlIGR5bmFtaWMgYSBsaXR0bGUuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbiBJJiMzOTtsbCBpbmNsdWRlIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBhcyB3ZWxsIGFzIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIFRob3NlIGxvb2sgbGlrZSBrZXkgcGFydHMgb2YgdGhlIHJlcXVlc3QgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuCgpOb3csIHdoYXQgYWJvdXQgdGhhdCBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbj8gSSB0aG91Z2h0IHRoYXQgd2FzIHJlbGV2YW50LCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQWgsIG5vdyBJIHJlbWVtYmVyLCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiAKCkFoLCB5ZXMsIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdGhhdCBjYWxscyBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSBwYXJ0aXRpb24gaGFuZGxpbmcsIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmRldi5jPTcyNz1zdGF0aWMgaW50IGJsa2Rldl9nZXRfd2hvbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlKVxuLS1cbmJsb2NrL2JkZXYuYy03MzctXHRcdFx0ICAgICB0ZXN0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSkpXG5ibG9jay9iZGV2LmM6NzM4Olx0XHRcdFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgdHJ1ZSk7XG5ibG9jay9iZGV2LmMtNzM5LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuYmxvY2svYmRldi5jLTc1MC1cdFx0ICovXG5ibG9jay9iZGV2LmM6NzUxOlx0XHRyZXQgPSBiZGV2X2Rpc2tfY2hhbmdlZChkaXNrLCBmYWxzZSk7XG5ibG9jay9iZGV2LmMtNzUyLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAobW9kZSBcdTAwMjYgQkxLX09QRU5fU1RSSUNUX1NDQU4pKSB7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NTg0PXN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0NC1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjY0NTppbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0Ni17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNzEyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NzEzOkVYUE9SVF9TWU1CT0xfR1BMKGJkZXZfZGlza19jaGFuZ2VkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxNC1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cdG11dGV4X2xvY2soXHUwMDI2bG8tXHUwMDNlbG9fZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpcdHJjID0gYmRldl9kaXNrX2NoYW5nZWQobG8tXHUwMDNlbG9fZGlzaywgZmFsc2UpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNDQ0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTExMT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTYwOlx0XHRlcnIgPSBiZGV2X2Rpc2tfY2hhbmdlZChsby1cdTAwM2Vsb19kaXNrLCBmYWxzZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNDQ0PXN0YXRpYyB2b2lkIHVibGtfcGFydGl0aW9uX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0NTgtXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjQ1OTpcdGJkZXZfZGlza19jaGFuZ2VkKGRpc2ssIGZhbHNlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDYwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9Njg1PXN0YXRpYyB2b2lkIG52bWVfcGFydGl0aW9uX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjk0LVx0bXV0ZXhfbG9jayhcdTAwMjZoZWFkLVx1MDAzZWRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo2OTU6XHRiZGV2X2Rpc2tfY2hhbmdlZChoZWFkLVx1MDAzZWRpc2ssIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5Ni1cdG11dGV4X3VubG9jayhcdTAwMjZoZWFkLVx1MDAzZWRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz0xNTk9aW50IGRhc2Rfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jLTE3My1cdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlZ2RwLVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoxNzQ6XHRyYyA9IGJkZXZfZGlza19jaGFuZ2VkKGJsb2NrLVx1MDAzZWdkcCwgZmFsc2UpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xNzUtXHRtdXRleF91bmxvY2soXHUwMDI2YmxvY2stXHUwMDNlZ2RwLVx1MDAzZW9wZW5fbXV0ZXgpO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM9MTk3PXZvaWQgZGFzZF9kZXN0cm95X3BhcnRpdGlvbnMoc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjA4LVx0bXV0ZXhfbG9jayhcdTAwMjZmaWxlX2JkZXYoYmRldl9maWxlKS1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoyMDk6XHRiZGV2X2Rpc2tfY2hhbmdlZChmaWxlX2JkZXYoYmRldl9maWxlKS1cdTAwM2ViZF9kaXNrLCB0cnVlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjEwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZpbGVfYmRldihiZGV2X2ZpbGUpLVx1MDAzZWJkX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD05NzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtOTc4LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDo5Nzk6aW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC05ODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvcmUgQmxvY2sgTGF5ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGJkZXZfZGlza19jaGFuZ2VkYCBsb29rZWQgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQsIHNpbmNlIGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBwcm9taW5lbnQgYmxvY2sgZHJpdmVycyBsaWtlIGBsb29wYCwgYHVibGtgLCBhbmQgYG52bWVgLiBFeGNlbGxlbnQgZm9jdXMgc3ltYm9sLgoKQnV0IHRoZW4gSSBzYXcgdGhhdCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyBhY3R1YWxseSBleHBvcnRlZCAtIHllcCwgbm9uLXN0YXRpYy4gU28gSSBuZWVkIHRvIGluY2x1ZGUgdGhhdCBzeW1ib2wgYWxvbmcgd2l0aCBgYmRldl9kaXNrX2NoYW5nZWRgLgoKTm93LCB0aW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgc2VlLi4uIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgLCBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBhbmQgYENPTkZJR19OVk1FX0NPUkVgIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBBbnl0aGluZyBlbHNlIHJlbGV2YW50PyBBaCwgeWVzLCBgQ09ORklHX0JMS19ERVZfTlZNRWAgLSB0aGF0JiMzOTtzIHRoZSBQQ0llIE5WTWUgZHJpdmVyIGl0c2VsZi4gVGhlIG90aGVycywgYENPTkZJR19OVk1FX1RBUkdFVGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAsIGFyZSBmb3IgdGhlIE5WTWUgbG9vcCB0YXJnZXQuIFNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGluY2x1ZGUgYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuCgpXYWl0IGEgbWludXRlLi4uIHRoZXNlIHBhdGNoIHRvdWNoZXMgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgIC0gKmNvcmUqIGJsb2NrIGxheWVyIHN0dWZmLiBUaGF0IG1lYW5zIGBCTE9DS2AgbXVzdCBiZSByZXF1aXJlZCwgYnV0IHRoYXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgc28gaXQgZG9lc24mIzM5O3QgbWF0dGVyLiBUaGUgTlZNZSBtdWx0aXBhdGggY2hhbmdlcyBhcmUgb2J2aW91c2x5IHRpZWQgdG8gYE5WTUVfTVVMVElQQVRIYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5lZWRlZC4gU2luY2UgdGhlIGBiZGV2X2Rpc2tfY2hhbmdlZGAgZnVuY3Rpb24gaXMgYWxzbyBuZWVkZWQsIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHRha2VuIHRvby4KClNvLCBJJiMzOTtsbCBhZGQgYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuIFRoYXQgZmVlbHMgcmlnaHQuIE5vdywgbGV0IG1lIHZlcmlmeSB0aG9zZSBgTlZNRV9UQVJHRVRgIGRlcGVuZGVuY2llcyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RBUkdFVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzozOmNvbmZpZyBOVk1FX1RBUkdFVFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFwmIzM0O05WTWUgVGFyZ2V0IGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9UQVJHRVRfUkRNQVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgUkRNQSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTIwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIX0RFQlVHXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3ltYm9sIExpc3QgZm9yIE5WTWUgTXVsdGlwYXRoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBzeW1ib2wgbGlzdC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgb2J2aW91cyBOVk1lIHJlbGF0ZWQgc3ltYm9sczogYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBvbnRvIHRoZSBmdW5jdGlvbiBzeW1ib2xzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBhbmQgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGFzIHdlbGwgYXMgYG52bWVfZmFpbG92ZXJfcmVxYC4gSSBhbHNvIGNoZWNrZWQgdGhlIGF2YWlsYWJpbGl0eSBvZiBgYmRldl9kaXNrX2NoYW5nZWRgLCBgZGlza19zY2FuX3BhcnRpdGlvbnNgLCBgZGV2aWNlX2FkZF9kaXNrYCBhbmQgYGJsa2Rldl9pb2N0bGAuCgpOb3csIHRoZSB0cmljayBpcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGxpc3Qgd2l0aCBvdmVybHkgZ2VuZXJpYywgaGlnaC1mcmVxdWVuY3kgJiMzNDtob3QgcGF0aCYjMzQ7IGZ1bmN0aW9ucy4gU28sIGxldCYjMzk7cyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZWlyIHJvbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjsgd2UgZG9uJiMzOTt0IHdhbnQgdGhlIGRpc3RyaWJ1dGlvbnMgc2tld2VkLgoKYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGhlYWQuIEFuZCBzaW5jZSBpdCYjMzk7cyBhIGBzdWJtaXRfYmlvYCBjYWxsYmFjaywgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IElPIG9uIHRoZSBtdWx0aXBhdGggaGVhZCwgdGhhdCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24uCmBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgYXJlIGNhbGxlZCBmb3IgZXZlcnkgcmVxdWVzdCwgYW5kIHRoYXQgaXMgYSBob3QtcGF0aC4gVGhlc2UgYXJlIG91dC4KCmBudm1lX2ZhaWxvdmVyX3JlcWAgaXMgaW52b2tlZCBvbmx5IGR1cmluZyBmYWlsb3ZlciBldmVudHMuIFRoYXQmIzM5O3Mgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgc3RheXMuCgpgZGV2aWNlX2FkZF9kaXNrYCBpcyB0cmlnZ2VyZWQgd2hlbiBhIG5ldyBkaXNrIGlzIGFkZGVkLCBjbGVhcmx5IG5vdCBhIGhvdC1wYXRoIHNpdHVhdGlvbi4KCmBiZGV2X2Rpc2tfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGR1cmluZyBhIHBhcnRpdGlvbiByZXNjYW4sIHdoaWNoIGlzbiYjMzk7dCBoaWdoLWZyZXF1ZW5jeSBlaXRoZXIuCgpgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gZHVyaW5nIHBhcnRpdGlvbiBzY2FuLCBzbyBpdCBpcyBub3QgaG90LXBhdGguCgpgYmxrZGV2X2lvY3RsYCBkZWFscyB3aXRoIGlvY3RscyBvbiBibG9jayBkZXZpY2VzLiBXaGlsZSBmcmVxdWVudCwgaXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBsaWtlIGBzdWJtaXRfYmlvYC4KClRoZXJlZm9yZSwgSSYjMzk7bGwgZHJvcCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgZnJvbSB0aGUgbGlzdC4gVGhlIGZpbmFsLCBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIEkmIzM5O20gZ29pbmcgd2l0aCBpczoKYG52bWVfZmFpbG92ZXJfcmVxYCwgYGRldmljZV9hZGRfZGlza2AsIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGFuZCBgYmxrZGV2X2lvY3RsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ3Nj1zdGF0aWMgdm9pZCBfX252bWVfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxLVx0Y2FzZSBGQUlMT1ZFUjpcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI6XHRcdG52bWVfZmFpbG92ZXJfcmVxKHJlcSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAzLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTQ3PXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE1OS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjE2MDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xNjEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDYzPXZvaWQgbnZtZV9tcGF0aF9kZWZhdWx0X2lvcG9saWN5KHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMDY0OnZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA2NS12b2lkIG52bWVfa2lja19yZXF1ZXVlX2xpc3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX2N0cmxfdXNlX2FuYShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE3LX1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExMTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwNgoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUGVyZm9ybWFuY2UgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBtb2RpZmllcyBhIGZldyBrZXkgYXJlYXMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoZXkmIzM5O3JlIG9uIHRoZSAqaG90LXBhdGgqLgoKRmlyc3QsIGBudm1lX2ZhaWxvdmVyX3JlcWAuIFRoYXQmIzM5O3MgdHJpZ2dlcmVkIGR1cmluZyBhIHJlcXVlc3QgZmFpbHVyZSBhbmQgcmV0cnkgb24gYSBkaWZmZXJlbnQgcGF0aC4gTm90IGV4YWN0bHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIG9uIHRoZSBob3QgcGF0aCwgYW5kIG5vdCBhIG1hc3NpdmUgY29uY2Vybi4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgZGV2aWNlX2FkZF9kaXNrYCwgYGJkZXZfZGlza19jaGFuZ2VkYCwgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCwgYW5kIGBibGtkZXZfaW9jdGxgLiBUaGVzZSBhbGwgc2VlbSByZWxhdGVkIHRvIGRpc2sgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgYmUgZ29vZC4gQSBxdWljayBzY2FuIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBob3QtcGF0aCBmdW5jdGlvbnMuCgpIb2xkIG9uLCB0aGUgcGF0Y2ggdG91Y2hlcyBgY2hlY2tfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBIbW0sIGBjaGVja19wYXJ0aXRpb25gIGlzICpzdGF0aWMqLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBibGtfYWRkX3BhcnRpdGlvbnNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBiZGV2X2Rpc2tfY2hhbmdlZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AuIEdvb2QsIHNvIHRoZSBsb2dpYyBjaGVja3Mgb3V0LiBTbywgbm8gYmlnIGRlYWwgYWJvdXQgdGhpcy4KCkZpbmFsbHksIHRoZXJlJiMzOTtzIGBkaXNrc3RhdHNfc2hvd2AgaW4gYGJsb2NrL2dlbmhkLmNgLiBJdCYjMzk7cyAqc3RhdGljKiBhbmQgdXNlZCBmb3IgYC9wcm9jL2Rpc2tzdGF0c2AuICBOb3QgYSBob3QtcGF0aCBzaXR1YXRpb24sIGJ1dCBtYXliZSBzb21ldGhpbmcgdG8gbm90ZSBpbiBhIGdlbmVyYWwgcGVyZm9ybWFuY2Ugb3ZlcnZpZXcsIGFsdGhvdWdoIEkgZG9uJiMzOTt0IHRoaW5rIGl0JiMzOTtzIGEgcHJpb3JpdHkuCgpCYXNlZCBvbiBhbGwgb2YgdGhhdCwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYGRldmljZV9hZGRfZGlza2AKKiAgIGBiZGV2X2Rpc2tfY2hhbmdlZGAKKiAgIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AKKiAgIGBibGtkZXZfaW9jdGxgCiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgCgpBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOgoqICAgYE5WTUVfTVVMVElQQVRIYAoqICAgYE5WTUVfVEFSR0VUX0xPT1BgCiogICBgTlZNRV9UQVJHRVRgCiogICBgQkxLX0RFVl9OVk1FYAoKRnJvbSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZW5hYmxpbmcgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIHdoaWNoIHByaW1hcmlseSBtYXR0ZXJzIGZvciBOVk1lIG11bHRpcGF0aC4gSXQgaW5jbHVkZXMgdXBkYXRlcyB0byBOVk1lIG11bHRpcGF0aCB0byBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBjb3JyZWN0bHkgZm9yIHBhcnRpdGlvbnMgb24gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGlzIGlzIG1vc3RseSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgdG8gZXhpc3RpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgTlZNZSBkcml2ZXJzLCBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHRlc3RpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4KCk9rYXksIHRoYXQmIzM5O3MgbXkgYW5hbHlzaXMuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O2JkZXZfZGlza19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O2Rpc2tfc2Nhbl9wYXJ0aXRpb25zJiMzNDssCiAgICAmIzM0O2Jsa2Rldl9pb2N0bCYjMzQ7LAogICAgJiMzNDtudm1lX2ZhaWxvdmVyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODNhOTA3OTg4MzZmNGI3ZDVhNDczOGM4Y2M1NTYyYmFlZjJhYzIxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MDYsMTUgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJc3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spOwogCi0JaWYgKCEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkgewotCQkvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqLwotCQlpZiAoZ2V0X2NhcGFjaXR5KGRpc2spICZhbXA7JmFtcDsgZGlza19oYXNfcGFydHNjYW4oZGlzaykpCi0JCQlzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCAmYW1wO2Rpc2stJmd0O3N0YXRlKTsKJiM0MzsJLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KJiM0MzsJaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQomIzQzOwkJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiAKLQkJYmRldl9hZGQoZGlzay0mZ3Q7cGFydDAsIGRkZXYtJmd0O2RldnQpOwotCQlpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKQotCQkJZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7CiYjNDM7CWJkZXZfYWRkKGRpc2stJmd0O3BhcnQwLCBkZGV2LSZndDtkZXZ0KTsKJiM0MzsJaWYgKGdldF9jYXBhY2l0eShkaXNrKSkKJiM0MzsJCWRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpOwogCiYjNDM7CWlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKIAkJLyoKIAkJICogQW5ub3VuY2UgdGhlIGRpc2sgYW5kIHBhcnRpdGlvbnMgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgYXJlCiAJCSAqIGNyZWF0ZWQuIChmb3IgaGlkZGVuIGRpc2tzIHVldmVudHMgcmVtYWluIHN1cHByZXNzZWQgZm9yZXZlcikKQEAgLTQ5MSw4ICYjNDM7NDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJZGV2X3NldF9uYW1lKGRkZXYsICYjMzQ7JXMmIzM0OywgZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAlpZiAoZndub2RlKQogCQlkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTsKLQlpZiAoIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKQotCQlkZGV2LSZndDtkZXZ0ID0gTUtERVYoZGlzay0mZ3Q7bWFqb3IsIGRpc2stJmd0O2ZpcnN0X21pbm9yKTsKJiM0MzsJZGRldi0mZ3Q7ZGV2dCA9IE1LREVWKGRpc2stJmd0O21ham9yLCBkaXNrLSZndDtmaXJzdF9taW5vcik7CiAJcmV0ID0gZGV2aWNlX2FkZChkZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2V4dF9taW5vcjsKQEAgLTEzNjgsNyAmIzQzOzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewotCQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsgIWJkZXZfbnJfc2VjdG9ycyhoZCkpCiYjNDM7CQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpKQogCQkJY29udGludWU7CiAKIAkJaW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKQEAgLTE1Miw3ICYjNDM7MTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZCkKIAogCX0KIAlpZiAocmVzICZndDsgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CiYjNDM7CQlpZiAoIShoZC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKJiM0MzsJCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CiAKIAkJa2ZyZWUoc3RhdGUtJmd0O3BwX2J1Zi5idWZmZXIpOwogCQlyZXR1cm4gc3RhdGU7CkBAIC0xNjQsNyAmIzQzOzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpCiAJICovCiAJaWYgKGVycikKIAkJcmVzID0gZXJyOwotCWlmIChyZXMpIHsKJiM0MzsJaWYgKHJlcyAmYW1wOyZhbXA7ICEoaGQtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKIAkJc2VxX2J1Zl9wdXRzKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZiwKIAkJCSAgICAgJiMzNDsgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXG4mIzM0Oyk7CiAJCXByaW50ayhLRVJOX0lORk8gJiMzNDslcyYjMzQ7LCBzZXFfYnVmX3N0cigmYW1wO3N0YXRlLSZndDtwcF9idWYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwppbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCkBAIC0xODA4LDEwICYjNDM7MTgwOCw2IEBAIHN0YXRpYyB2b2lkIG52bWVfZW5hYmxlX2FlbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKQogCiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpCiB7Ci0KLQkvKiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGR1ZSB0byBHRU5IRF9GTF9ISURERU4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtJmd0O2hlYWQpKSkKLQkJZ290byBmYWlsOwogCWlmICghbnZtZV9nZXRfbnMobnMpKQogCQlnb3RvIGZhaWw7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChucy0mZ3Q7Y3RybC0mZ3Q7b3BzLSZndDttb2R1bGUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwppbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMTkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cykKIAkJCWJsa19mcmVlemVfcXVldWVfc3RhcnQoaC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwomIzQzOwomIzQzOwkvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi8KJiM0MzsJaWYgKCFwYXJ0bm8pCiYjNDM7CQlyZXR1cm4gZGlzay0mZ3Q7cGFydDA7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJYmRldiA9IHhhX2xvYWQoJmFtcDtkaXNrLSZndDtwYXJ0X3RibCwgcGFydG5vKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBiZGV2OwomIzQzO30KJiM0MzsKIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtJmd0O3EtJmd0O3F1ZXVlZGF0YTsKQEAgLTE2NSw4ICYjNDM7MTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkKLQkJYmlvX3NldF9kZXYoYmlvLCBucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDApOwomIzQzOwlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkgewomIzQzOwkJYmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQliZGV2X3BhcnRubyhiaW8tJmd0O2JpX2JkZXYpKSk7CiYjNDM7CX0KIAlibGtfc3RlYWxfYmlvcygmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xpc3QsIHJlcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKIApAQCAtMTk0LDggJiM0MzsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCXJldHVybjsKIAogCW52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUzsKLQludm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCi0JCQkJCQkgICAgICBqaWZmaWVzKTsKJiM0MzsJbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KAomIzQzOwkJCW52bWVfdG9fZGlza19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKHJxLSZndDtwYXJ0KSksCiYjNDM7CQkJcmVxX29wKHJxKSwgamlmZmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpOwogCkBAIC0yMDgsNyAmIzQzOzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAKIAlpZiAoIShudm1lX3JlcShycSktJmd0O2ZsYWdzICZhbXA7IE5WTUVfTVBBVEhfSU9fU1RBVFMpKQogCQlyZXR1cm47Ci0JYmRldl9lbmRfaW9fYWNjdChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCiYjNDM7CWJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJIGJkZXZfcGFydG5vKHJxLSZndDtwYXJ0KSksIHJlcV9vcChycSksCiAJCQkgYmxrX3JxX2J5dGVzKHJxKSAmZ3Q7Jmd0OyBTRUNUT1JfU0hJRlQsCiAJCQkgbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lKTsKIH0KQEAgLTU0OSw3ICYjNDM7NTY2LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCXNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtoZWFkLSZndDtzcmN1KTsKIAlucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwogCWlmIChsaWtlbHkobnMpKSB7Ci0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2Rpc2ssCiYjNDM7CQkJCWJkZXZfcGFydG5vKGJpby0mZ3Q7YmlfYmRldikpKTsKJiM0MzsKIAkJLyoKIAkJICogVXNlIEJJT19SRU1BUFBFRCB0byBza2lwIGJpb19jaGVja19lb2QoKSB3aGVuIHRoaXMgYmlvCiAJCSAqIGVudGVycyBzdWJtaXRfYmlvX25vYWNjdCgpIGZvciB0aGUgcGVyLXBhdGggZGV2aWNlLiBUaGUgRU9ECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgZGlza19oYXNfcGFydHNjYW4oc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0JcmV0dXJuICEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgKEdFTkhEX0ZMX05PX1BBUlQgfCBHRU5IRF9GTF9ISURERU4pKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiAhKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX05PX1BBUlQpICZhbXA7JmFtcDsKIAkJIXRlc3RfYml0KEdEX1NVUFBSRVNTX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjEKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogMTQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyB0aGUgYmxvY2sgbGF5ZXIgKHNwZWNpZmljYWxseSBgYmxvY2svZ2VuaGQuY2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2ApIGFuZCB0aGUgTlZNZSBtdWx0aXBhdGggY29kZSAoYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2ApLCBpc24mIzM5O3QgbGlrZWx5IHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LgoKVGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSByZWZpbmluZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzICYjMzQ7aGlkZGVuJiMzNDsgZGlza3MsIGlkZW50aWZpZWQgYnkgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcuIFdlJiMzOTtyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0aGF0IGFmZmVjdCBwYXJ0aXRpb24gc2Nhbm5pbmcsIGRldmljZSBhc3NpZ25tZW50LCBhbmQgb3V0cHV0IHN1cHByZXNzaW9uIHJlbGF0ZWQgdG8gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGUga2V5IGNoYW5nZXMgYXJlOgoKKiAgIEluIGBibG9jay9nZW5oZC5jYCwgdGhlIGBhZGRfZGlza19maW5hbGAgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gKmVuYWJsZSogcGFydGl0aW9uIHNjYW5zIGV2ZW4gZm9yIGhpZGRlbiBkaXNrcywgdGhvdWdoIHVldmVudHMgYXJlIHN0aWxsIHN1cHByZXNzZWQuIEl0IHNlZW1zIHRoZSBwYXJ0aXRpb24gc2Nhbm5pbmcgY29kZSBwYXRoIGlzIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGEgbmV3IGNvZGUgcGF0aCBmb3IgaGlkZGVuIHBhcnRpdGlvbnMKKiAgIGBfX2FkZF9kaXNrYCBpcyB1cGRhdGVkIHRvIHVuY29uZGl0aW9uYWxseSBhc3NpZ24gYGRkZXYtJmd0O2RldnRgLCBldmVuIGZvciBoaWRkZW4gZGlza3MuCiogICBgZGlza3N0YXRzX3Nob3dgIGlzIGxvZ2ljIGhhcyBjaGFuZ2VkIGluIHRoZSBjb25kaXRpb25hbCBsb2dpYyB3aGljaCBtYXkgb3IgbWF5IG5vdCBpbmNsdWRlIGhpZGRlbiBwYXJ0aXRpb25zCiogICBgY2hlY2tfcGFydGl0aW9uYCBub3cgc3VwcHJlc3NlcyBwcmludGluZyBvZiBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGhpZGRlbiBkaXNrcy4KKiAgIGBudm1lX25zX29wZW5gIHJlbW92ZXMgYSBgV0FSTl9PTl9PTkNFYCBmb3IgYSBtdWx0aXBhdGggY29uZGl0aW9uLgoqICAgU2V2ZXJhbCBOVk1lIG11bHRpcGF0aCBmdW5jdGlvbnMgKGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2ApIG5vdyB1c2UgYG52bWVfdG9fZGlza19wYXJ0YCB0byBsb29rIHVwIHBhcnRpdGlvbiBibG9jayBkZXZpY2VzIGluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gYGRpc2stJmd0O3BhcnQwYC4KKiAgIGBkaXNrX2hhc19wYXJ0c2NhbmAgbm93IHJlbW92ZXMgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcgZnJvbSB0aGUgY29uZGl0aW9uLgoKSeKAmW0gY2FyZWZ1bGx5IGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHJlZG9taW5hbnRseSBsb2dpYy1iYXNlZC4gVGhlcmUmIzM5O3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gYSByaXNreSB3YXkuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gbG9va3VwIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uIGZsYWdzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG52bWVfdG9fZGlza19wYXJ0YCBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pCnsKCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CgoJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCglpZiAoIXBhcnRubykKCQlyZXR1cm4gZGlzay0mZ3Q7cGFydDA7CglyY3VfcmVhZF9sb2NrKCk7CgliZGV2ID0geGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBwYXJ0bm8pOwoJcmN1X3JlYWRfdW5sb2NrKCk7CglyZXR1cm4gYmRldjsKfQpgYGAKClRoaXMgZnVuY3Rpb24gc2ltcGx5IHVzZXMgYW4geGFycmF5IChgeGFfbG9hZGApIHRvIHJldHJpZXZlIGEgYmxvY2sgZGV2aWNlIHBvaW50ZXIuIEl0IGRvZXNu4oCZdCBjcmVhdGUgYW55IG1lbW9yeSBvciByZWFkIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBsb29rdXAgYW5kIG5vdCBpbml0aWFsaXphdGlvbi4KCkxldCYjMzk7cyBjaGVjayBgZGlza3N0YXRzX3Nob3dgOgoKYGBgYwp4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewoJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CgkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKCQljb250aW51ZTsKYGBgCgpUaGlzIGFnYWluIGp1c3QgaXMgYSBsb2dpYyBjaGFuZ2UuCgpMZXQmIzM5O3MgY2hlY2sgYGFkZF9kaXNrX2ZpbmFsYDoKCmBgYGMKLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQoJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CgpiZGV2X2FkZChkaXNrLSZndDtwYXJ0MCwgZGRldi0mZ3Q7ZGV2dCk7CmlmIChnZXRfY2FwYWNpdHkoZGlzaykpCglkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTsKCmlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKYGBgCgpUaGlzIG1vdmVzIHRoZSBgR0VOSERfRkxfSElEREVOYCBjaGVjayBkb3duLCB0byBlbnN1cmUgdGhhdCBwYXJ0aXRpb24gc2Nhbm5pbmcgY2FuIG9jY3VyIGZvciBoaWRkZW4gZGlza3MuCgpMZXQmIzM5O3MgY2hlY2sgYF9fYWRkX2Rpc2tgOgoKYGBgYwpkZGV2LSZndDtkZXZ0ID0gTUtERVYoZGlzay0mZ3Q7bWFqb3IsIGRpc2stJmd0O2ZpcnN0X21pbm9yKTsKYGBgCgpUaGlzIHVuY29uZGl0aW9uYWxseSBhc3NpZ25zIHRoZSBgZGV2dGAuCgpMZXQmIzM5O3MgY2hlY2sgYGNoZWNrX3BhcnRpdGlvbmA6CgpgYGBjCmlmIChyZXMgJmd0OyAwKSB7CglpZiAoIShoZC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKCQlwcmludGsoS0VSTgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pIGFuZCBjb3JyZWN0bHkgcm91dGUgSS9PIHRvIHRoZSBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSB3aG9sZSBkaXNrIChwYXJ0MCkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93LCByZW1vdmluZyB3YXJuaW5ncywgYW5kIHVwZGF0aW5nIGJsb2NrIGRldmljZSBsb29rdXBzIHZpYSB4YXJyYXkuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gbmV3IGZpZWxkcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjEzLjk3Njc3NjY4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzIwMTk4MjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfTE9PUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9hZGRfZGlza1wiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcImRpc2tfc2Nhbl9wYXJ0aXRpb25zXCIsXG4gICAgXCJibGtkZXZfaW9jdGxcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToxMy45NzY3ODMyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzE2MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCAzMGFjMGZmZTY1MTc0Li4wNTMwMWVlNWQ0Y2E1IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcXG4rKysgYi9ibG9jay9nZW5oZC5jXFxuQEAgLTQwNiwxNSArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcXG4gXFxuLVxcdGlmICghKGRpc2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xcbi1cXHRcXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xcbi1cXHRcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFxcdTAwMjZcXHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxcbi1cXHRcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbitcXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xcbitcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFxcdTAwMjZcXHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxcbitcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbiBcXG4tXFx0XFx0YmRldl9hZGQoZGlzay1cXHUwMDNlcGFydDAsIGRkZXYtXFx1MDAzZWRldnQpO1xcbi1cXHRcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxcbi1cXHRcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG4rXFx0YmRldl9hZGQoZGlzay1cXHUwMDNlcGFydDAsIGRkZXYtXFx1MDAzZWRldnQpO1xcbitcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxcbitcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG4gXFxuK1xcdGlmICghKGRpc2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcXG4gXFx0XFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxcbkBAIC00OTEsOCArNDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGRldl9zZXRfbmFtZShkZGV2LCBcXFwiJXNcXFwiLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXHRpZiAoZndub2RlKVxcbiBcXHRcXHRkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTtcXG4tXFx0aWYgKCEoZGlzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxcbi1cXHRcXHRkZGV2LVxcdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cXHUwMDNlbWFqb3IsIGRpc2stXFx1MDAzZWZpcnN0X21pbm9yKTtcXG4rXFx0ZGRldi1cXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXFx1MDAzZW1ham9yLCBkaXNrLVxcdTAwM2VmaXJzdF9taW5vcik7XFxuIFxcdHJldCA9IGRldmljZV9hZGQoZGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZXh0X21pbm9yO1xcbkBAIC0xMzY4LDcgKzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNmdwLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xcbi1cXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFxcdTAwMjZcXHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxcbitcXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmE0ODg5NmM2Yzc5MWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbkBAIC0xNTIsNyArMTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcXG4gXFxuIFxcdH1cXG4gXFx0aWYgKHJlcyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXNcXFwiLCBzZXFfYnVmX3N0cihcXHUwMDI2c3RhdGUtXFx1MDAzZXBwX2J1ZikpO1xcbitcXHRcXHRpZiAoIShoZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxcbitcXHRcXHRcXHRwcmludGsoS0VSTl9JTkZPIFxcXCIlc1xcXCIsIHNlcV9idWZfc3RyKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmKSk7XFxuIFxcbiBcXHRcXHRrZnJlZShzdGF0ZS1cXHUwMDNlcHBfYnVmLmJ1ZmZlcik7XFxuIFxcdFxcdHJldHVybiBzdGF0ZTtcXG5AQCAtMTY0LDcgKzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXFxuIFxcdCAqL1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXMgPSBlcnI7XFxuLVxcdGlmIChyZXMpIHtcXG4rXFx0aWYgKHJlcyBcXHUwMDI2XFx1MDAyNiAhKGhkLVxcdTAwM2VmbGFncyBcXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcXG4gXFx0XFx0c2VxX2J1Zl9wdXRzKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmLFxcbiBcXHRcXHRcXHQgICAgIFxcXCIgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXNcXFwiLCBzZXFfYnVmX3N0cihcXHUwMDI2c3RhdGUtXFx1MDAzZXBwX2J1ZikpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC0xODA4LDEwICsxODA4LDYgQEAgc3RhdGljIHZvaWQgbnZtZV9lbmFibGVfYWVuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuIFxcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuIHtcXG4tXFxuLVxcdC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZHVlIHRvIEdFTkhEX0ZMX0hJRERFTiAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXFx1MDAzZWhlYWQpKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbiBcXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcXG4gXFx0XFx0Z290byBmYWlsO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KG5zLVxcdTAwM2VjdHJsLVxcdTAwM2VvcHMtXFx1MDAzZW1vZHVsZSkpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG5AQCAtMTQ0LDYgKzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxcbiBcXHRcXHRcXHRibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcXG4rXFxuK1xcdC8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqL1xcbitcXHRpZiAoIXBhcnRubylcXG4rXFx0XFx0cmV0dXJuIGRpc2stXFx1MDAzZXBhcnQwO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGJkZXYgPSB4YV9sb2FkKFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdHJldHVybiBiZGV2O1xcbit9XFxuK1xcbiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIHtcXG4gXFx0c3RydWN0IG52bWVfbnMgKm5zID0gcmVxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuQEAgLTE2NSw4ICsxNzgsMTAgQEAgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bnMtXFx1MDAzZWhlYWQtXFx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xcbi1cXHRmb3IgKGJpbyA9IHJlcS1cXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cXHUwMDNlYmlfbmV4dClcXG4tXFx0XFx0YmlvX3NldF9kZXYoYmlvLCBucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbitcXHRmb3IgKGJpbyA9IHJlcS1cXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cXHUwMDNlYmlfbmV4dCkge1xcbitcXHRcXHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLFxcbitcXHRcXHRcXHRiZGV2X3BhcnRubyhiaW8tXFx1MDAzZWJpX2JkZXYpKSk7XFxuK1xcdH1cXG4gXFx0YmxrX3N0ZWFsX2Jpb3MoXFx1MDAyNm5zLVxcdTAwM2VoZWFkLVxcdTAwM2VyZXF1ZXVlX2xpc3QsIHJlcSk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5zLVxcdTAwM2VoZWFkLVxcdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcXG4gXFxuQEAgLTE5NCw4ICsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG52bWVfcmVxKHJxKS1cXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcXG4tXFx0bnZtZV9yZXEocnEpLVxcdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXFx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBqaWZmaWVzKTtcXG4rXFx0bnZtZV9yZXEocnEpLVxcdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxcbitcXHRcXHRcXHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cXHUwMDNlcGFydCkpLFxcbitcXHRcXHRcXHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbiBcXG5AQCAtMjA4LDcgKzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcbiBcXHRpZiAoIShudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YmRldl9lbmRfaW9fYWNjdChucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDAsIHJlcV9vcChycSksXFxuK1xcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdCBiZGV2X3BhcnRubyhycS1cXHUwMDNlcGFydCkpLCByZXFfb3AocnEpLFxcbiBcXHRcXHRcXHQgYmxrX3JxX2J5dGVzKHJxKSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQsXFxuIFxcdFxcdFxcdCBudm1lX3JlcShycSktXFx1MDAzZXN0YXJ0X3RpbWUpO1xcbiB9XFxuQEAgLTU0OSw3ICs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZXNyY3UpO1xcbiBcXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xcbiBcXHRpZiAobGlrZWx5KG5zKSkge1xcbi1cXHRcXHRiaW9fc2V0X2RldihiaW8sIG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuK1xcdFxcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdFxcdGJkZXZfcGFydG5vKGJpby1cXHUwMDNlYmlfYmRldikpKTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xcbiBcXHRcXHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbmluZGV4IDkyMTNhNTcxNmY5NWEuLmEyNzBjZjEzOTRjN2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5AQCAtMjYwLDcgKzI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpc2tfb3BlbmVycyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbi1cXHRyZXR1cm4gIShkaXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0cmV0dXJuICEoZGlzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9OT19QQVJUKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhdGVzdF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToxNC41NzA1NTc3NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjQxMTM0ODM1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9NVUxUSVBBVEhcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZpY2VfYWRkX2Rpc2tcIixcbiAgICBcImJkZXZfZGlza19jaGFuZ2VkXCIsXG4gICAgXCJkaXNrX3NjYW5fcGFydGl0aW9uc1wiLFxuICAgIFwiYmxrZGV2X2lvY3RsXCIsXG4gICAgXCJudm1lX2ZhaWxvdmVyX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTiksIHdoaWNoIGlzIHByaW1hcmlseSB1c2VkIGJ5IE5WTWUgbXVsdGlwYXRoLiBJdCBhbHNvIHVwZGF0ZXMgTlZNZSBtdWx0aXBhdGggY29kZSB0byBjb3JyZWN0bHkgaGFuZGxlIEkvTyBhbmQgZmFpbG92ZXIgZm9yIHBhcnRpdGlvbnMgb24gaGlkZGVuIGRpc2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgTlZNZSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBOVk1lIGxvb3BiYWNrIHRhcmdldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCAzMGFjMGZmZTY1MTc0Li4wNTMwMWVlNWQ0Y2E1IDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuKysrIGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQwNiwxNSArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcbiBcbi1cdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcbi1cdFx0LyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbi1cdFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4tXHRcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4rXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuK1x0aWYgKGdldF9jYXBhY2l0eShkaXNrKSBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4rXHRcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIFxuLVx0XHRiZGV2X2FkZChkaXNrLVx1MDAzZXBhcnQwLCBkZGV2LVx1MDAzZWRldnQpO1xuLVx0XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuLVx0XHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuK1x0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbitcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG4rXHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuIFxuK1x0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcbiBcdFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxuQEAgLTQ5MSw4ICs0OTEsNyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdGRldl9zZXRfbmFtZShkZGV2LCBcIiVzXCIsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbiBcdGlmIChmd25vZGUpXG4gXHRcdGRldmljZV9zZXRfbm9kZShkZGV2LCBmd25vZGUpO1xuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbi1cdFx0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4rXHRkZGV2LVx1MDAzZWRldnQgPSBNS0RFVihkaXNrLVx1MDAzZW1ham9yLCBkaXNrLVx1MDAzZWZpcnN0X21pbm9yKTtcbiBcdHJldCA9IGRldmljZV9hZGQoZGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9mcmVlX2V4dF9taW5vcjtcbkBAIC0xMzY4LDcgKzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG4tXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxuK1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5pbmRleCBiNWM1OWI3OWNhN2NiLi5hNDg4OTZjNmM3OTFkIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5AQCAtMTUyLDcgKzE1Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXG4gXG4gXHR9XG4gXHRpZiAocmVzIFx1MDAzZSAwKSB7XG4tXHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbitcdFx0aWYgKCEoaGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG4rXHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzXCIsIHNlcV9idWZfc3RyKFx1MDAyNnN0YXRlLVx1MDAzZXBwX2J1ZikpO1xuIFxuIFx0XHRrZnJlZShzdGF0ZS1cdTAwM2VwcF9idWYuYnVmZmVyKTtcbiBcdFx0cmV0dXJuIHN0YXRlO1xuQEAgLTE2NCw3ICsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFx0ICovXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXMgPSBlcnI7XG4tXHRpZiAocmVzKSB7XG4rXHRpZiAocmVzIFx1MDAyNlx1MDAyNiAhKGhkLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG4gXHRcdHNlcV9idWZfcHV0cyhcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYsXG4gXHRcdFx0ICAgICBcIiB1bmFibGUgdG8gcmVhZCBwYXJ0aXRpb24gdGFibGVcXG5cIik7XG4gXHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbmluZGV4IDEzMjJjNjc4ZjRlYjguLmVkMjFmNGVmMzZjOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuQEAgLTE4MDgsMTAgKzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4ge1xuLVxuLVx0Lyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXHUwMDNlaGVhZCkpKVxuLVx0XHRnb3RvIGZhaWw7XG4gXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcbiBcdFx0Z290byBmYWlsO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChucy1cdTAwM2VjdHJsLVx1MDAzZW9wcy1cdTAwM2Vtb2R1bGUpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbmluZGV4IDc1ZGJiNTgyODZhMzIuLjVjOTVhMmFiNzc1NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbkBAIC0xNDQsNiArMTQ0LDE5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRcdFx0YmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuK1xuK1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4rXHRpZiAoIXBhcnRubylcbitcdFx0cmV0dXJuIGRpc2stXHUwMDNlcGFydDA7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRiZGV2ID0geGFfbG9hZChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gYmRldjtcbit9XG4rXG4gdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zICpucyA9IHJlcS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbkBAIC0xNjUsOCArMTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuK1x0XHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzayxcbitcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbitcdH1cbiBcdGJsa19zdGVhbF9iaW9zKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9saXN0LCByZXEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCw4ICsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXHRcdHJldHVybjtcbiBcbiBcdG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyB8PSBOVk1FX01QQVRIX0lPX1NUQVRTO1xuLVx0bnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbi1cdFx0XHRcdFx0XHQgICAgICBqaWZmaWVzKTtcbitcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuK1x0XHRcdG52bWVfdG9fZGlza19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKHJxLVx1MDAzZXBhcnQpKSxcbitcdFx0XHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTtcbiBcbkBAIC0yMDgsNyArMjI0LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuK1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0IGJkZXZfcGFydG5vKHJxLVx1MDAzZXBhcnQpKSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTU0OSw3ICs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4gXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuIFx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VkaXNrLFxuK1x0XHRcdFx0YmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKSk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkaXNrX29wZW5lcnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGRpc2tfaGFzX3BhcnRzY2FuKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHJldHVybiAhKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgXHUwMDI2XHUwMDI2XG4rXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9OT19QQVJUKSBcdTAwMjZcdTAwMjZcbiBcdFx0IXRlc3RfYml0KEdEX1NVUFBSRVNTX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MTQuNTcwNTYwMTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MjM0ODk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCdzIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzOiBgYmxvY2svZ2VuaGQuY2AsIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AsIGFuZCB0aGUgTlZNZSBkcml2ZXIgY29kZSBpbiBgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgaGFuZGxlIFwiaGlkZGVuXCIgZGlza3MsIHNwZWNpZmljYWxseSB0aG9zZSBmbGFnZ2VkIHdpdGggYEdFTkhEX0ZMX0hJRERFTmAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIGFyZSBnb2luZyB0byBtb2RpZnkgcGFydGl0aW9uIHNjYW5uaW5nIGZvciBoaWRkZW4gZGlza3MuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldHMsIHRoZSBwYXRjaCBpcyByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgdGhhdCBwcmV2ZW50ZWQgcGFydGl0aW9uIHNjYW5uaW5nIG9uIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhlIGBiZGV2X2FkZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgZnVuY3Rpb25zIGFyZSBub3cgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcuIFdlIGFsc28gY2hhbmdlIGBkaXNrX2hhc19wYXJ0c2NhbmAgdG8gbm90IGNoZWNrIGBHRU5IRF9GTF9ISURERU5gLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGhpZGRlbiBkaXNrcyAqY2FuKiBub3cgaGF2ZSBwYXJ0aXRpb25zLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhciwgd2Ugc2hvdWxkIGJlIGF3YXJlIG9mIGFsbCBwYXJ0aXRpb25zLCBldmVuIG9uZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHVzZSBkaXJlY3RseSwgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIGRpc2suXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGltcGFjdCBvbiBOVk1lIG11bHRpcGF0aC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHBheSBjbG9zZXIgYXR0ZW50aW9uLiBUaGUgY2hhbmdlcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHNlZW0gdG8gYWRhcHQgc2V2ZXJhbCBOVk1lIGZ1bmN0aW9ucyBsaWtlIGBudm1lX2ZhaWxvdmVyX3JlcWAsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBhbmQgb3RoZXJzIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBwYXJ0aXRpb25zIG9uIHRoZXNlIHByZXZpb3VzbHkgaGlkZGVuIE5WTWUgZGlza3MuIEhvbGQgb24sIHRoZSBgR0VOSERfRkxfSElEREVOYCBmbGFnIGlzIHVzZWQgaW4gTlZNZSBtdWx0aXBhdGguIFRoaXMgbWVhbnMgYSBjaGFuZ2UgaW4gYmVoYXZpb3IsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIG9mIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHJlYWNoYWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJlYWNoYWJsZSB1c2luZyB0aGUgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE5WTWUgaXMgcmVhY2hhYmxlLCBldmVuIHdpdGggUUVNVSwgc2luY2UgdGhlcmUgYXJlIGxvb3BiYWNrIGFuZCBRRU1VIE5WTWUgZGV2aWNlcy4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSBjYW4gdXNlIHRoZSBOVk1lIGxvb3AgdGFyZ2V0IGZvciB0ZXN0aW5nIE5WTWUgbXVsdGlwYXRoLiBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjIuNzEyOTExNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMDYxMzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz01PWNvbmZpZyBCTEtfREVWX05WTUVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxNzpjb25maWcgTlZNRV9NVUxUSVBBVEhcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIk5WTWUgbXVsdGlwYXRoIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjI1LjQxMzUzMTIyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkzNTUzMDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOVk1lIFRhcmdldCBMb29wIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLiBSaWdodCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIGZldyBrZXkgYXNwZWN0czogZmlyc3QsIGlzIHRoaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlbiwgd2hhdCBsZXZlbCBvZiBjb250cm9sIGRvZXMgdGhpcyBvcHRpb24gb2ZmZXI/IElzIGl0IGEgY29tcGlsZS10aW1lIGRpcmVjdGl2ZSwgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgYm90aD9cblxuTW9yZSBzcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lOiB3aGF0IGV4YWN0bHkgKmlzKiB0aGUgXCJOVk1lIHRhcmdldCBsb29wXCI/IElzIGl0IHJlZmVycmluZyB0byB0aGUgc29mdHdhcmUgc2lkZSBvZiBhbiBOVk1lIHRhcmdldCBlbXVsYXRvciBvciBpcyB0aGVyZSBhbm90aGVyIG51YW5jZSBJJ20gbWlzc2luZz8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBOVk1lIHRhcmdldCBmZWF0dXJlcy4gSXMgdGhpcyBqdXN0IGEgdGVzdCBzZXR1cCwgb3IgaXMgaXQgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcyBpbiBpbnZlc3RpZ2F0aW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjE0LjM0OTA2NTU4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc1NDQ0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZz0yOT1jb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk5WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjE3LjEyNDUxNTAxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc1MzMzNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gYE5WTUVfTVVMVElQQVRIYC4gQmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0J3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkgb2Ygd2hhdCB0aGlzIGlzICphY3R1YWxseSogcmVseWluZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3RvcmFnZSBzdGFjay4gSXMgaXQgdGllZCBkaXJlY3RseSB0byBzcGVjaWZpYyBOVk1lIGNvbnRyb2xsZXIgZHJpdmVycz8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBsaWtlIGRldmljZSBtYXBwZXIgb3IgbXVsdGlwYXRoZCB0aGF0IGl0IGxldmVyYWdlcz8gSSBoYXZlIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBsYXllcnMgaGVyZSwgb3RoZXJ3aXNlLCBJJ20ganVzdCBwb2tpbmcgYXJvdW5kIGluIHRoZSBkYXJrLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBzdHVmZiBmaXJzdC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIE5WTWUgY29tbWFuZHMgb3IgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGVzc2VudGlhbCBmb3IgbXVsdGlwYXRoaW5nIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbj8gQW5kIHRoZW4gd2hhdCBhYm91dCB0aGUgaGlnaGVyIGxldmVsPyBJcyBpdCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24taGVhdnksIG9yIG1vcmUga2VybmVsLWRyaXZlbiwgcmVxdWlyaW5nIGNlcnRhaW4gbW9kdWxlIGJ1aWxkcyBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzPyBJIGNhbiBhbG1vc3Qgc2VlIHRoZSBjb2RlIHN0cnVjdHVyZSwgdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGluY2x1ZGUgZGlyZWN0aXZlcyBhbHJlYWR5LiBJIHdpbGwgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBhbGwgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MDoyOS40OTk4NTIxNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTEyODQ4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTlZNRV9NVUxUSVBBVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjMxLjk5NDk4OTM5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDQ3MDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIE5WTWUgSG9zdCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgTlZNZSBob3N0IGRyaXZlciBpcyBjb25maWd1cmVkLiBJIGtub3cgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXIncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAxNywgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ3VhcmRlZCBieSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucywgaG93IHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIG1vZHVsZXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGV4cGxvcmUgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBrbm9icyBhdmFpbGFibGUgZm9yIHRoaXMgTlZNZSBob3N0IGNvbnRyb2xsZXIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXIncyBmbGV4aWJpbGl0eSBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgaXQncyBpbnRlbmRlZCB0byBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6MzUuMjk5NzAyMTE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XFxuICAxMTpcXHRcXHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxcbiAgMTI6XFx0XFx0ICBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgaXQgaXMgc2FmZSB0byBhbnN3ZXIgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG52bWUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9DT1JFXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHN1cHBvcnQgZm9yIG11bHRpcGF0aCBhY2Nlc3MgdG8gTlZNZVxcbiAgMjI6XFx0XFx0ICBzdWJzeXN0ZW1zLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHN1cHBvcnQgZm9yIE5WTWUgbXVsdGlwYXRoXFxuICAyMzpcXHRcXHQgIGFjY2VzcyBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBzdXBwb3J0XFxuICAyNDpcXHRcXHQgIGZvciBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXMgZXhjbHVkZWQgZnJvbSB0aGUga2VybmVsLiBXaGVuIHRoaXNcXG4gIDI1OlxcdFxcdCAgb3B0aW9uIGlzIGRpc2FibGVkIGVhY2ggY29udHJvbGxlci9uYW1lc3BhY2UgcmVjZWl2ZXMgaXRzXFxuICAyNjpcXHRcXHQgIG93biAvZGV2L252bWVYblkgZGV2aWNlIGVudHJ5IGFuZCBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXNcXG4gIDI3OlxcdFxcdCAgbm90IHN1cHBvcnRlZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MDozNS4yOTk4MzgwNzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNjc0Nzg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVk1lIE11bHRpcGF0aCBhbmQgUGFydGl0aW9uIEhhbmRsaW5nOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGBOVk1FX01VTFRJUEFUSGAgZnVuY3Rpb25hbGl0eSBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgTlZNRV9DT1JFYCDigJMgdGhhdCBtYWtlcyBzZW5zZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCdzIGhpdHRpbmcgc29tZSBjb3JlIGJsb2NrIGxheWVyIGZpbGVzOiBgYmxvY2svZ2VuaGQuY2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AuICBUaGF0J3MgYSBwcmV0dHkgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGFzcGVjdHMgb2YgaG93IGRpc2tzIGFuZCBwYXJ0aXRpb25zIGFyZSBoYW5kbGVkLiAgV2UncmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgTlZNZSBkcml2ZXIgaXRzZWxmIHdpdGggYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhYm91dCBlbmFibGluZyBwYXJ0aXRpb25zIG9uIHdoYXQgSSdtIGd1ZXNzaW5nIGFyZSBcImhpZGRlblwiIGRpc2tzLCBsaWtlbHkgdXNlZCBpbiBhbiBOVk1lIG11bHRpcGF0aCBzZXR1cC4gVGhhdCdzIGEgZGVmaW5pdGUgZ2FtZS1jaGFuZ2VyIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBOVk1lIGRldmljZXMgaW4gYSBtdWx0aXBhdGhlZCBlbnZpcm9ubWVudC4gIEdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNvcmUgZmlsZXMgaW52b2x2ZWQsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gR290dGEgbG9vayBmb3IgdGhvc2UgZWRnZSBjYXNlcyFcblxuTGV0J3Mgc2Vl4oCmIGZvciBmdXp6aW5nLCB0aGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZTogYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCwgYGFkZF9kaXNrX2ZpbmFsYCwgYF9fYWRkX2Rpc2tgLCBhbmQgYGNoZWNrX3BhcnRpdGlvbmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgZW50cnkgcG9pbnRzIGFuZCBjcml0aWNhbCBkZWNpc2lvbiBwb2ludHMuXG5cbldhaXQgYSBzZWNvbmTigKYgaXMgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBzdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSEgTGV0IG1lIGp1bXAgaW50byBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHRvIHZlcmlmeSB0aGF0IGZ1bmN0aW9uJ3Mgc2NvcGUuIEdvdHRhIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBzdHJhdGVnaWVzIGFyZSBoaXR0aW5nIHRoZSByaWdodCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6NDAuNTA2NTg5MzgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY4OTM4ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfbnNfaGVhZF9zdWJtaXRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUxNj1zdGF0aWMgYm9vbCBudm1lX2F2YWlsYWJsZV9wYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDktXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NTUwOnN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NTEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NjQ1PWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBudm1lX25zX2hlYWRfb3BzID0ge1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY0Ni1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjY0NzpcXHQuc3VibWl0X2Jpb1xcdD0gbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8sXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ4LVxcdC5vcGVuXFx0XFx0PSBudm1lX25zX2hlYWRfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6NDIuNzc1NTM0MjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMDA3MDQxNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVk1lIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIEl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIHVzdWFsbHkgdGhyb3dzIGEgcmVkIGZsYWcgZm9yIEFQSSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGl0J3MgdXNlZCBhcyBgLnN1Ym1pdF9iaW9gIHdpdGhpbiBgbnZtZV9uc19oZWFkX29wc2AsIG1ha2luZyBpdCBhbiBlbnRyeSBwb2ludCBpbiB0aGF0IGNvbnRleHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYmVzdCBwcmFjdGljZSBpcyB0byBsZWFuIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBiZWNhdXNlIG9mIHBvdGVudGlhbCBpbmxpbmluZyBhbmQgbGFjayBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGZvciB0aGUgbGF0dGVyLlxuXG5CdXQsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSBpdCwgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCBJIHRoaW5rIHdlJ3JlIHNhZmUgd2l0aCB0aGlzIG9uZSwgZ2l2ZW4gdGhlIHdheSBpdCdzIHVzZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdsbCBhbHNvIGNvbnNpZGVyIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGFuZCBgbnZtZV9mYWlsb3Zlcl9yZXFgIGFzIHBvdGVudGlhbCBBUEkgZW50cnkgcG9pbnRzIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgY292ZXJlZC4gVGhpcyBoZWxwcyBtYWludGFpbiBjbGFyaXR5IGFuZCBlYXNlIG9mIGZ1dHVyZSBtYWludGVuYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoxNS43ODI1ODA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NTU2MzkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTYwPXZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE5Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxOTM6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTUtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjIxNjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxNy1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDc5PXZvaWQgbnZtZV9tcGF0aF9yZW1vdmVfZGlzayhzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA4MDp2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDgxLXZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExODY9c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTg4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTE4OTpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5MC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTI2ND1zdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjY2LVxcdGlmIChycS1cXHUwMDNlY21kX2ZsYWdzIFxcdTAwMjYgUkVRX05WTUVfTVBBVEgpXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEyNjc6XFx0XFx0bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTI2OC1cXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUyOjE4LjQ0ODE1MTAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTI4OTczMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5WTWUgTXVsdGlwYXRoIFJlcXVlc3QgSGFuZGxpbmcgLSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgaXMgZGVmaW5pdGVseSBleHBvc2VkLCBubyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQgZm9yIG11bHRpcGF0aCByZXF1ZXN0IGhhbmRsaW5nLCB0aGUgY29yZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgYWxzbyBhdmFpbGFibGUgZXh0ZXJuYWxseT8gVGhhdCdzIGEga2V5IHBpZWNlOyBpdCB3b3VsZCBkaWN0YXRlIGhvdyB3ZSBoYW5kbGUgZmFpbG92ZXIgc2NlbmFyaW9zIGluIGNvbmp1bmN0aW9uIHdpdGggdGhvc2UgcmVxdWVzdHMuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCdzIGV4cG9ydGVkIG9yIGlmIHRoZXJlJ3MgYW5vdGhlciBtZWNoYW5pc20gaW52b2x2ZWQuIFRpbWUgZm9yIGEgcXVpY2sgbG9vayBhdCB0aGUgZXhwb3J0IHRhYmxlLi4uIG9yIG1heWJlIEkgaGF2ZSBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN0cnVjdHVyZSBoZXJlLiBMZXQgbWUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyMi43NjEwNTIwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjEyODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX2ZhaWxvdmVyX3JlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMS1cXHRjYXNlIEZBSUxPVkVSOlxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI6XFx0XFx0bnZtZV9mYWlsb3Zlcl9yZXEocmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAzLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTE0Nz1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE1OS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxNjA6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE2MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTA2Mz12b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cyk7XFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEwNjQ6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA2NS12b2lkIG52bWVfa2lja19yZXF1ZXVlX2xpc3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExMTQ9c3RhdGljIGlubGluZSBib29sIG52bWVfY3RybF91c2VfYW5hKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExNy19XFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExMTg6c3RhdGljIGlubGluZSB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExMTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyNC45MjMxODQwODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDM4MTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE5WTWUgRmFpbG92ZXIgSXNzdWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgZnVuY3Rpb24uIEl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgdXNlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBhbmQgaW50ZXJhY3QuIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBgYWRkX2Rpc2tfZmluYWxgLiBJJ20gcHJldHR5IHN1cmUgdGhhdCBvbmUgKmlzKiBzdGF0aWMsIGl0J3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgY2hhaW4gdGhlcmUgaXMgaW1wb3J0YW50OiBgZGV2aWNlX2FkZF9kaXNrYCBjYWxscyBgX19hZGRfZGlza2AsIGFuZCAqdGhhdCogdGhlbiBjYWxscyBgYWRkX2Rpc2tfZmluYWxgLiBTbywgZXZlbiBpZiBgYWRkX2Rpc2tfZmluYWxgIGlzIHN0YXRpYywgdGhhdCBkb2Vzbid0IHRlbGwgdGhlIGZ1bGwgc3RvcnkgYWJvdXQgdGhlIGZhaWxvdmVyIGxvZ2ljLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGggYXJvdW5kIGVpdGhlciBgX19hZGRfZGlza2Agb3IgYGRldmljZV9hZGRfZGlza2AsIHNlZSB3aGVyZSB0aG9zZSBhcmUgZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgdGhleSdyZSBkb2luZy4gSXQncyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyOC45ODc1NjkzNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE3Mzc2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2aWNlX2FkZF9kaXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jPTgyOT1zdGF0aWMgaW50IHViZF9hZGQoaW50IG4sIGNoYXIgKiplcnJvcl9vdXQpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy04OTUtXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM6ODk2OlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2dWJkX2Rldi1cXHUwMDNlcGRldi5kZXYsIGRpc2ssIHViZF9hdHRyX2dyb3Vwcyk7XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtODk3LVxcdGlmIChlcnIpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChhZGRfZGlza19md25vZGUpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02MTQtLyoqXFxuYmxvY2svZ2VuaGQuYzo2MTU6ICogZGV2aWNlX2FkZF9kaXNrIC0gYWRkIGRpc2sgaW5mb3JtYXRpb24gdG8ga2VybmVsIGxpc3RcXG5ibG9jay9nZW5oZC5jLTYxNi0gKiBAcGFyZW50OiBwYXJlbnQgZGV2aWNlIGZvciB0aGUgZGlza1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02MjItICovXFxuYmxvY2svZ2VuaGQuYzo2MjM6aW50IF9fbXVzdF9jaGVjayBkZXZpY2VfYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9nZW5oZC5jLTYyNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3VwcylcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNjI3LX1cXG5ibG9jay9nZW5oZC5jOjYyODpFWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XFxuYmxvY2svZ2VuaGQuYy02MjktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTc3OT1zdGF0aWMgdm9pZCBkaXNhYmxlX2Vsdl9zd2l0Y2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTc5Ni0gKlxcbmJsb2NrL2dlbmhkLmM6Nzk3OiAqIFRoaXMgaXMgdGhlIGNvdW50ZXIgdG8gdGhlIHJlc3BlY3RpdmUgZGV2aWNlX2FkZF9kaXNrKCkgY2FsbC5cXG5ibG9jay9nZW5oZC5jLTc5OC0gKlxcbi0tXFxuYmxvY2svZ2VuaGQuYy04MDAtICogd2l0aCBwdXRfZGlzaygpLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRlbF9nZW5kaXNrKCksIGlmXFxuYmxvY2svZ2VuaGQuYzo4MDE6ICogZGV2aWNlX2FkZF9kaXNrKCkgd2FzIHVzZWQuXFxuYmxvY2svZ2VuaGQuYy04MDItICpcXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZGlza19hdHRyX2dyb3Vwc1tdID0ge1xcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjY2LSAqXFxuYmxvY2svZ2VuaGQuYzoxMjY3OiAqIERyaXZlcnMgd2hpY2ggdXNlZCBkZXZpY2VfYWRkX2Rpc2soKSBoYXZlIGEgZ2VuZGlzayB3aXRoIGEgcmVxdWVzdF9xdWV1ZVxcbmJsb2NrL2dlbmhkLmMtMTI2OC0gKiBhc3NpZ25lZC4gU2luY2UgdGhlIHJlcXVlc3RfcXVldWUgc2l0cyBvbiB0b3Agb2YgdGhlIGdlbmRpc2sgZm9yIHRoZXNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYz0zMzA9YW9lYmxrX2dkYWxsb2Modm9pZCAqdnApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MDktXFxuZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmM6NDEwOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhOVUxMLCBnZCwgYW9lX2F0dHJfZ3JvdXBzKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM9NDU2Nz1zdGF0aWMgaW50IF9faW5pdCBkb19mbG9wcHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9mbG9wcHkuYy00NzI5LVxcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6NDczMDpcXHRcXHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmZsb3BweV9kZXZpY2VbZHJpdmVdLmRldixcXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jLTQ3MzEtXFx0XFx0XFx0XFx0ICAgICAgZGlza3NbZHJpdmVdWzBdLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYz0zMzk5PXN0YXRpYyBpbnQgbXRpcF9ibG9ja19pbml0aWFsaXplKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ3OS1cXHQgKiBpZiByZWJ1aWxkIHBlbmRpbmcsIHN0YXJ0IHRoZSBzZXJ2aWNlIHRocmVhZCwgYW5kIGRlbGF5IHRoZSBibG9ja1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozNDgwOlxcdCAqIHF1ZXVlIGNyZWF0aW9uIGFuZCBkZXZpY2VfYWRkX2Rpc2soKVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDgxLVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTM0OTctXFx0LyogRW5hYmxlIHRoZSBibG9jayBkZXZpY2UgYW5kIGFkZCBpdCB0byAvZGV2ICovXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jOjM0OTg6XFx0cnYgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRkLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRkLVxcdTAwM2VkaXNrLCBtdGlwX2Rpc2tfYXR0cl9ncm91cHMpO1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDk5LVxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTM4Mz1zdGF0aWMgaW50IHBzM2Rpc2tfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqX2RldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jLTQ2OS1cXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzo0NzA6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRldi1cXHUwMDNlc2JkLmNvcmUsIGdlbmRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jLTQ3MS1cXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYz02MDU9c3RhdGljIGludCBwczN2cmFtX3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYzo3NTA6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRldi1cXHUwMDNlY29yZSwgZ2VuZGlzaywgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9wczN2cmFtLmMtNzUxLVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM9NzA4MD1zdGF0aWMgc3NpemVfdCBkb19yYmRfYWRkKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYy03MTU4LVxcbmRyaXZlcnMvYmxvY2svcmJkLmM6NzE1OTpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2cmJkX2Rldi1cXHUwMDNlZGV2LCByYmRfZGV2LVxcdTAwM2VkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTcxNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYz03ODQ9c3RhdGljIGludCBwcm9iZV9kaXNrKHN0cnVjdCB2ZGNfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtODgxLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmM6ODgyOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2cG9ydC1cXHUwMDNldmlvLnZkZXYtXFx1MDAzZWRldiwgZywgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYy04ODMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU0Mi1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTQzOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2dmRldi1cXHUwMDNlZGV2LCB2YmxrLVxcdTAwM2VkaXNrLCB2aXJ0YmxrX2F0dHJfZ3JvdXBzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTQ0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIzMTI9c3RhdGljIHZvaWQgYmxrZnJvbnRfY29ubmVjdChzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjM5NC1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIzOTU6XFx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFxcdTAwMjZpbmZvLVxcdTAwM2V4YmRldi1cXHUwMDNlZGV2LCBpbmZvLVxcdTAwM2VnZCwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMzk2LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzA4OC1cXHRzZXRfY2FwYWNpdHkoenJhbS1cXHUwMDNlZGlzaywgMCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA4OTpcXHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgenJhbS1cXHUwMDNlZGlzaywgenJhbV9kaXNrX2dyb3Vwcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzA5MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM9MjA3Nz1zdGF0aWMgaW50IG1zYl9pbml0X2Rpc2soc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZClcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMjgtXFx0bXNiX3N0YXJ0KGNhcmQpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jOjIxMjk6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmNhcmQtXFx1MDAzZWRldiwgbXNiLVxcdTAwM2VkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0yMTMwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jPTEwOTk9c3RhdGljIGludCBtc3Byb19ibG9ja19pbml0X2Rpc2soc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZClcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjUtXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6MTE2NjpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2Y2FyZC1cXHUwMDNlZGV2LCBtc2ItXFx1MDAzZWRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0yNzY9aW50IGFkZF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpuZXcpXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTM4MS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjM4MjpcXHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNm5ldy1cXHUwMDNlbXRkLVxcdTAwM2VkZXYsIGdkLCBOVUxMKTtcXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTM4My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM9MzQ5PWludCB1YmlibG9ja19jcmVhdGUoc3RydWN0IHViaV92b2x1bWVfaW5mbyAqdmkpXFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy00MjYtXFx0LyogTXVzdCBiZSB0aGUgbGFzdCBzdGVwOiBhbnlvbmUgY2FuIGNhbGwgZmlsZSBvcHMgZnJvbSBub3cgb24gKi9cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYzo0Mjc6XFx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKHZpLVxcdTAwM2VkZXYsIGRldi1cXHUwMDNlZ2QsIE5VTEwpO1xcbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTQyOC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9MTQ5Nj1zdGF0aWMgaW50IGJ0dF9ibGtfaW5pdChzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy0xNTIyLVxcdHNldF9jYXBhY2l0eShidHQtXFx1MDAzZWJ0dF9kaXNrLCBidHQtXFx1MDAzZW5sYmEgKiBidHQtXFx1MDAzZXNlY3Rvcl9zaXplIFxcdTAwM2VcXHUwMDNlIDkpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjE1MjM6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmJ0dC1cXHUwMDNlbmRfYnR0LVxcdTAwM2VkZXYsIGJ0dC1cXHUwMDNlYnR0X2Rpc2ssIE5VTEwpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTE1MjQtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3MS1cXHR9XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU3MjpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhkZXYsIGRpc2ssIHBtZW1fYXR0cmlidXRlX2dyb3Vwcyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDIyNT1zdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDI5ODpcXHRpZiAoZGV2aWNlX2FkZF9kaXNrKGN0cmwtXFx1MDAzZWRldmljZSwgbnMtXFx1MDAzZWRpc2ssIG52bWVfbnNfYXR0cl9ncm91cHMpKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00Mjk5LVxcdFxcdGdvdG8gb3V0X2NsZWFudXBfbnNfZnJvbV9saXN0O1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9ODA5PXN0YXRpYyB2b2lkIG52bWVfbXBhdGhfc2V0X2xpdmUoc3RydWN0IG52bWVfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODE4LVxcdCAqIHRlc3RfYW5kX3NldF9iaXQoKSBpcyB1c2VkIGJlY2F1c2UgaXQgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IHR3byBudm1lXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6ODE5OlxcdCAqIHBhdGhzIHNpbXVsdGFuZW91c2x5IGNhbGxpbmcgZGV2aWNlX2FkZF9kaXNrKCkgb24gdGhlIHNhbWUgbmFtZXNwYWNlXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODIwLVxcdCAqIGhlYWQuXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy04MjItXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE5WTUVfTlNIRUFEX0RJU0tfTElWRSwgXFx1MDAyNmhlYWQtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjgyMzpcXHRcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2aGVhZC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VkZXYsIGhlYWQtXFx1MDAzZWRpc2ssXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODI0LVxcdFxcdFxcdFxcdCAgICAgbnZtZV9uc19hdHRyX2dyb3Vwcyk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jPTY3PWludCBkYXNkX2dlbmRpc2tfYWxsb2Moc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xMjQtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoxMjU6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmJhc2UtXFx1MDAzZWNkZXYtXFx1MDAzZWRldiwgYmxvY2stXFx1MDAzZWdkcCwgTlVMTCk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xMjYtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jPTU1Mz1kY3NzYmxrX2FkZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNzA5LVxcdGdldF9kZXZpY2UoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6NzEwOlxcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBkZXZfaW5mby1cXHUwMDNlZ2QsIE5VTEwpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNzExLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM9NDM0PWludCBzY21fYmxrX2Rldl9zZXR1cChzdHJ1Y3Qgc2NtX2Jsa19kZXYgKmJkZXYsIHN0cnVjdCBzY21fZGV2aWNlICpzY21kZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5MC1cXHRzZXRfY2FwYWNpdHkoYmRldi1cXHUwMDNlZ2VuZGlzaywgc2NtZGV2LVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIDkpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6NDkxOlxcdHJldCA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2c2NtZGV2LVxcdTAwM2VkZXYsIGJkZXYtXFx1MDAzZWdlbmRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmMtNDkyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0zOTkzPXN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy00MTA3LVxcbmRyaXZlcnMvc2NzaS9zZC5jOjQxMDg6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soZGV2LCBnZCwgTlVMTCk7XFxuZHJpdmVycy9zY3NpL3NkLmMtNDEwOS1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jPTYxOT1zdGF0aWMgaW50IHNyX3Byb2JlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTcwMy1cXG5kcml2ZXJzL3Njc2kvc3IuYzo3MDQ6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNnNkZXYtXFx1MDAzZXNkZXZfZ2VuZGV2LCBkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy03MDUtXFx0aWYgKGVycm9yKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD03OTM9aW50IF9fbXVzdF9jaGVjayBhZGRfZGlza19md25vZGUoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNzk1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjc5NjppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNzk3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTc5OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTkte1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6ODAwOlxcdHJldHVybiBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZGlzaywgTlVMTCk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC04MDEtfVxcbi0tXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM9OTg9ICAgIHB1YiBmbiBidWlsZFxcdTAwM2NUOiBPcGVyYXRpb25zXFx1MDAzZShcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTE4My0gICAgICAgICAgICB1bnNhZmUge1xcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzOjE4NDogICAgICAgICAgICAgICAgYmluZGluZ3M6OmRldmljZV9hZGRfZGlzayhjb3JlOjpwdHI6Om51bGxfbXV0KCksIGdlbmRpc2ssIGNvcmU6OnB0cjo6bnVsbF9tdXQoKSlcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xODUtICAgICAgICAgICAgfSxcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTE5MC0gICAgICAgIC8vIElOVkFSSUFOVDogYGdlbmRpc2tgIHdhcyBpbml0aWFsaXplZCBhYm92ZS5cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxOTE6ICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB2aWEgYGRldmljZV9hZGRfZGlza2AgYWJvdmUuXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMtMTkyLSAgICAgICAgLy8gSU5WQVJJQU5UOiBgZ2VuZGlzay5xdWV1ZS5xdWV1ZV9kYXRhYCBpcyBzZXQgdG8gYGRhdGFgIGluIHRoZSBjYWxsIHRvXFxuLS1cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDYtLy8vICAtIGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB0aHJvdWdoIGEgY2FsbCB0b1xcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzOjIwNzovLy8gICAgYGJpbmRpbmdzOjpkZXZpY2VfYWRkX2Rpc2tgLlxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTIwOC0vLy8gIC0gYHNlbGYuZ2VuZGlzay5xdWV1ZS5xdWV1ZWRhdGFgIGlzIGluaXRpYWxpemVkIGJ5IGEgY2FsbCB0byBgRm9yZWlnbk93bmFibGU6OmludG9fZm9yZWlnbmAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUyOjMxLjIzOTMxMzYwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODIwNzI4MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIERpc2sgQWRkaXRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgZGV2aWNlX2FkZF9kaXNrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCwgcmlnaHQ/IEFuZCBgYWRkX2Rpc2tgIGl0c2VsZiwgdGhhdCBpbmxpbmUgZnVuY3Rpb24sIGp1c3QgY2FsbHMgYGRldmljZV9hZGRfZGlza2AuICBNYWtlcyBzZW5zZSwgdGhhdCdzIGNsYXNzaWMgZW5jYXBzdWxhdGlvbi4gR29vZC4gVGhlcmVmb3JlLCBJIHNob3VsZCBjZW50ZXIgbXkgYXR0ZW50aW9uIG9uIGBkZXZpY2VfYWRkX2Rpc2tgIOKAkyBpdCdzIHRoZSByaWdodCBzeW1ib2wgdG8gZGlnIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZGlzayBhZGRpdGlvbiBwcm9jZXNzIHdvcmtzLlxuXG5IbW0sIGJ1dCB3YWl0Li4uIEknbSBqdXN0IHJlY2FsbGluZyBzb21ldGhpbmcuIFRoZSBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbiwgSSAqdGhpbmsqIHRoYXQncyBzdGF0aWMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgbG9jYXRpb24uIE9oLCByaWdodCwgaXQncyBkZWZpbmVkIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBPa2F5LCB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBOb3csIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaW5ncyBhcmUgcmVhbGx5IGltcGFjdGVkLiBTbywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mjo0OS40NDY2MDA0MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjgzNjIzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcGFydGl0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTExMz1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpdGlvbnMoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTExOC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoxMTk6c3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0xMjAte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NTg0PXN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTkxLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjU5MjpcXHRzdGF0ZSA9IGNoZWNrX3BhcnRpdGlvbihkaXNrKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OTMtXFx0aWYgKCFzdGF0ZSlcXG4tLVxcbmZzL3VkZi9zdXBlci5jPTEwNDY9c3RhdGljIHN0cnVjdCB1ZGZfYml0bWFwICp1ZGZfc2JfYWxsb2NfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpbmRleClcXG4tLVxcbmZzL3VkZi9zdXBlci5jLTEwNTgtXFxuZnMvdWRmL3N1cGVyLmM6MTA1OTpzdGF0aWMgaW50IGNoZWNrX3BhcnRpdGlvbl9kZXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvdWRmL3N1cGVyLmMtMTA2MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFydGl0aW9uRGVzYyAqcCxcXG4tLVxcbmZzL3VkZi9zdXBlci5jPTExMDg9c3RhdGljIGludCB1ZGZfZmlsbF9wYXJ0ZGVzY19pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy91ZGYvc3VwZXIuYy0xMTQwLVxcbmZzL3VkZi9zdXBlci5jOjExNDE6XFx0ZXJyID0gY2hlY2tfcGFydGl0aW9uX2Rlc2Moc2IsIHAsIG1hcCk7XFxuZnMvdWRmL3N1cGVyLmMtMTE0Mi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mjo1MS43MTQ5Njc5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ0MzQ3MTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFydGl0aW9uaW5nIExvZ2ljKipcblxuT2theSwgc28gYGNoZWNrX3BhcnRpdGlvbmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgaXQncyBnZXR0aW5nIGludm9rZWQgYnkgYGJsa19hZGRfcGFydGl0aW9uc2AuICBUaGF0IG1ha2VzIHNlbnNlLCByaWdodD8gV2UncmUgYWRkaW5nIHBhcnRpdGlvbnMsIGFuZCB3ZSBuZWVkIHRvIGNoZWNrIHRoZW0uIE5vdywgd2hlcmUgYXJlIHRob3NlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSB0ZXh0IG1lbnRpb25zIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgYW5kIGBiZGV2X2Rpc2tfY2hhbmdlZGAuICBMZXQncyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdobydzIGtpY2tpbmcgb2ZmIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHBhcnRpdGlvbiBjaGVja2luZy4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTM6MDkuMTU4NDQzNTU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4NTMwODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfc2Nhbl9wYXJ0aXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay5oPTY0Nj1zdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX2FsbG9jX3F1ZXVlKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGVfaWQpO1xcbmJsb2NrL2Jsay5oLTY0Ny1cXG5ibG9jay9ibGsuaDo2NDg6aW50IGRpc2tfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpO1xcbmJsb2NrL2Jsay5oLTY0OS1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MzYxPUVYUE9SVF9TWU1CT0xfR1BMKGRpc2tfdWV2ZW50KTtcXG5ibG9jay9nZW5oZC5jLTM2Mi1cXG5ibG9jay9nZW5oZC5jOjM2MzppbnQgZGlza19zY2FuX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5ibG9jay9nZW5oZC5jLTM2NC17XFxuLS1cXG5ibG9jay9nZW5oZC5jLTM3OS1cXHRpZiAoIShtb2RlIFxcdTAwMjYgQkxLX09QRU5fRVhDTCkpIHtcXG5ibG9jay9nZW5oZC5jOjM4MDpcXHRcXHRyZXQgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGRpc2stXFx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyxcXG5ibG9jay9nZW5oZC5jLTM4MS1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy00MDAtXFx0aWYgKCEobW9kZSBcXHUwMDI2IEJMS19PUEVOX0VYQ0wpKVxcbmJsb2NrL2dlbmhkLmM6NDAxOlxcdFxcdGJkX2Fib3J0X2NsYWltaW5nKGRpc2stXFx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyk7XFxuYmxvY2svZ2VuaGQuYy00MDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmJsb2NrL2dlbmhkLmM9NDA1PXN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy00MTQtXFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSlcXG5ibG9jay9nZW5oZC5jOjQxNTpcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG5ibG9jay9nZW5oZC5jLTQxNi1cXG4tLVxcbmJsb2NrL2lvY3RsLmM9NjUwPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9pb2N0bC5jLTcxMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9pb2N0bC5jOjcxMjpcXHRcXHRyZXR1cm4gZGlza19zY2FuX3BhcnRpdGlvbnMoYmRldi1cXHUwMDNlYmRfZGlzayxcXG5ibG9jay9pb2N0bC5jLTcxMy1cXHRcXHRcXHRcXHRtb2RlIHwgQkxLX09QRU5fU1RSSUNUX1NDQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MzoxMS4zNTY5ODA3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTU3Mjk2ODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIEkvTyBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgcGFydGl0aW9uIHJlLXJlYWRpbmcgd29ya3MgaW4gdGhpcyBibG9jayBkZXZpY2UgZHJpdmVyLiBJIG5vdGljZWQgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGF0LCBidXQgaXQncyBub3QgZGlyZWN0bHkgZXhwb3J0ZWQuIEhtbSwgaW50ZXJlc3RpbmcuIEJ1dCBpdCBsb29rcyBsaWtlIGBibGtkZXZfY29tbW9uX2lvY3RsYCAqZG9lcyogY2FsbCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIHdoZW4gaXQgcmVjZWl2ZXMgdGhlIGBCTEtSUlBBUlRgIGlvY3RsIGNvbW1hbmQuIFRoYXQncyBhIHNvbGlkIGxlYWQuXG5cblJpZ2h0LCBgYmxrZGV2X2NvbW1vbl9pb2N0bGAgaGFuZGxlcyBpb2N0bHMgZm9yIGJsb2NrIGRldmljZXMg4oCTIHRoYXQncyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludC4gVGhhdCBnaXZlcyBtZSBhIGdvb2QsIGZvY3VzZWQgc3ltYm9sIHRvIHN0YXJ0IGZyb20uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIE9rYXksIHRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcyBhcyBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgYWxsIHRoZSBwbGFjZXMgaXQncyBjYWxsZWQuIExldCBtZSBjaGVjayB0aGUgY2FsbGVyIG9mIGBibGtkZXZfY29tbW9uX2lvY3RsYC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBhdCBgYmxrZGV2X2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIGZvcndhcmQgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI1NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUzOjMyLjkyOTk1MjIwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MjczMDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtkZXZfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MzU0PXN0YXRpYyBpbnQgYmxrZGV2X2NvcHlfem9uZV90b191c2VyKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTM3MC0gKiBCTEtSRVBPUlRaT05FIGFuZCBCTEtSRVBPUlRaT05FVjIgaW9jdGwgcHJvY2Vzc2luZy5cXG5ibG9jay9ibGstem9uZWQuYzozNzE6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxcbmJsb2NrL2Jsay16b25lZC5jLTM3Mi0gKi9cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTQyMD1zdGF0aWMgaW50IGJsa2Rldl9yZXNldF96b25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTQ0OS0gKiBCTEtSRVNFVFpPTkUsIEJMS09QRU5aT05FLCBCTEtDTE9TRVpPTkUgYW5kIEJMS0ZJTklTSFpPTkUgaW9jdGwgcHJvY2Vzc2luZy5cXG5ibG9jay9ibGstem9uZWQuYzo0NTA6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxcbmJsb2NrL2Jsay16b25lZC5jLTQ1MS0gKi9cXG4tLVxcbmJsb2NrL2Jsay5oPTY2ND1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuYmxvY2svYmxrLmgtNjY1LVxcdFxcdGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcXG5ibG9jay9ibGsuaDo2NjY6bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbmJsb2NrL2Jsay5oLTY2Ny1pbnQgYmxrZGV2X3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuYmxvY2svYmxrLmg6NjY4OmxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuYmxvY2svYmxrLmgtNjY5LVxcbi0tXFxuYmxvY2svZm9wcy5jPTkyNz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy05MzUtXFx0LmZzeW5jXFx0XFx0PSBibGtkZXZfZnN5bmMsXFxuYmxvY2svZm9wcy5jOjkzNjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IGJsa2Rldl9pb2N0bCxcXG5ibG9jay9mb3BzLmMtOTM3LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuYmxvY2svZm9wcy5jOjkzODpcXHQuY29tcGF0X2lvY3RsXFx0PSBjb21wYXRfYmxrZGV2X2lvY3RsLFxcbmJsb2NrL2ZvcHMuYy05MzktI2VuZGlmXFxuLS1cXG5ibG9jay9pb2N0bC5jPTY1MD1zdGF0aWMgaW50IGJsa2Rldl9jb21tb25faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuYmxvY2svaW9jdGwuYy03NDMtLypcXG5ibG9jay9pb2N0bC5jOjc0NDogKiBBbHdheXMga2VlcCB0aGlzIGluIHN5bmMgd2l0aCBjb21wYXRfYmxrZGV2X2lvY3RsKClcXG5ibG9jay9pb2N0bC5jLTc0NS0gKiB0byBoYW5kbGUgYWxsIGluY29tcGF0aWJsZSBjb21tYW5kcyBpbiBib3RoIGZ1bmN0aW9ucy5cXG4tLVxcbmJsb2NrL2lvY3RsLmMtNzQ4LSAqL1xcbmJsb2NrL2lvY3RsLmM6NzQ5OmxvbmcgYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmJsb2NrL2lvY3RsLmMtNzUwLXtcXG4tLVxcbmJsb2NrL2lvY3RsLmMtODA4LSAgIEVOT0lPQ1RMQ01EIGZvciB1bmtub3duIGlvY3Rscy4gKi9cXG5ibG9jay9pb2N0bC5jOjgwOTpsb25nIGNvbXBhdF9ibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYmxvY2svaW9jdGwuYy04MTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MzozNS41ODI2OTI0MjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxOTE2NzM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WTWUgTXVsdGlwYXRoIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBrZXkgZW50cnkgcG9pbnRzIGZvciBOVk1lIG11bHRpcGF0aGluZyBmdW5jdGlvbmFsaXR5LiBJdCBsb29rcyBsaWtlIGBibGtkZXZfaW9jdGxgIGlzIGRlZmluaXRlbHkgb25lLiBUaGVuIHRoZXJlJ3MgYGRldmljZV9hZGRfZGlza2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudC4gTW92aW5nIGludG8gdGhlIG11bHRpcGF0aC1zcGVjaWZpYyBmdW5jdGlvbnMsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGFuZCBgbnZtZV9mYWlsb3Zlcl9yZXFgIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoZSBwYXRoIHNlbGVjdGlvbiBhbmQgZmFpbG92ZXIgbG9naWMuXG5cbkhhbmcgb27igKYgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIHR5cGljYWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGJ1dCBpdCdzIHRoZSBgc3VibWl0X2Jpb2AgZnVuY3Rpb24gZm9yIHRoZSBtdWx0aXBhdGggaGVhZCwgc28gdGhhdCdzIGFjdHVhbGx5IHRoZSBzdWJtaXRfYmlvIGZ1bmN0aW9uIGZvciB0aGUgYWN0dWFsIGJsb2NrIEkvTy4gU28gSSByZWFsbHkgc2hvdWxkIGluY2x1ZGUgdGhhdCBvbmUgYXMgd2VsbC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEkvTyByZXF1ZXN0cyBhcmUgaW5pdGlhdGVkIHdpdGhpbiB0aGUgbXVsdGlwYXRoIGNvbnRleHQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSS9PIGFjdHVhbGx5IGdldHMgc3VibWl0dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mzo1OC43NzQzNjkzNTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzE3NzQ2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NTE2PXN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0OS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NTA6c3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU1MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02NDU9Y29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfbnNfaGVhZF9vcHMgPSB7XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ2LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NjQ3OlxcdC5zdWJtaXRfYmlvXFx0PSBudm1lX25zX2hlYWRfc3VibWl0X2JpbyxcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDgtXFx0Lm9wZW5cXHRcXHQ9IG52bWVfbnNfaGVhZF9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDowMS4xMDYxNTE0NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzOTU0Nzg5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTlZNZSBNdWx0aXBhdGggQmxvY2sgRGV2aWNlKipcblxuT2theSwgc28gYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGJsb2NrIGRldmljZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgd2UnbGwgYmUgZm9jdXNpbmcgb246IGBkZXZpY2VfYWRkX2Rpc2tgLCBgYmxrZGV2X2lvY3RsYCwgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kLCBvZiBjb3Vyc2UsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuXG5cbkhtbSwgaG9sZCBvbi4gQXJlbid0IGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgc3VwcG9zZWQgdG8gYmUgZXhwb3J0ZWQ/IExldCBtZSBqdXN0IGNvbmZpcm0uLi4gQWgsIGdvb2QsIGl0IGxvb2tzIGxpa2UgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgKmlzKiBleHBvcnRlZCwgYnV0IEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDoxNS41MDE2MzM0MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzI2NTk2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9tcGF0aF9lbmRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX252bWVfZW5kX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NC1cXHRpZiAocmVxLVxcdTAwM2VjbWRfZmxhZ3MgXFx1MDAyNiBSRVFfTlZNRV9NUEFUSClcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDY1OlxcdFxcdG52bWVfbXBhdGhfZW5kX3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2LX1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxNy1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoyMTg6dm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwODA9dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA4MTp2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA4Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTg5PXN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTEtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU0OjE2Ljk3NDMwMDMxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgyMjE0Mzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBOVk1lIE11bHRpLVBhdGhpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOVk1lIG11bHRpLXBhdGhpbmcgbW9kdWxlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgZXZlcnl0aGluZydzIGNvbm5lY3RlZC4gSXQgc2VlbXMgbGlrZSBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgaXNuJ3QgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgYml0IG9mIGEgc3VycHJpc2UsIGJ1dCBpdCdzICpub3QqIHN0YXRpYywgc28gaXQncyBjbGVhcmx5IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgICppcyogZXhwb3J0ZWQsIHdoaWNoIGNoYW5nZXMgdGhlIGR5bmFtaWMgYSBsaXR0bGUuXG5cblJpZ2h0LCBzbyB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIEknbGwgaW5jbHVkZSBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYXMgd2VsbCBhcyBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGBudm1lX2ZhaWxvdmVyX3JlcWAsIGFuZCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLiBUaG9zZSBsb29rIGxpa2Uga2V5IHBhcnRzIG9mIHRoZSByZXF1ZXN0IGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhhdCBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbj8gSSB0aG91Z2h0IHRoYXQgd2FzIHJlbGV2YW50LCBpdCdzIHN0YXRpYywgc28gaXQncyBub3QgZXhwb3J0ZWQuIEFoLCBub3cgSSByZW1lbWJlciwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gXG5cbkFoLCB5ZXMsIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdGhhdCBjYWxscyBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIHBhcnRpdGlvbiBoYW5kbGluZywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDozMC43OTY0NDcwODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEzMTk1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9kaXNrX2NoYW5nZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTcyNz1zdGF0aWMgaW50IGJsa2Rldl9nZXRfd2hvbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlKVxcbi0tXFxuYmxvY2svYmRldi5jLTczNy1cXHRcXHRcXHQgICAgIHRlc3RfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpKVxcbmJsb2NrL2JkZXYuYzo3Mzg6XFx0XFx0XFx0XFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgdHJ1ZSk7XFxuYmxvY2svYmRldi5jLTczOS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuYmxvY2svYmRldi5jLTc1MC1cXHRcXHQgKi9cXG5ibG9jay9iZGV2LmM6NzUxOlxcdFxcdHJldCA9IGJkZXZfZGlza19jaGFuZ2VkKGRpc2ssIGZhbHNlKTtcXG5ibG9jay9iZGV2LmMtNzUyLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9TVFJJQ1RfU0NBTikpIHtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTU4ND1zdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0NC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo2NDU6aW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNjQ2LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo3MTM6RVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxNC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQzOD1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NDItXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Rpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpcXHRyYyA9IGJkZXZfZGlza19jaGFuZ2VkKGxvLVxcdTAwM2Vsb19kaXNrLCBmYWxzZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDQ0LVxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Rpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTExMT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTU5LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjA6XFx0XFx0ZXJyID0gYmRldl9kaXNrX2NoYW5nZWQobG8tXFx1MDAzZWxvX2Rpc2ssIGZhbHNlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQ0ND1zdGF0aWMgdm9pZCB1YmxrX3BhcnRpdGlvbl9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0NTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI0NTk6XFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDYwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02ODU9c3RhdGljIHZvaWQgbnZtZV9wYXJ0aXRpb25fc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo2OTU6XFx0YmRldl9kaXNrX2NoYW5nZWQoaGVhZC1cXHUwMDNlZGlzaywgZmFsc2UpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5Ni1cXHRtdXRleF91bmxvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz0xNTk9aW50IGRhc2Rfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTczLVxcdG11dGV4X2xvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2VnZHAtXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM6MTc0OlxcdHJjID0gYmRldl9kaXNrX2NoYW5nZWQoYmxvY2stXFx1MDAzZWdkcCwgZmFsc2UpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTc1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jPTE5Nz12b2lkIGRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjA4LVxcdG11dGV4X2xvY2soXFx1MDAyNmZpbGVfYmRldihiZGV2X2ZpbGUpLVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jOjIwOTpcXHRiZGV2X2Rpc2tfY2hhbmdlZChmaWxlX2JkZXYoYmRldl9maWxlKS1cXHUwMDNlYmRfZGlzaywgdHJ1ZSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0yMTAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmaWxlX2JkZXYoYmRldl9maWxlKS1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTk3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X25yX3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTk3OC1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjk3OTppbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC05ODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU0OjMyLjI3Nzc3MjMxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAzMzQ1MTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb3JlIEJsb2NrIExheWVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgYmRldl9kaXNrX2NoYW5nZWRgIGxvb2tlZCBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCwgc2luY2UgaXQncyB1c2VkIGJ5IHNldmVyYWwgcHJvbWluZW50IGJsb2NrIGRyaXZlcnMgbGlrZSBgbG9vcGAsIGB1YmxrYCwgYW5kIGBudm1lYC4gRXhjZWxsZW50IGZvY3VzIHN5bWJvbC5cblxuQnV0IHRoZW4gSSBzYXcgdGhhdCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIC0geWVwLCBub24tc3RhdGljLiBTbyBJIG5lZWQgdG8gaW5jbHVkZSB0aGF0IHN5bWJvbCBhbG9uZyB3aXRoIGBiZGV2X2Rpc2tfY2hhbmdlZGAuXG5cbk5vdywgdGltZSB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZS4uLiBgQ09ORklHX05WTUVfTVVMVElQQVRIYCwgYENPTkZJR19OVk1FX1RBUkdFVF9MT09QYCwgYW5kIGBDT05GSUdfTlZNRV9DT1JFYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gQW55dGhpbmcgZWxzZSByZWxldmFudD8gQWgsIHllcywgYENPTkZJR19CTEtfREVWX05WTUVgIC0gdGhhdCdzIHRoZSBQQ0llIE5WTWUgZHJpdmVyIGl0c2VsZi4gVGhlIG90aGVycywgYENPTkZJR19OVk1FX1RBUkdFVGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAsIGFyZSBmb3IgdGhlIE5WTWUgbG9vcCB0YXJnZXQuIFNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIHdhbnQgdG8gaW5jbHVkZSBgTlZNRV9NVUxUSVBBVEhgLCBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgQkxLX0RFVl9OVk1FYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGVzZSBwYXRjaCB0b3VjaGVzIGBibG9jay9nZW5oZC5jYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCAtICpjb3JlKiBibG9jayBsYXllciBzdHVmZi4gVGhhdCBtZWFucyBgQkxPQ0tgIG11c3QgYmUgcmVxdWlyZWQsIGJ1dCB0aGF0J3MgYWx3YXlzIGVuYWJsZWQgc28gaXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBOVk1lIG11bHRpcGF0aCBjaGFuZ2VzIGFyZSBvYnZpb3VzbHkgdGllZCB0byBgTlZNRV9NVUxUSVBBVEhgLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBuZWVkZWQuIFNpbmNlIHRoZSBgYmRldl9kaXNrX2NoYW5nZWRgIGZ1bmN0aW9uIGlzIGFsc28gbmVlZGVkLCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSB0YWtlbiB0b28uXG5cblNvLCBJJ2xsIGFkZCBgTlZNRV9NVUxUSVBBVEhgLCBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgQkxLX0RFVl9OVk1FYC4gVGhhdCBmZWVscyByaWdodC4gTm93LCBsZXQgbWUgdmVyaWZ5IHRob3NlIGBOVk1FX1RBUkdFVGAgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTQ6NDMuMzExMjI2ODU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk0MDE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDo0NS4zMDUyNDc2MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NTgxMzczNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5bWJvbCBMaXN0IGZvciBOVk1lIE11bHRpcGF0aCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIHN5bWJvbCBsaXN0LiBGaXJzdCwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgdGhlIG9idmlvdXMgTlZNZSByZWxhdGVkIHN5bWJvbHM6IGBOVk1FX01VTFRJUEFUSGAsIGBOVk1FX1RBUkdFVF9MT09QYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBCTEtfREVWX05WTUVgLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBvbnRvIHRoZSBmdW5jdGlvbiBzeW1ib2xzLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoZSBhdmFpbGFiaWxpdHkgb2YgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYXMgd2VsbCBhcyBgbnZtZV9mYWlsb3Zlcl9yZXFgLiBJIGFsc28gY2hlY2tlZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGBkZXZpY2VfYWRkX2Rpc2tgIGFuZCBgYmxrZGV2X2lvY3RsYC5cblxuTm93LCB0aGUgdHJpY2sgaXMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBsaXN0IHdpdGggb3Zlcmx5IGdlbmVyaWMsIGhpZ2gtZnJlcXVlbmN5IFwiaG90IHBhdGhcIiBmdW5jdGlvbnMuIFNvLCBsZXQncyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZWlyIHJvbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjsgd2UgZG9uJ3Qgd2FudCB0aGUgZGlzdHJpYnV0aW9ucyBza2V3ZWQuXG5cbmBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgdGhlIGBzdWJtaXRfYmlvYCBjYWxsYmFjayBmb3IgdGhlIG11bHRpcGF0aCBoZWFkLiBBbmQgc2luY2UgaXQncyBhIGBzdWJtaXRfYmlvYCBjYWxsYmFjaywgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IElPIG9uIHRoZSBtdWx0aXBhdGggaGVhZCwgdGhhdCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24uXG5gbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCBhbmQgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgIGFyZSBjYWxsZWQgZm9yIGV2ZXJ5IHJlcXVlc3QsIGFuZCB0aGF0IGlzIGEgaG90LXBhdGguIFRoZXNlIGFyZSBvdXQuXG5cbmBudm1lX2ZhaWxvdmVyX3JlcWAgaXMgaW52b2tlZCBvbmx5IGR1cmluZyBmYWlsb3ZlciBldmVudHMuIFRoYXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc28gdGhhdCBzdGF5cy5cblxuYGRldmljZV9hZGRfZGlza2AgaXMgdHJpZ2dlcmVkIHdoZW4gYSBuZXcgZGlzayBpcyBhZGRlZCwgY2xlYXJseSBub3QgYSBob3QtcGF0aCBzaXR1YXRpb24uXG5cbmBiZGV2X2Rpc2tfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGR1cmluZyBhIHBhcnRpdGlvbiByZXNjYW4sIHdoaWNoIGlzbid0IGhpZ2gtZnJlcXVlbmN5IGVpdGhlci5cblxuYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBpcyBhbHNvIGR1cmluZyBwYXJ0aXRpb24gc2Nhbiwgc28gaXQgaXMgbm90IGhvdC1wYXRoLlxuXG5gYmxrZGV2X2lvY3RsYCBkZWFscyB3aXRoIGlvY3RscyBvbiBibG9jayBkZXZpY2VzLiBXaGlsZSBmcmVxdWVudCwgaXQncyBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGxpa2UgYHN1Ym1pdF9iaW9gLlxuXG5UaGVyZWZvcmUsIEknbGwgZHJvcCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgZnJvbSB0aGUgbGlzdC4gVGhlIGZpbmFsLCBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIEknbSBnb2luZyB3aXRoIGlzOlxuYG52bWVfZmFpbG92ZXJfcmVxYCwgYGRldmljZV9hZGRfZGlza2AsIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGFuZCBgYmxrZGV2X2lvY3RsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MDcuOTYzMzg3ODg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNDU1OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfZmFpbG92ZXJfcmVxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NzY9c3RhdGljIHZvaWQgX19udm1lX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxLVxcdGNhc2UgRkFJTE9WRVI6XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUwMjpcXHRcXHRudm1lX2ZhaWxvdmVyX3JlcShyZXEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTQ3PXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTU5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjE2MDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTYxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDYzPXZvaWQgbnZtZV9tcGF0aF9kZWZhdWx0X2lvcG9saWN5KHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA2NDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDY1LXZvaWQgbnZtZV9raWNrX3JlcXVldWVfbGlzdHMoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTExND1zdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9jdHJsX3VzZV9hbmEoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTExODpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjA5LjQ3NDg1NzE3MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTMxNzUzMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBlcmZvcm1hbmNlIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgbW9kaWZpZXMgYSBmZXcga2V5IGFyZWFzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGV5J3JlIG9uIHRoZSAqaG90LXBhdGgqLlxuXG5GaXJzdCwgYG52bWVfZmFpbG92ZXJfcmVxYC4gVGhhdCdzIHRyaWdnZXJlZCBkdXJpbmcgYSByZXF1ZXN0IGZhaWx1cmUgYW5kIHJldHJ5IG9uIGEgZGlmZmVyZW50IHBhdGguIE5vdCBleGFjdGx5IGEgY29yZSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBvbiB0aGUgaG90IHBhdGgsIGFuZCBub3QgYSBtYXNzaXZlIGNvbmNlcm4uXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgZGV2aWNlX2FkZF9kaXNrYCwgYGJkZXZfZGlza19jaGFuZ2VkYCwgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCwgYW5kIGBibGtkZXZfaW9jdGxgLiBUaGVzZSBhbGwgc2VlbSByZWxhdGVkIHRvIGRpc2sgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgYmUgZ29vZC4gQSBxdWljayBzY2FuIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlbid0IGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGNoZWNrX3BhcnRpdGlvbmAgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gSG1tLCBgY2hlY2tfcGFydGl0aW9uYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgY2FsbGVkIGJ5IGBibGtfYWRkX3BhcnRpdGlvbnNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBiZGV2X2Rpc2tfY2hhbmdlZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AuIEdvb2QsIHNvIHRoZSBsb2dpYyBjaGVja3Mgb3V0LiBTbywgbm8gYmlnIGRlYWwgYWJvdXQgdGhpcy5cblxuRmluYWxseSwgdGhlcmUncyBgZGlza3N0YXRzX3Nob3dgIGluIGBibG9jay9nZW5oZC5jYC4gSXQncyAqc3RhdGljKiBhbmQgdXNlZCBmb3IgYC9wcm9jL2Rpc2tzdGF0c2AuICBOb3QgYSBob3QtcGF0aCBzaXR1YXRpb24sIGJ1dCBtYXliZSBzb21ldGhpbmcgdG8gbm90ZSBpbiBhIGdlbmVyYWwgcGVyZm9ybWFuY2Ugb3ZlcnZpZXcsIGFsdGhvdWdoIEkgZG9uJ3QgdGhpbmsgaXQncyBhIHByaW9yaXR5LlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhhdCwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuKiAgIGBkZXZpY2VfYWRkX2Rpc2tgXG4qICAgYGJkZXZfZGlza19jaGFuZ2VkYFxuKiAgIGBkaXNrX3NjYW5fcGFydGl0aW9uc2BcbiogICBgYmxrZGV2X2lvY3RsYFxuKiAgIGBudm1lX2ZhaWxvdmVyX3JlcWBcblxuQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczpcbiogICBgTlZNRV9NVUxUSVBBVEhgXG4qICAgYE5WTUVfVEFSR0VUX0xPT1BgXG4qICAgYE5WTUVfVEFSR0VUYFxuKiAgIGBCTEtfREVWX05WTUVgXG5cbkZyb20gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGVuYWJsaW5nIHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgaW4gdGhlIGJsb2NrIGxheWVyLCB3aGljaCBwcmltYXJpbHkgbWF0dGVycyBmb3IgTlZNZSBtdWx0aXBhdGguIEl0IGluY2x1ZGVzIHVwZGF0ZXMgdG8gTlZNZSBtdWx0aXBhdGggdG8gaGFuZGxlIEkvTyBhbmQgZmFpbG92ZXIgY29ycmVjdGx5IGZvciBwYXJ0aXRpb25zIG9uIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhpcyBpcyBtb3N0bHkgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IHRvIGV4aXN0aW5nIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciB0ZXN0aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBOVk1lIGxvb3BiYWNrIHRhcmdldHMuXG5cbk9rYXksIHRoYXQncyBteSBhbmFseXNpcy4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNiwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MTguNjA2NjE0Njg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MjI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfTVVMVElQQVRIXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2FkZF9kaXNrXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwiZGlza19zY2FuX3BhcnRpdGlvbnNcIixcbiAgICBcImJsa2Rldl9pb2N0bFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfTVVMVElQQVRIXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2FkZF9kaXNrXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwiZGlza19zY2FuX3BhcnRpdGlvbnNcIixcbiAgICBcImJsa2Rldl9pb2N0bFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NToxOC42ODQwNDUyMTRaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDk0NzAyMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MTguNjg0NTcyMjI0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4NDk0MTcxMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4M2E5MDc5ODgzNmY0YjdkNWE0NzM4YzhjYzU1NjJiYWVmMmFjMjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbisrKyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MDYsMTUgKzQwNiwxNSBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gZGlza190b19kZXYoZGlzayk7XG4gXG4tXHRpZiAoIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0aGUgZmlyc3QgcGFydGl0aW9uIHNjYW4gd2lsbCBiZSBwcm9jZWVkICovXG4tXHRcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuLVx0XHRcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuK1x0LyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbitcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuK1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiBcbi1cdFx0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbi1cdFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSlcbi1cdFx0XHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcbitcdGJkZXZfYWRkKGRpc2stXHUwMDNlcGFydDAsIGRkZXYtXHUwMDNlZGV2dCk7XG4rXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuK1x0XHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcbiBcbitcdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcbiBcdFx0LypcbiBcdFx0ICogQW5ub3VuY2UgdGhlIGRpc2sgYW5kIHBhcnRpdGlvbnMgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgYXJlXG4gXHRcdCAqIGNyZWF0ZWQuIChmb3IgaGlkZGVuIGRpc2tzIHVldmVudHMgcmVtYWluIHN1cHByZXNzZWQgZm9yZXZlcilcbkBAIC00OTEsOCArNDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRkZXZfc2V0X25hbWUoZGRldiwgXCIlc1wiLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4gXHRpZiAoZndub2RlKVxuIFx0XHRkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTtcbi1cdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG4tXHRcdGRkZXYtXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXHUwMDNlbWFqb3IsIGRpc2stXHUwMDNlZmlyc3RfbWlub3IpO1xuK1x0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4gXHRyZXQgPSBkZXZpY2VfYWRkKGRkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9leHRfbWlub3I7XG5AQCAtMTM2OCw3ICsxMzY3LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZncC1cdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xuLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNiAhYmRldl9ucl9zZWN0b3JzKGhkKSlcbitcdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTE1Miw3ICsxNTIsOCBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFxuIFx0fVxuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuLVx0XHRwcmludGsoS0VSTl9JTkZPIFwiJXNcIiwgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4rXHRcdGlmICghKGhkLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxuK1x0XHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbiBcbiBcdFx0a2ZyZWUoc3RhdGUtXHUwMDNlcHBfYnVmLmJ1ZmZlcik7XG4gXHRcdHJldHVybiBzdGF0ZTtcbkBAIC0xNjQsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcbiBcdCAqL1xuIFx0aWYgKGVycilcbiBcdFx0cmVzID0gZXJyO1xuLVx0aWYgKHJlcykge1xuK1x0aWYgKHJlcyBcdTAwMjZcdTAwMjYgIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLFxuIFx0XHRcdCAgICAgXCIgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXFxuXCIpO1xuIFx0XHRwcmludGsoS0VSTl9JTkZPIFwiJXNcIiwgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xODA4LDEwICsxODA4LDYgQEAgc3RhdGljIHZvaWQgbnZtZV9lbmFibGVfYWVuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4gXG4gc3RhdGljIGludCBudm1lX25zX29wZW4oc3RydWN0IG52bWVfbnMgKm5zKVxuIHtcbi1cbi1cdC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZHVlIHRvIEdFTkhEX0ZMX0hJRERFTiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRShudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLVx1MDAzZWhlYWQpKSlcbi1cdFx0Z290byBmYWlsO1xuIFx0aWYgKCFudm1lX2dldF9ucyhucykpXG4gXHRcdGdvdG8gZmFpbDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQobnMtXHUwMDNlY3RybC1cdTAwM2VvcHMtXHUwMDNlbW9kdWxlKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5AQCAtMTQ0LDYgKzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbitcbitcdC8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqL1xuK1x0aWYgKCFwYXJ0bm8pXG4rXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0YmRldiA9IHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGJkZXY7XG4rfVxuK1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggKzE3OCwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuLVx0Zm9yIChiaW8gPSByZXEtXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cdTAwM2ViaV9uZXh0KVxuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0YmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKSk7XG4rXHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCArMjA5LDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcbi1cdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4tXHRcdFx0XHRcdFx0ICAgICAgamlmZmllcyk7XG4rXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcbitcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksXG4rXHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgKzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXG4gXHRpZiAoIShudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfTVBBVEhfSU9fU1RBVFMpKVxuIFx0XHRyZXR1cm47XG4tXHRiZGV2X2VuZF9pb19hY2N0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbitcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuK1x0XHRcdCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksIHJlcV9vcChycSksXG4gXHRcdFx0IGJsa19ycV9ieXRlcyhycSkgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCxcbiBcdFx0XHQgbnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUpO1xuIH1cbkBAIC01NDksNyArNTY2LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZoZWFkLVx1MDAzZXNyY3UpO1xuIFx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcbiBcdGlmIChsaWtlbHkobnMpKSB7XG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlZGlzayxcbitcdFx0XHRcdGJkZXZfcGFydG5vKGJpby1cdTAwM2ViaV9iZGV2KSkpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cbiBcdFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggOTIxM2E1NzE2Zjk1YS4uYTI3MGNmMTM5NGM3YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoR0VOSERfRkxfTk9fUEFSVCB8IEdFTkhEX0ZMX0hJRERFTikpIFx1MDAyNlx1MDAyNlxuK1x0cmV0dXJuICEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfTk9fUEFSVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCF0ZXN0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjE4LjY4NDU3MzE5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5NDE0ODU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHRvdWNoZXMgdGhlIGJsb2NrIGxheWVyIChzcGVjaWZpY2FsbHkgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgKSBhbmQgdGhlIE5WTWUgbXVsdGlwYXRoIGNvZGUgKGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgKSwgaXNuJ3QgbGlrZWx5IHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LlxuXG5UaGUgcHJpbWFyeSBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgXCJoaWRkZW5cIiBkaXNrcywgaWRlbnRpZmllZCBieSB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZy4gV2UncmUgc2VlaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCBhZmZlY3QgcGFydGl0aW9uIHNjYW5uaW5nLCBkZXZpY2UgYXNzaWdubWVudCwgYW5kIG91dHB1dCBzdXBwcmVzc2lvbiByZWxhdGVkIHRvIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhlIGtleSBjaGFuZ2VzIGFyZTpcblxuKiAgIEluIGBibG9jay9nZW5oZC5jYCwgdGhlIGBhZGRfZGlza19maW5hbGAgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gKmVuYWJsZSogcGFydGl0aW9uIHNjYW5zIGV2ZW4gZm9yIGhpZGRlbiBkaXNrcywgdGhvdWdoIHVldmVudHMgYXJlIHN0aWxsIHN1cHByZXNzZWQuIEl0IHNlZW1zIHRoZSBwYXJ0aXRpb24gc2Nhbm5pbmcgY29kZSBwYXRoIGlzIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGEgbmV3IGNvZGUgcGF0aCBmb3IgaGlkZGVuIHBhcnRpdGlvbnNcbiogICBgX19hZGRfZGlza2AgaXMgdXBkYXRlZCB0byB1bmNvbmRpdGlvbmFsbHkgYXNzaWduIGBkZGV2LVx1MDAzZWRldnRgLCBldmVuIGZvciBoaWRkZW4gZGlza3MuXG4qICAgYGRpc2tzdGF0c19zaG93YCBpcyBsb2dpYyBoYXMgY2hhbmdlZCBpbiB0aGUgY29uZGl0aW9uYWwgbG9naWMgd2hpY2ggbWF5IG9yIG1heSBub3QgaW5jbHVkZSBoaWRkZW4gcGFydGl0aW9uc1xuKiAgIGBjaGVja19wYXJ0aXRpb25gIG5vdyBzdXBwcmVzc2VzIHByaW50aW5nIG9mIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgaGlkZGVuIGRpc2tzLlxuKiAgIGBudm1lX25zX29wZW5gIHJlbW92ZXMgYSBgV0FSTl9PTl9PTkNFYCBmb3IgYSBtdWx0aXBhdGggY29uZGl0aW9uLlxuKiAgIFNldmVyYWwgTlZNZSBtdWx0aXBhdGggZnVuY3Rpb25zIChgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gKSBub3cgdXNlIGBudm1lX3RvX2Rpc2tfcGFydGAgdG8gbG9vayB1cCBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgc29sZWx5IG9uIGBkaXNrLVx1MDAzZXBhcnQwYC5cbiogICBgZGlza19oYXNfcGFydHNjYW5gIG5vdyByZW1vdmVzIHRoZSBgR0VOSERfRkxfSElEREVOYCBmbGFnIGZyb20gdGhlIGNvbmRpdGlvbi5cblxuSeKAmW0gY2FyZWZ1bGx5IGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHJlZG9taW5hbnRseSBsb2dpYy1iYXNlZC4gVGhlcmUncyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBhIHJpc2t5IHdheS4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBsb29rdXAgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24gZmxhZ3MuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYG52bWVfdG9fZGlza19wYXJ0YCBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXG57XG5cdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG5cblx0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG5cdGlmICghcGFydG5vKVxuXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuXHRyY3VfcmVhZF9sb2NrKCk7XG5cdGJkZXYgPSB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG5cdHJjdV9yZWFkX3VubG9jaygpO1xuXHRyZXR1cm4gYmRldjtcbn1cbmBgYFxuXG5UaGlzIGZ1bmN0aW9uIHNpbXBseSB1c2VzIGFuIHhhcnJheSAoYHhhX2xvYWRgKSB0byByZXRyaWV2ZSBhIGJsb2NrIGRldmljZSBwb2ludGVyLiBJdCBkb2VzbuKAmXQgY3JlYXRlIGFueSBtZW1vcnkgb3IgcmVhZCBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGEgbG9va3VwIGFuZCBub3QgaW5pdGlhbGl6YXRpb24uXG5cbkxldCdzIGNoZWNrIGBkaXNrc3RhdHNfc2hvd2A6XG5cbmBgYGNcbnhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG5cdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG5cdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpKVxuXHRcdGNvbnRpbnVlO1xuYGBgXG5cblRoaXMgYWdhaW4ganVzdCBpcyBhIGxvZ2ljIGNoYW5nZS5cblxuTGV0J3MgY2hlY2sgYGFkZF9kaXNrX2ZpbmFsYDpcblxuYGBgY1xuLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbmlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcblxuYmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbmlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG5cdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuXG5pZiAoIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG5gYGBcblxuVGhpcyBtb3ZlcyB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgY2hlY2sgZG93biwgdG8gZW5zdXJlIHRoYXQgcGFydGl0aW9uIHNjYW5uaW5nIGNhbiBvY2N1ciBmb3IgaGlkZGVuIGRpc2tzLlxuXG5MZXQncyBjaGVjayBgX19hZGRfZGlza2A6XG5cbmBgYGNcbmRkZXYtXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXHUwMDNlbWFqb3IsIGRpc2stXHUwMDNlZmlyc3RfbWlub3IpO1xuYGBgXG5cblRoaXMgdW5jb25kaXRpb25hbGx5IGFzc2lnbnMgdGhlIGBkZXZ0YC5cblxuTGV0J3MgY2hlY2sgYGNoZWNrX3BhcnRpdGlvbmA6XG5cbmBgYGNcbmlmIChyZXMgXHUwMDNlIDApIHtcblx0aWYgKCEoaGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG5cdFx0cHJpbnRrKEtFUk5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjEsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjM3LjE3ODcyNTE1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzk6j9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 14:21:07 +0000 UTC FinishedAt: 2026-08-18 14:55:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f1a8846e06388113dfdbb89dee005083fa9afdf9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_MULTIPATH", "NVME_TARGET_LOOP", "NVME_TARGET", "BLK_DEV_NVME" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f1a8846e06388113dfdbb89dee005083fa9afdf9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_MULTIPATH", "NVME_TARGET_LOOP", "NVME_TARGET", "BLK_DEV_NVME" ], "series_id": "a2036541-68a8-4ea4-95be-728a792efb7d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "device_add_disk", "bdev_disk_changed", "disk_scan_partitions", "blkdev_ioctl", "nvme_failover_req" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MDYsMTUgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spO1xuIFxuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuLVx0XHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuLVx0XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFx1MDAyNlx1MDAyNiBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSlcbi1cdFx0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuJiM0MztcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuJiM0MztcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4gXG4tXHRcdGJkZXZfYWRkKGRpc2stXHUwMDNlcGFydDAsIGRkZXYtXHUwMDNlZGV2dCk7XG4tXHRcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG4tXHRcdFx0ZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7XG4mIzQzO1x0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbiYjNDM7XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuJiM0MztcdFx0ZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7XG4gXG4mIzQzO1x0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcbiBcdFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxuQEAgLTQ5MSw4ICYjNDM7NDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRkZXZfc2V0X25hbWUoZGRldiwgXCYjMzQ7JXNcJiMzNDssIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbiBcdGlmIChmd25vZGUpXG4gXHRcdGRldmljZV9zZXRfbm9kZShkZGV2LCBmd25vZGUpO1xuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbi1cdFx0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4mIzQzO1x0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4gXHRyZXQgPSBkZXZpY2VfYWRkKGRkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9leHRfbWlub3I7XG5AQCAtMTM2OCw3ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyBpbnQgZGlza3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXFmLCB2b2lkICp2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2Z3AtXHUwMDNlcGFydF90YmwsIGlkeCwgaGQpIHtcbi1cdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjYgIWJkZXZfbnJfc2VjdG9ycyhoZCkpXG4mIzQzO1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTE1Miw3ICYjNDM7MTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcbiBcbiBcdH1cbiBcdGlmIChyZXMgXHUwMDNlIDApIHtcbi1cdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslc1wmIzM0Oywgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4mIzQzO1x0XHRpZiAoIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbiYjNDM7XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslc1wmIzM0Oywgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4gXG4gXHRcdGtmcmVlKHN0YXRlLVx1MDAzZXBwX2J1Zi5idWZmZXIpO1xuIFx0XHRyZXR1cm4gc3RhdGU7XG5AQCAtMTY0LDcgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFx0ICovXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXMgPSBlcnI7XG4tXHRpZiAocmVzKSB7XG4mIzQzO1x0aWYgKHJlcyBcdTAwMjZcdTAwMjYgIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLFxuIFx0XHRcdCAgICAgXCYjMzQ7IHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZVxcblwmIzM0Oyk7XG4gXHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7JXNcJiMzNDssIHNlcV9idWZfc3RyKFx1MDAyNnN0YXRlLVx1MDAzZXBwX2J1ZikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggMTMyMmM2NzhmNGViOC4uZWQyMWY0ZWYzNmM5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtMTgwOCwxMCAmIzQzOzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4ge1xuLVxuLVx0Lyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXHUwMDNlaGVhZCkpKVxuLVx0XHRnb3RvIGZhaWw7XG4gXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcbiBcdFx0Z290byBmYWlsO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChucy1cdTAwM2VjdHJsLVx1MDAzZW9wcy1cdTAwM2Vtb2R1bGUpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbmluZGV4IDc1ZGJiNTgyODZhMzIuLjVjOTVhMmFiNzc1NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbiYjNDM7XG4mIzQzO1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4mIzQzO1x0aWYgKCFwYXJ0bm8pXG4mIzQzO1x0XHRyZXR1cm4gZGlzay1cdTAwM2VwYXJ0MDtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0YmRldiA9IHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRyZXR1cm4gYmRldjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4ge1xuIFx0c3RydWN0IG52bWVfbnMgKm5zID0gcmVxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuQEAgLTE2NSw4ICYjNDM7MTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbiYjNDM7XHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuJiM0MztcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbiYjNDM7XHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCAmIzQzOzIwOSw5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnZtZV9yZXEocnEpLVx1MDAzZWZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7XG4tXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuLVx0XHRcdFx0XHRcdCAgICAgIGppZmZpZXMpO1xuJiM0MztcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuJiM0MztcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksXG4mIzQzO1x0XHRcdHJlcV9vcChycSksIGppZmZpZXMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xuIFxuQEAgLTIwOCw3ICYjNDM7MjI0LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuJiM0MztcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuJiM0MztcdFx0XHQgYmRldl9wYXJ0bm8ocnEtXHUwMDNlcGFydCkpLCByZXFfb3AocnEpLFxuIFx0XHRcdCBibGtfcnFfYnl0ZXMocnEpIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQsXG4gXHRcdFx0IG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lKTtcbiB9XG5AQCAtNTQ5LDcgJiM0Mzs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4gXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuIFx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlZGlzayxcbiYjNDM7XHRcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoR0VOSERfRkxfTk9fUEFSVCB8IEdFTkhEX0ZMX0hJRERFTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdHJldHVybiAhKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX05PX1BBUlQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhdGVzdF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDMwYWMwZmZlNjUxNzQuLjA1MzAxZWU1ZDRjYTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuYwpAQCAtNDA2LDE1ICYjNDM7NDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewogCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTsKIAotCWlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKLQkJLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KLQkJaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQotCQkJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiYjNDM7CS8qIE1ha2Ugc3VyZSB0aGUgZmlyc3QgcGFydGl0aW9uIHNjYW4gd2lsbCBiZSBwcm9jZWVkICovCiYjNDM7CWlmIChnZXRfY2FwYWNpdHkoZGlzaykgJmFtcDsmYW1wOyBkaXNrX2hhc19wYXJ0c2NhbihkaXNrKSkKJiM0MzsJCXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogCi0JCWJkZXZfYWRkKGRpc2stJmd0O3BhcnQwLCBkZGV2LSZndDtkZXZ0KTsKLQkJaWYgKGdldF9jYXBhY2l0eShkaXNrKSkKLQkJCWRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpOwomIzQzOwliZGV2X2FkZChkaXNrLSZndDtwYXJ0MCwgZGRldi0mZ3Q7ZGV2dCk7CiYjNDM7CWlmIChnZXRfY2FwYWNpdHkoZGlzaykpCiYjNDM7CQlkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTsKIAomIzQzOwlpZiAoIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSB7CiAJCS8qCiAJCSAqIEFubm91bmNlIHRoZSBkaXNrIGFuZCBwYXJ0aXRpb25zIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGFyZQogCQkgKiBjcmVhdGVkLiAoZm9yIGhpZGRlbiBkaXNrcyB1ZXZlbnRzIHJlbWFpbiBzdXBwcmVzc2VkIGZvcmV2ZXIpCkBAIC00OTEsOCAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWRldl9zZXRfbmFtZShkZGV2LCAmIzM0OyVzJiMzNDssIGRpc2stJmd0O2Rpc2tfbmFtZSk7CiAJaWYgKGZ3bm9kZSkKIAkJZGV2aWNlX3NldF9ub2RlKGRkZXYsIGZ3bm9kZSk7Ci0JaWYgKCEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKLQkJZGRldi0mZ3Q7ZGV2dCA9IE1LREVWKGRpc2stJmd0O21ham9yLCBkaXNrLSZndDtmaXJzdF9taW5vcik7CiYjNDM7CWRkZXYtJmd0O2RldnQgPSBNS0RFVihkaXNrLSZndDttYWpvciwgZGlzay0mZ3Q7Zmlyc3RfbWlub3IpOwogCXJldCA9IGRldmljZV9hZGQoZGRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9leHRfbWlub3I7CkBAIC0xMzY4LDcgJiM0MzsxMzY3LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJeGFfZm9yX2VhY2goJmFtcDtncC0mZ3Q7cGFydF90YmwsIGlkeCwgaGQpIHsKLQkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7ICFiZGV2X25yX3NlY3RvcnMoaGQpKQomIzQzOwkJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7CmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmE0ODg5NmM2Yzc5MWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jCkBAIC0xNTIsNyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpCiAKIAl9CiAJaWYgKHJlcyAmZ3Q7IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAmIzM0OyVzJiMzNDssIHNlcV9idWZfc3RyKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZikpOwomIzQzOwkJaWYgKCEoaGQtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpCiYjNDM7CQkJcHJpbnRrKEtFUk5fSU5GTyAmIzM0OyVzJiMzNDssIHNlcV9idWZfc3RyKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZikpOwogCiAJCWtmcmVlKHN0YXRlLSZndDtwcF9idWYuYnVmZmVyKTsKIAkJcmV0dXJuIHN0YXRlOwpAQCAtMTY0LDcgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKQogCSAqLwogCWlmIChlcnIpCiAJCXJlcyA9IGVycjsKLQlpZiAocmVzKSB7CiYjNDM7CWlmIChyZXMgJmFtcDsmYW1wOyAhKGhkLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSB7CiAJCXNlcV9idWZfcHV0cygmYW1wO3N0YXRlLSZndDtwcF9idWYsCiAJCQkgICAgICYjMzQ7IHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZVxuJiMzNDspOwogCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggMTMyMmM2NzhmNGViOC4uZWQyMWY0ZWYzNmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMTgwOCwxMCAmIzQzOzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybCkKIAogc3RhdGljIGludCBudm1lX25zX29wZW4oc3RydWN0IG52bWVfbnMgKm5zKQogewotCi0JLyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovCi0JaWYgKFdBUk5fT05fT05DRShudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKSkpCi0JCWdvdG8gZmFpbDsKIAlpZiAoIW52bWVfZ2V0X25zKG5zKSkKIAkJZ290byBmYWlsOwogCWlmICghdHJ5X21vZHVsZV9nZXQobnMtJmd0O2N0cmwtJmd0O29wcy0mZ3Q7bW9kdWxlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKaW5kZXggNzVkYmI1ODI4NmEzMi4uNWM5NWEyYWI3NzU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDE5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpCiAJCQlibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCiYjNDM7CWlmICghcGFydG5vKQomIzQzOwkJcmV0dXJuIGRpc2stJmd0O3BhcnQwOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWJkZXYgPSB4YV9sb2FkKCZhbXA7ZGlzay0mZ3Q7cGFydF90YmwsIHBhcnRubyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gYmRldjsKJiM0Mzt9CiYjNDM7CiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG52bWVfbnMgKm5zID0gcmVxLSZndDtxLSZndDtxdWV1ZWRhdGE7CkBAIC0xNjUsOCAmIzQzOzE3OCwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7Ci0JZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpCi0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJZm9yIChiaW8gPSByZXEtJmd0O2JpbzsgYmlvOyBiaW8gPSBiaW8tJmd0O2JpX25leHQpIHsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJYmRldl9wYXJ0bm8oYmlvLSZndDtiaV9iZGV2KSkpOwomIzQzOwl9CiAJYmxrX3N0ZWFsX2Jpb3MoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9saXN0LCByZXEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtucy0mZ3Q7aGVhZC0mZ3Q7cmVxdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCw4ICYjNDM7MjA5LDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCQlyZXR1cm47CiAKIAludm1lX3JlcShycSktJmd0O2ZsYWdzIHw9IE5WTUVfTVBBVEhfSU9fU1RBVFM7Ci0JbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAotCQkJCQkJICAgICAgamlmZmllcyk7CiYjNDM7CW52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdCgKJiM0MzsJCQludm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS0mZ3Q7cGFydCkpLAomIzQzOwkJCXJlcV9vcChycSksIGppZmZpZXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTsKIApAQCAtMjA4LDcgJiM0MzsyMjQsOCBAQCB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogCiAJaWYgKCEobnZtZV9yZXEocnEpLSZndDtmbGFncyAmYW1wOyBOVk1FX01QQVRIX0lPX1NUQVRTKSkKIAkJcmV0dXJuOwotCWJkZXZfZW5kX2lvX2FjY3QobnMtJmd0O2hlYWQtJmd0O2Rpc2stJmd0O3BhcnQwLCByZXFfb3AocnEpLAomIzQzOwliZGV2X2VuZF9pb19hY2N0KG52bWVfdG9fZGlza19wYXJ0KG5zLSZndDtoZWFkLSZndDtkaXNrLAomIzQzOwkJCSBiZGV2X3BhcnRubyhycS0mZ3Q7cGFydCkpLCByZXFfb3AocnEpLAogCQkJIGJsa19ycV9ieXRlcyhycSkgJmd0OyZndDsgU0VDVE9SX1NISUZULAogCQkJIG52bWVfcmVxKHJxKS0mZ3Q7c3RhcnRfdGltZSk7CiB9CkBAIC01NDksNyAmIzQzOzU2Niw5IEBAIHN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbykKIAlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7aGVhZC0mZ3Q7c3JjdSk7CiAJbnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTsKIAlpZiAobGlrZWx5KG5zKSkgewotCQliaW9fc2V0X2RldihiaW8sIG5zLSZndDtkaXNrLSZndDtwYXJ0MCk7CiYjNDM7CQliaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLSZndDtkaXNrLAomIzQzOwkJCQliZGV2X3BhcnRubyhiaW8tJmd0O2JpX2JkZXYpKSk7CiYjNDM7CiAJCS8qCiAJCSAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpbwogCQkgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggOTIxM2E1NzE2Zjk1YS4uYTI3MGNmMTM5NGM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpc2tfb3BlbmVycyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKICAqLwogc3RhdGljIGlubGluZSBib29sIGRpc2tfaGFzX3BhcnRzY2FuKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXJldHVybiAhKGRpc2stJmd0O2ZsYWdzICZhbXA7IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgJmFtcDsmYW1wOwomIzQzOwlyZXR1cm4gIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9OT19QQVJUKSAmYW1wOyZhbXA7CiAJCSF0ZXN0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhczogYGJsb2NrL2dlbmhkLmNgLCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLCBhbmQgdGhlIE5WTWUgZHJpdmVyIGNvZGUgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSAmIzM0O2hpZGRlbiYjMzQ7IGRpc2tzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZmxhZ2dlZCB3aXRoIGBHRU5IRF9GTF9ISURERU5gLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBwYXJ0aXRpb24gc2Nhbm5pbmcgZm9yIGhpZGRlbiBkaXNrcy4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IHByZXZlbnRlZCBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGUgYGJkZXZfYWRkYCBhbmQgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZy4gV2UgYWxzbyBjaGFuZ2UgYGRpc2tfaGFzX3BhcnRzY2FuYCB0byBub3QgY2hlY2sgYEdFTkhEX0ZMX0hJRERFTmAuIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaGlkZGVuIGRpc2tzICpjYW4qIG5vdyBoYXZlIHBhcnRpdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgcHJldHR5IGNsZWFyLCB3ZSBzaG91bGQgYmUgYXdhcmUgb2YgYWxsIHBhcnRpdGlvbnMsIGV2ZW4gb25lcyB0aGF0IHdlIGRvbiYjMzk7dCB3YW50IHRvIHVzZSBkaXJlY3RseSwgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIGRpc2suCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbXBhY3Qgb24gTlZNZSBtdWx0aXBhdGguIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBwYXkgY2xvc2VyIGF0dGVudGlvbi4gVGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBzZWVtIHRvIGFkYXB0IHNldmVyYWwgTlZNZSBmdW5jdGlvbnMgbGlrZSBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIG90aGVycyB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgcGFydGl0aW9ucyBvbiB0aGVzZSBwcmV2aW91c2x5IGhpZGRlbiBOVk1lIGRpc2tzLiBIb2xkIG9uLCB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZyBpcyB1c2VkIGluIE5WTWUgbXVsdGlwYXRoLiBUaGlzIG1lYW5zIGEgY2hhbmdlIGluIGJlaGF2aW9yLCB3aGljaCBtYWtlcyBtZSB0aGluayBvZiBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVhY2hhYmxlIHVzaW5nIHRoZSBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTlZNZSBpcyByZWFjaGFibGUsIGV2ZW4gd2l0aCBRRU1VLCBzaW5jZSB0aGVyZSBhcmUgbG9vcGJhY2sgYW5kIFFFTVUgTlZNZSBkZXZpY2VzLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhlIE5WTWUgbG9vcCB0YXJnZXQgZm9yIHRlc3RpbmcgTlZNZSBtdWx0aXBhdGguIFRpbWUgdG8gY2hlY2sgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTc6Y29uZmlnIE5WTUVfTVVMVElQQVRIXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtOVk1lIG11bHRpcGF0aCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5WTWUgVGFyZ2V0IExvb3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLiBSaWdodCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIGZldyBrZXkgYXNwZWN0czogZmlyc3QsIGlzIHRoaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlbiwgd2hhdCBsZXZlbCBvZiBjb250cm9sIGRvZXMgdGhpcyBvcHRpb24gb2ZmZXI/IElzIGl0IGEgY29tcGlsZS10aW1lIGRpcmVjdGl2ZSwgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgYm90aD8KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmU6IHdoYXQgZXhhY3RseSAqaXMqIHRoZSAmIzM0O05WTWUgdGFyZ2V0IGxvb3AmIzM0Oz8gSXMgaXQgcmVmZXJyaW5nIHRvIHRoZSBzb2Z0d2FyZSBzaWRlIG9mIGFuIE5WTWUgdGFyZ2V0IGVtdWxhdG9yIG9yIGlzIHRoZXJlIGFub3RoZXIgbnVhbmNlIEkmIzM5O20gbWlzc2luZz8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBOVk1lIHRhcmdldCBmZWF0dXJlcy4gSXMgdGhpcyBqdXN0IGEgdGVzdCBzZXR1cCwgb3IgaXMgaXQgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcyBpbiBpbnZlc3RpZ2F0aW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVRfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc9Mjk9Y29uZmlnIE5WTUVfVEFSR0VUX1BBU1NUSFJVXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjQxOmNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYE5WTUVfTVVMVElQQVRIYC4gQmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBtZW50YWwgaW52ZW50b3J5IG9mIHdoYXQgdGhpcyBpcyAqYWN0dWFsbHkqIHJlbHlpbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN0b3JhZ2Ugc3RhY2suIElzIGl0IHRpZWQgZGlyZWN0bHkgdG8gc3BlY2lmaWMgTlZNZSBjb250cm9sbGVyIGRyaXZlcnM/IEFyZSB0aGVyZSBrZXJuZWwgZmVhdHVyZXMgbGlrZSBkZXZpY2UgbWFwcGVyIG9yIG11bHRpcGF0aGQgdGhhdCBpdCBsZXZlcmFnZXM/IEkgaGF2ZSB0byBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgbGF5ZXJzIGhlcmUsIG90aGVyd2lzZSwgSSYjMzk7bSBqdXN0IHBva2luZyBhcm91bmQgaW4gdGhlIGRhcmsuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgc3R1ZmYgZmlyc3QuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBOVk1lIGNvbW1hbmRzIG9yIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBlc3NlbnRpYWwgZm9yIG11bHRpcGF0aGluZyB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRlcGVuZHMgb24/IEFuZCB0aGVuIHdoYXQgYWJvdXQgdGhlIGhpZ2hlciBsZXZlbD8gSXMgaXQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLWhlYXZ5LCBvciBtb3JlIGtlcm5lbC1kcml2ZW4sIHJlcXVpcmluZyBjZXJ0YWluIG1vZHVsZSBidWlsZHMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncz8gSSBjYW4gYWxtb3N0IHNlZSB0aGUgY29kZSBzdHJ1Y3R1cmUsIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHRoZSBpbmNsdWRlIGRpcmVjdGl2ZXMgYWxyZWFkeS4gSSB3aWxsIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgYWxsIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qTlZNRV9NVUxUSVBBVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVk1lIEhvc3QgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBOVk1lIGhvc3QgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYXJvdW5kIGxpbmUgMTcsIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ3VhcmRlZCBieSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucywgaG93IHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIG1vZHVsZXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGV4cGxvcmUgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBrbm9icyBhdmFpbGFibGUgZm9yIHRoaXMgTlZNZSBob3N0IGNvbnRyb2xsZXIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXImIzM5O3MgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGl0JiMzOTtzIGludGVuZGVkIHRvIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTA6XHRcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XG4gIDExOlx0XHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxuICAxMjpcdFx0ICBkb24mIzM5O3QgaGF2ZSBvbmUgb2YgdGhlc2UsIGl0IGlzIHNhZmUgdG8gYW5zd2VyIE4uXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnZtZS5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTlZNRV9NVUxUSVBBVEhcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBOVk1FX0NPUkVcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgVGhpcyBvcHRpb24gY29udHJvbHMgc3VwcG9ydCBmb3IgbXVsdGlwYXRoIGFjY2VzcyB0byBOVk1lXG4gIDIyOlx0XHQgIHN1YnN5c3RlbXMuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgc3VwcG9ydCBmb3IgTlZNZSBtdWx0aXBhdGhcbiAgMjM6XHRcdCAgYWNjZXNzIGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIHN1cHBvcnRcbiAgMjQ6XHRcdCAgZm9yIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpcyBleGNsdWRlZCBmcm9tIHRoZSBrZXJuZWwuIFdoZW4gdGhpc1xuICAyNTpcdFx0ICBvcHRpb24gaXMgZGlzYWJsZWQgZWFjaCBjb250cm9sbGVyL25hbWVzcGFjZSByZWNlaXZlcyBpdHNcbiAgMjY6XHRcdCAgb3duIC9kZXYvbnZtZVhuWSBkZXZpY2UgZW50cnkgYW5kIE5WTWUgbXVsdGlwYXRoIGFjY2VzcyBpc1xuICAyNzpcdFx0ICBub3Qgc3VwcG9ydGVkLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5WTWUgTXVsdGlwYXRoIGFuZCBQYXJ0aXRpb24gSGFuZGxpbmc6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGBOVk1FX01VTFRJUEFUSGAgZnVuY3Rpb25hbGl0eSBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgTlZNRV9DT1JFYCDigJMgdGhhdCBtYWtlcyBzZW5zZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBoaXR0aW5nIHNvbWUgY29yZSBibG9jayBsYXllciBmaWxlczogYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBob3cgZGlza3MgYW5kIHBhcnRpdGlvbnMgYXJlIGhhbmRsZWQuICBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgTlZNZSBkcml2ZXIgaXRzZWxmIHdpdGggYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYWJvdXQgZW5hYmxpbmcgcGFydGl0aW9ucyBvbiB3aGF0IEkmIzM5O20gZ3Vlc3NpbmcgYXJlICYjMzQ7aGlkZGVuJiMzNDsgZGlza3MsIGxpa2VseSB1c2VkIGluIGFuIE5WTWUgbXVsdGlwYXRoIHNldHVwLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZ2FtZS1jaGFuZ2VyIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBOVk1lIGRldmljZXMgaW4gYSBtdWx0aXBhdGhlZCBlbnZpcm9ubWVudC4gIEdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNvcmUgZmlsZXMgaW52b2x2ZWQsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gR290dGEgbG9vayBmb3IgdGhvc2UgZWRnZSBjYXNlcyEKCkxldCYjMzk7cyBzZWXigKYgZm9yIGZ1enppbmcsIHRoZSBrZXkgc3ltYm9scyBzZWVtIHRvIGJlOiBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgYWRkX2Rpc2tfZmluYWxgLCBgX19hZGRfZGlza2AsIGFuZCBgY2hlY2tfcGFydGl0aW9uYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRlY2lzaW9uIHBvaW50cy4KCldhaXQgYSBzZWNvbmTigKYgaXMgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBzdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSEgTGV0IG1lIGp1bXAgaW50byBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHRvIHZlcmlmeSB0aGF0IGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBHb3R0YSBtYWtlIHN1cmUgb3VyIGZ1enppbmcgc3RyYXRlZ2llcyBhcmUgaGl0dGluZyB0aGUgcmlnaHQgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NTE2PXN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDktXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NTA6c3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTUxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02NDU9Y29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfbnNfaGVhZF9vcHMgPSB7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDYtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjY0NzpcdC5zdWJtaXRfYmlvXHQ9IG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvLFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ4LVx0Lm9wZW5cdFx0PSBudm1lX25zX2hlYWRfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIEl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IHRocm93cyBhIHJlZCBmbGFnIGZvciBBUEkgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCYjMzk7cyB1c2VkIGFzIGAuc3VibWl0X2Jpb2Agd2l0aGluIGBudm1lX25zX2hlYWRfb3BzYCwgbWFraW5nIGl0IGFuIGVudHJ5IHBvaW50IGluIHRoYXQgY29udGV4dC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBiZXN0IHByYWN0aWNlIGlzIHRvIGxlYW4gdG93YXJkcyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMsIGJlY2F1c2Ugb2YgcG90ZW50aWFsIGlubGluaW5nIGFuZCBsYWNrIG9mIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIHRoZSBsYXR0ZXIuCgpCdXQsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJiMzOTt0KiBpbmxpbmUgaXQsIGFuZCBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgSSB0aGluayB3ZSYjMzk7cmUgc2FmZSB3aXRoIHRoaXMgb25lLCBnaXZlbiB0aGUgd2F5IGl0JiMzOTtzIHVzZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgYWxzbyBjb25zaWRlciBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBhbmQgYG52bWVfZmFpbG92ZXJfcmVxYCBhcyBwb3RlbnRpYWwgQVBJIGVudHJ5IHBvaW50cyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLiBUaGlzIGhlbHBzIG1haW50YWluIGNsYXJpdHkgYW5kIGVhc2Ugb2YgZnV0dXJlIG1haW50ZW5hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTYwPXZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xOTItXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxOTM6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTk0LXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTUtfVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6MjE2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTctXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwNzk9dm9pZCBudm1lX21wYXRoX3JlbW92ZV9kaXNrKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEwODA6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDgxLXZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTg2PXN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX2RlZmF1bHRfaW9wb2xpY3koc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExODgtfVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExODk6c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5MC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyNjQ9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyNjYtXHRpZiAocnEtXHUwMDNlY21kX2ZsYWdzIFx1MDAyNiBSRVFfTlZNRV9NUEFUSClcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjY3Olx0XHRudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyNjgtXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOVk1lIE11bHRpcGF0aCBSZXF1ZXN0IEhhbmRsaW5nIC0gUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCBpcyBkZWZpbml0ZWx5IGV4cG9zZWQsIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQgZm9yIG11bHRpcGF0aCByZXF1ZXN0IGhhbmRsaW5nLCB0aGUgY29yZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgYWxzbyBhdmFpbGFibGUgZXh0ZXJuYWxseT8gVGhhdCYjMzk7cyBhIGtleSBwaWVjZTsgaXQgd291bGQgZGljdGF0ZSBob3cgd2UgaGFuZGxlIGZhaWxvdmVyIHNjZW5hcmlvcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRob3NlIHJlcXVlc3RzLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgaWYgdGhlcmUmIzM5O3MgYW5vdGhlciBtZWNoYW5pc20gaW52b2x2ZWQuIFRpbWUgZm9yIGEgcXVpY2sgbG9vayBhdCB0aGUgZXhwb3J0IHRhYmxlLi4uIG9yIG1heWJlIEkgaGF2ZSBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN0cnVjdHVyZSBoZXJlLiBMZXQgbWUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfZmFpbG92ZXJfcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NzY9c3RhdGljIHZvaWQgX19udm1lX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMS1cdGNhc2UgRkFJTE9WRVI6XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTAyOlx0XHRudm1lX2ZhaWxvdmVyX3JlcShyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMy1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTE0Nz1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xNTktXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxNjA6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTYxLXtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTA2Mz12b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cyk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA2NDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEwNjUtdm9pZCBudm1lX2tpY2tfcmVxdWV1ZV9saXN0cyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTExND1zdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9jdHJsX3VzZV9hbmEoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExNy19XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTExODpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTlZNZSBGYWlsb3ZlciBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnZtZV9mYWlsb3Zlcl9yZXFgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBhbmQgaW50ZXJhY3QuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIGJsb2NrIGxheWVyLCBzcGVjaWZpY2FsbHkgYGFkZF9kaXNrX2ZpbmFsYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IG9uZSAqaXMqIHN0YXRpYywgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgY2hhaW4gdGhlcmUgaXMgaW1wb3J0YW50OiBgZGV2aWNlX2FkZF9kaXNrYCBjYWxscyBgX19hZGRfZGlza2AsIGFuZCAqdGhhdCogdGhlbiBjYWxscyBgYWRkX2Rpc2tfZmluYWxgLiBTbywgZXZlbiBpZiBgYWRkX2Rpc2tfZmluYWxgIGlzIHN0YXRpYywgdGhhdCBkb2VzbiYjMzk7dCB0ZWxsIHRoZSBmdWxsIHN0b3J5IGFib3V0IHRoZSBmYWlsb3ZlciBsb2dpYy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0LiBJIHNob3VsZCBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIGFyb3VuZCBlaXRoZXIgYF9fYWRkX2Rpc2tgIG9yIGBkZXZpY2VfYWRkX2Rpc2tgLCBzZWUgd2hlcmUgdGhvc2UgYXJlIGdldHRpbmcgY2FsbGVkIGZyb20sIGFuZCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nLiBJdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz04Mjk9c3RhdGljIGludCB1YmRfYWRkKGludCBuLCBjaGFyICoqZXJyb3Jfb3V0KVxuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTg5NS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjg5NjpcdGVyciA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZ1YmRfZGV2LVx1MDAzZXBkZXYuZGV2LCBkaXNrLCB1YmRfYXR0cl9ncm91cHMpO1xuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtODk3LVx0aWYgKGVycilcbi0tXG5ibG9jay9nZW5oZC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChhZGRfZGlza19md25vZGUpO1xuLS1cbmJsb2NrL2dlbmhkLmMtNjE0LS8qKlxuYmxvY2svZ2VuaGQuYzo2MTU6ICogZGV2aWNlX2FkZF9kaXNrIC0gYWRkIGRpc2sgaW5mb3JtYXRpb24gdG8ga2VybmVsIGxpc3RcbmJsb2NrL2dlbmhkLmMtNjE2LSAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkaXNrXG4tLVxuYmxvY2svZ2VuaGQuYy02MjItICovXG5ibG9jay9nZW5oZC5jOjYyMzppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svZ2VuaGQuYy02MjQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcylcbi0tXG5ibG9jay9nZW5oZC5jLTYyNy19XG5ibG9jay9nZW5oZC5jOjYyODpFWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XG5ibG9jay9nZW5oZC5jLTYyOS1cbi0tXG5ibG9jay9nZW5oZC5jPTc3OT1zdGF0aWMgdm9pZCBkaXNhYmxlX2Vsdl9zd2l0Y2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svZ2VuaGQuYy03OTYtICpcbmJsb2NrL2dlbmhkLmM6Nzk3OiAqIFRoaXMgaXMgdGhlIGNvdW50ZXIgdG8gdGhlIHJlc3BlY3RpdmUgZGV2aWNlX2FkZF9kaXNrKCkgY2FsbC5cbmJsb2NrL2dlbmhkLmMtNzk4LSAqXG4tLVxuYmxvY2svZ2VuaGQuYy04MDAtICogd2l0aCBwdXRfZGlzaygpLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRlbF9nZW5kaXNrKCksIGlmXG5ibG9jay9nZW5oZC5jOjgwMTogKiBkZXZpY2VfYWRkX2Rpc2soKSB3YXMgdXNlZC5cbmJsb2NrL2dlbmhkLmMtODAyLSAqXG4tLVxuYmxvY2svZ2VuaGQuYz0xMjUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpkaXNrX2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xMjY2LSAqXG5ibG9jay9nZW5oZC5jOjEyNjc6ICogRHJpdmVycyB3aGljaCB1c2VkIGRldmljZV9hZGRfZGlzaygpIGhhdmUgYSBnZW5kaXNrIHdpdGggYSByZXF1ZXN0X3F1ZXVlXG5ibG9jay9nZW5oZC5jLTEyNjgtICogYXNzaWduZWQuIFNpbmNlIHRoZSByZXF1ZXN0X3F1ZXVlIHNpdHMgb24gdG9wIG9mIHRoZSBnZW5kaXNrIGZvciB0aGVzZVxuLS1cbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jPTMzMD1hb2VibGtfZ2RhbGxvYyh2b2lkICp2cClcbi0tXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MDktXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzo0MTA6XHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZ2QsIGFvZV9hdHRyX2dyb3Vwcyk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MTEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM9NDU2Nz1zdGF0aWMgaW50IF9faW5pdCBkb19mbG9wcHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtNDcyOS1cbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6NDczMDpcdFx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmZsb3BweV9kZXZpY2VbZHJpdmVdLmRldixcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtNDczMS1cdFx0XHRcdCAgICAgIGRpc2tzW2RyaXZlXVswXSwgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMzOTk9c3RhdGljIGludCBtdGlwX2Jsb2NrX2luaXRpYWxpemUoc3RydWN0IGRyaXZlcl9kYXRhICpkZClcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ3OS1cdCAqIGlmIHJlYnVpbGQgcGVuZGluZywgc3RhcnQgdGhlIHNlcnZpY2UgdGhyZWFkLCBhbmQgZGVsYXkgdGhlIGJsb2NrXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MzQ4MDpcdCAqIHF1ZXVlIGNyZWF0aW9uIGFuZCBkZXZpY2VfYWRkX2Rpc2soKVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTM0ODEtXHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ5Ny1cdC8qIEVuYWJsZSB0aGUgYmxvY2sgZGV2aWNlIGFuZCBhZGQgaXQgdG8gL2RldiAqL1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jOjM0OTg6XHRydiA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZkZC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZGQtXHUwMDNlZGlzaywgbXRpcF9kaXNrX2F0dHJfZ3JvdXBzKTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDk5LVx0aWYgKHJ2KVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTM4Mz1zdGF0aWMgaW50IHBzM2Rpc2tfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqX2Rldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy00NjktXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzo0NzA6XHRlcnJvciA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZkZXYtXHUwMDNlc2JkLmNvcmUsIGdlbmRpc2ssIE5VTEwpO1xuZHJpdmVycy9ibG9jay9wczNkaXNrLmMtNDcxLVx0aWYgKGVycm9yKVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jPTYwNT1zdGF0aWMgaW50IHBzM3ZyYW1fcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc0OS1cbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jOjc1MDpcdGVycm9yID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmRldi1cdTAwM2Vjb3JlLCBnZW5kaXNrLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc1MS1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTcwODA9c3RhdGljIHNzaXplX3QgZG9fcmJkX2FkZChjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTcxNTgtXG5kcml2ZXJzL2Jsb2NrL3JiZC5jOjcxNTk6XHRyYyA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZyYmRfZGV2LVx1MDAzZWRldiwgcmJkX2Rldi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svcmJkLmMtNzE2MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jPTc4ND1zdGF0aWMgaW50IHByb2JlX2Rpc2soc3RydWN0IHZkY19wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtODgxLVxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo4ODI6XHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2cG9ydC1cdTAwM2V2aW8udmRldi1cdTAwM2VkZXYsIGcsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9zdW52ZGMuYy04ODMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1NDItXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTQzOlx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCB2YmxrLVx1MDAzZWRpc2ssIHZpcnRibGtfYXR0cl9ncm91cHMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU0NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz0yMzEyPXN0YXRpYyB2b2lkIGJsa2Zyb250X2Nvbm5lY3Qoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMzk0LVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMzk1Olx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmluZm8tXHUwMDNleGJkZXYtXHUwMDNlZGV2LCBpbmZvLVx1MDAzZWdkLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjM5Ni1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDI0PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDg4LVx0c2V0X2NhcGFjaXR5KHpyYW0tXHUwMDNlZGlzaywgMCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDg5Olx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKE5VTEwsIHpyYW0tXHUwMDNlZGlzaywgenJhbV9kaXNrX2dyb3Vwcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDkwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYz0yMDc3PXN0YXRpYyBpbnQgbXNiX2luaXRfZGlzayhzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkKVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMjgtXHRtc2Jfc3RhcnQoY2FyZCk7XG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYzoyMTI5Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2Y2FyZC1cdTAwM2VkZXYsIG1zYi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMzAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM9MTA5OT1zdGF0aWMgaW50IG1zcHJvX2Jsb2NrX2luaXRfZGlzayhzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkKVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjUtXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYzoxMTY2Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2Y2FyZC1cdTAwM2VkZXYsIG1zYi1cdTAwM2VkaXNrLCBOVUxMKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0yNzY9aW50IGFkZF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpuZXcpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0zODEtXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjM4MjpcdHJldCA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZuZXctXHUwMDNlbXRkLVx1MDAzZWRldiwgZ2QsIE5VTEwpO1xuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0zODMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jPTM0OT1pbnQgdWJpYmxvY2tfY3JlYXRlKHN0cnVjdCB1Ymlfdm9sdW1lX2luZm8gKnZpKVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTQyNi1cdC8qIE11c3QgYmUgdGhlIGxhc3Qgc3RlcDogYW55b25lIGNhbiBjYWxsIGZpbGUgb3BzIGZyb20gbm93IG9uICovXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYzo0Mjc6XHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2sodmktXHUwMDNlZGV2LCBkZXYtXHUwMDNlZ2QsIE5VTEwpO1xuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMtNDI4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz0xNDk2PXN0YXRpYyBpbnQgYnR0X2Jsa19pbml0KHN0cnVjdCBidHQgKmJ0dClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy0xNTIyLVx0c2V0X2NhcGFjaXR5KGJ0dC1cdTAwM2VidHRfZGlzaywgYnR0LVx1MDAzZW5sYmEgKiBidHQtXHUwMDNlc2VjdG9yX3NpemUgXHUwMDNlXHUwMDNlIDkpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6MTUyMzpcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmJ0dC1cdTAwM2VuZF9idHQtXHUwMDNlZGV2LCBidHQtXHUwMDNlYnR0X2Rpc2ssIE5VTEwpO1xuZHJpdmVycy9udmRpbW0vYnR0LmMtMTUyNC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3MS1cdH1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NzI6XHRyYyA9IGRldmljZV9hZGRfZGlzayhkZXYsIGRpc2ssIHBtZW1fYXR0cmlidXRlX2dyb3Vwcyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTczLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00MjI1PXN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0Mjk4Olx0aWYgKGRldmljZV9hZGRfZGlzayhjdHJsLVx1MDAzZWRldmljZSwgbnMtXHUwMDNlZGlzaywgbnZtZV9uc19hdHRyX2dyb3VwcykpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5OS1cdFx0Z290byBvdXRfY2xlYW51cF9uc19mcm9tX2xpc3Q7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9ODA5PXN0YXRpYyB2b2lkIG52bWVfbXBhdGhfc2V0X2xpdmUoc3RydWN0IG52bWVfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTgxOC1cdCAqIHRlc3RfYW5kX3NldF9iaXQoKSBpcyB1c2VkIGJlY2F1c2UgaXQgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IHR3byBudm1lXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo4MTk6XHQgKiBwYXRocyBzaW11bHRhbmVvdXNseSBjYWxsaW5nIGRldmljZV9hZGRfZGlzaygpIG9uIHRoZSBzYW1lIG5hbWVzcGFjZVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODIwLVx0ICogaGVhZC5cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy04MjItXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTlZNRV9OU0hFQURfRElTS19MSVZFLCBcdTAwMjZoZWFkLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6ODIzOlx0XHRyYyA9IGRldmljZV9hZGRfZGlzayhcdTAwMjZoZWFkLVx1MDAzZXN1YnN5cy1cdTAwM2VkZXYsIGhlYWQtXHUwMDNlZGlzayxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTgyNC1cdFx0XHRcdCAgICAgbnZtZV9uc19hdHRyX2dyb3Vwcyk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz02Nz1pbnQgZGFzZF9nZW5kaXNrX2FsbG9jKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jLTEyNC1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM6MTI1Olx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXHUwMDI2YmFzZS1cdTAwM2VjZGV2LVx1MDAzZWRldiwgYmxvY2stXHUwMDNlZ2RwLCBOVUxMKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTI2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy03MDktXHRnZXRfZGV2aWNlKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldik7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jOjcxMDpcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgZGV2X2luZm8tXHUwMDNlZ2QsIE5VTEwpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy03MTEtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYz00MzQ9aW50IHNjbV9ibGtfZGV2X3NldHVwKHN0cnVjdCBzY21fYmxrX2RldiAqYmRldiwgc3RydWN0IHNjbV9kZXZpY2UgKnNjbWRldilcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5MC1cdHNldF9jYXBhY2l0eShiZGV2LVx1MDAzZWdlbmRpc2ssIHNjbWRldi1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSA5KTtcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6NDkxOlx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnNjbWRldi1cdTAwM2VkZXYsIGJkZXYtXHUwMDNlZ2VuZGlzaywgTlVMTCk7XG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Mzk5Mz1zdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTQxMDctXG5kcml2ZXJzL3Njc2kvc2QuYzo0MTA4Olx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soZGV2LCBnZCwgTlVMTCk7XG5kcml2ZXJzL3Njc2kvc2QuYy00MTA5LVx0aWYgKGVycm9yKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NyLmM9NjE5PXN0YXRpYyBpbnQgc3JfcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTcwMy1cbmRyaXZlcnMvc2NzaS9zci5jOjcwNDpcdGVycm9yID0gZGV2aWNlX2FkZF9kaXNrKFx1MDAyNnNkZXYtXHUwMDNlc2Rldl9nZW5kZXYsIGRpc2ssIE5VTEwpO1xuZHJpdmVycy9zY3NpL3NyLmMtNzA1LVx0aWYgKGVycm9yKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9NzkzPWludCBfX211c3RfY2hlY2sgYWRkX2Rpc2tfZndub2RlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTUtXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjc5NjppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTc5OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTc5OS17XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjgwMDpcdHJldHVybiBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZGlzaywgTlVMTCk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTgwMS19XG4tLVxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM9OTg9ICAgIHB1YiBmbiBidWlsZFx1MDAzY1Q6IE9wZXJhdGlvbnNcdTAwM2UoXG4tLVxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMtMTgzLSAgICAgICAgICAgIHVuc2FmZSB7XG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxODQ6ICAgICAgICAgICAgICAgIGJpbmRpbmdzOjpkZXZpY2VfYWRkX2Rpc2soY29yZTo6cHRyOjpudWxsX211dCgpLCBnZW5kaXNrLCBjb3JlOjpwdHI6Om51bGxfbXV0KCkpXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xODUtICAgICAgICAgICAgfSxcbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xOTAtICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgaW5pdGlhbGl6ZWQgYWJvdmUuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxOTE6ICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB2aWEgYGRldmljZV9hZGRfZGlza2AgYWJvdmUuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xOTItICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrLnF1ZXVlLnF1ZXVlX2RhdGFgIGlzIHNldCB0byBgZGF0YWAgaW4gdGhlIGNhbGwgdG9cbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDYtLy8vICAtIGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB0aHJvdWdoIGEgY2FsbCB0b1xucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM6MjA3Oi8vLyAgICBgYmluZGluZ3M6OmRldmljZV9hZGRfZGlza2AuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDgtLy8vICAtIGBzZWxmLmdlbmRpc2sucXVldWUucXVldWVkYXRhYCBpcyBpbml0aWFsaXplZCBieSBhIGNhbGwgdG8gYEZvcmVpZ25Pd25hYmxlOjppbnRvX2ZvcmVpZ25gLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBEaXNrIEFkZGl0aW9uIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIGBkZXZpY2VfYWRkX2Rpc2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQsIHJpZ2h0PyBBbmQgYGFkZF9kaXNrYCBpdHNlbGYsIHRoYXQgaW5saW5lIGZ1bmN0aW9uLCBqdXN0IGNhbGxzIGBkZXZpY2VfYWRkX2Rpc2tgLiAgTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgY2xhc3NpYyBlbmNhcHN1bGF0aW9uLiBHb29kLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNlbnRlciBteSBhdHRlbnRpb24gb24gYGRldmljZV9hZGRfZGlza2Ag4oCTIGl0JiMzOTtzIHRoZSByaWdodCBzeW1ib2wgdG8gZGlnIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZGlzayBhZGRpdGlvbiBwcm9jZXNzIHdvcmtzLgoKSG1tLCBidXQgd2FpdC4uLiBJJiMzOTttIGp1c3QgcmVjYWxsaW5nIHNvbWV0aGluZy4gVGhlIGBjaGVja19wYXJ0aXRpb25gIGZ1bmN0aW9uLCBJICp0aGluayogdGhhdCYjMzk7cyBzdGF0aWMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgbG9jYXRpb24uIE9oLCByaWdodCwgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gT2theSwgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gTm93LCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGluZ3MgYXJlIHJlYWxseSBpbXBhY3RlZC4gU28sIGJlZm9yZSBJIGdldCBjYXJyaWVkIGF3YXksIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgYmRldl9kaXNrX2NoYW5nZWRgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3BhcnRpdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xMTM9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aXRpb25zKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMTE4LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MTE5OnN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0xMjAte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTU4ND1zdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OTEtXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1OTI6XHRzdGF0ZSA9IGNoZWNrX3BhcnRpdGlvbihkaXNrKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5My1cdGlmICghc3RhdGUpXG4tLVxuZnMvdWRmL3N1cGVyLmM9MTA0Nj1zdGF0aWMgc3RydWN0IHVkZl9iaXRtYXAgKnVkZl9zYl9hbGxvY19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGluZGV4KVxuLS1cbmZzL3VkZi9zdXBlci5jLTEwNTgtXG5mcy91ZGYvc3VwZXIuYzoxMDU5OnN0YXRpYyBpbnQgY2hlY2tfcGFydGl0aW9uX2Rlc2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL3VkZi9zdXBlci5jLTEwNjAtXHRcdFx0XHRzdHJ1Y3QgcGFydGl0aW9uRGVzYyAqcCxcbi0tXG5mcy91ZGYvc3VwZXIuYz0xMTA4PXN0YXRpYyBpbnQgdWRmX2ZpbGxfcGFydGRlc2NfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3VkZi9zdXBlci5jLTExNDAtXG5mcy91ZGYvc3VwZXIuYzoxMTQxOlx0ZXJyID0gY2hlY2tfcGFydGl0aW9uX2Rlc2Moc2IsIHAsIG1hcCk7XG5mcy91ZGYvc3VwZXIuYy0xMTQyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUGFydGl0aW9uaW5nIExvZ2ljKioKCk9rYXksIHNvIGBjaGVja19wYXJ0aXRpb25gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGdldHRpbmcgaW52b2tlZCBieSBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gIFRoYXQgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBXZSYjMzk7cmUgYWRkaW5nIHBhcnRpdGlvbnMsIGFuZCB3ZSBuZWVkIHRvIGNoZWNrIHRoZW0uIE5vdywgd2hlcmUgYXJlIHRob3NlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSB0ZXh0IG1lbnRpb25zIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgYW5kIGBiZGV2X2Rpc2tfY2hhbmdlZGAuICBMZXQmIzM5O3MgZGlnIGludG8gdGhvc2UgYW5kIHNlZSB3aG8mIzM5O3Mga2lja2luZyBvZmYgdGhlIHdob2xlIHByb2Nlc3Mgb2YgcGFydGl0aW9uIGNoZWNraW5nLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfc2Nhbl9wYXJ0aXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay5oPTY0Nj1zdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX2FsbG9jX3F1ZXVlKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGVfaWQpO1xuYmxvY2svYmxrLmgtNjQ3LVxuYmxvY2svYmxrLmg6NjQ4OmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKTtcbmJsb2NrL2Jsay5oLTY0OS1cbi0tXG5ibG9jay9nZW5oZC5jPTM2MT1FWFBPUlRfU1lNQk9MX0dQTChkaXNrX3VldmVudCk7XG5ibG9jay9nZW5oZC5jLTM2Mi1cbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuYmxvY2svZ2VuaGQuYy0zNjQte1xuLS1cbmJsb2NrL2dlbmhkLmMtMzc5LVx0aWYgKCEobW9kZSBcdTAwMjYgQkxLX09QRU5fRVhDTCkpIHtcbmJsb2NrL2dlbmhkLmM6MzgwOlx0XHRyZXQgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGRpc2stXHUwMDNlcGFydDAsIGRpc2tfc2Nhbl9wYXJ0aXRpb25zLFxuYmxvY2svZ2VuaGQuYy0zODEtXHRcdFx0XHRcdCAgTlVMTCk7XG4tLVxuYmxvY2svZ2VuaGQuYy00MDAtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbmJsb2NrL2dlbmhkLmM6NDAxOlx0XHRiZF9hYm9ydF9jbGFpbWluZyhkaXNrLVx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyk7XG5ibG9jay9nZW5oZC5jLTQwMi1cdHJldHVybiByZXQ7XG4tLVxuYmxvY2svZ2VuaGQuYz00MDU9c3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svZ2VuaGQuYy00MTQtXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuYmxvY2svZ2VuaGQuYzo0MTU6XHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuYmxvY2svZ2VuaGQuYy00MTYtXG4tLVxuYmxvY2svaW9jdGwuYz02NTA9c3RhdGljIGludCBibGtkZXZfY29tbW9uX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9pb2N0bC5jLTcxMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2lvY3RsLmM6NzEyOlx0XHRyZXR1cm4gZGlza19zY2FuX3BhcnRpdGlvbnMoYmRldi1cdTAwM2ViZF9kaXNrLFxuYmxvY2svaW9jdGwuYy03MTMtXHRcdFx0XHRtb2RlIHwgQkxLX09QRU5fU1RSSUNUX1NDQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI1NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgSS9PIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHBhcnRpdGlvbiByZS1yZWFkaW5nIHdvcmtzIGluIHRoaXMgYmxvY2sgZGV2aWNlIGRyaXZlci4gSSBub3RpY2VkIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgaXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgdGhhdCwgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG1tLCBpbnRlcmVzdGluZy4gQnV0IGl0IGxvb2tzIGxpa2UgYGJsa2Rldl9jb21tb25faW9jdGxgICpkb2VzKiBjYWxsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2Agd2hlbiBpdCByZWNlaXZlcyB0aGUgYEJMS1JSUEFSVGAgaW9jdGwgY29tbWFuZC4gVGhhdCYjMzk7cyBhIHNvbGlkIGxlYWQuCgpSaWdodCwgYGJsa2Rldl9jb21tb25faW9jdGxgIGhhbmRsZXMgaW9jdGxzIGZvciBibG9jayBkZXZpY2VzIOKAkyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50LiBUaGF0IGdpdmVzIG1lIGEgZ29vZCwgZm9jdXNlZCBzeW1ib2wgdG8gc3RhcnQgZnJvbS4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AuIE9rYXksIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgYW5hbHlzaXMgYXMgSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyBpdCYjMzk7cyBjYWxsZWQuIExldCBtZSBjaGVjayB0aGUgY2FsbGVyIG9mIGBibGtkZXZfY29tbW9uX2lvY3RsYC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBhdCBgYmxrZGV2X2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIGZvcndhcmQgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtkZXZfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MzU0PXN0YXRpYyBpbnQgYmxrZGV2X2NvcHlfem9uZV90b191c2VyKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0zNzAtICogQkxLUkVQT1JUWk9ORSBhbmQgQkxLUkVQT1JUWk9ORVYyIGlvY3RsIHByb2Nlc3NpbmcuXG5ibG9jay9ibGstem9uZWQuYzozNzE6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxuYmxvY2svYmxrLXpvbmVkLmMtMzcyLSAqL1xuLS1cbmJsb2NrL2Jsay16b25lZC5jPTQyMD1zdGF0aWMgaW50IGJsa2Rldl9yZXNldF96b25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9ibGstem9uZWQuYy00NDktICogQkxLUkVTRVRaT05FLCBCTEtPUEVOWk9ORSwgQkxLQ0xPU0VaT05FIGFuZCBCTEtGSU5JU0haT05FIGlvY3RsIHByb2Nlc3NpbmcuXG5ibG9jay9ibGstem9uZWQuYzo0NTA6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxuYmxvY2svYmxrLXpvbmVkLmMtNDUxLSAqL1xuLS1cbmJsb2NrL2Jsay5oPTY2ND1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5ibG9jay9ibGsuaC02NjUtXHRcdGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcbmJsb2NrL2Jsay5oOjY2Njpsb25nIGJsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5ibG9jay9ibGsuaC02NjctaW50IGJsa2Rldl91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuYmxvY2svYmxrLmg6NjY4OmxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5ibG9jay9ibGsuaC02NjktXG4tLVxuYmxvY2svZm9wcy5jPTkyNz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcbi0tXG5ibG9jay9mb3BzLmMtOTM1LVx0LmZzeW5jXHRcdD0gYmxrZGV2X2ZzeW5jLFxuYmxvY2svZm9wcy5jOjkzNjpcdC51bmxvY2tlZF9pb2N0bFx0PSBibGtkZXZfaW9jdGwsXG5ibG9jay9mb3BzLmMtOTM3LSNpZmRlZiBDT05GSUdfQ09NUEFUXG5ibG9jay9mb3BzLmM6OTM4Olx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfYmxrZGV2X2lvY3RsLFxuYmxvY2svZm9wcy5jLTkzOS0jZW5kaWZcbi0tXG5ibG9jay9pb2N0bC5jPTY1MD1zdGF0aWMgaW50IGJsa2Rldl9jb21tb25faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmJsb2NrL2lvY3RsLmMtNzQzLS8qXG5ibG9jay9pb2N0bC5jOjc0NDogKiBBbHdheXMga2VlcCB0aGlzIGluIHN5bmMgd2l0aCBjb21wYXRfYmxrZGV2X2lvY3RsKClcbmJsb2NrL2lvY3RsLmMtNzQ1LSAqIHRvIGhhbmRsZSBhbGwgaW5jb21wYXRpYmxlIGNvbW1hbmRzIGluIGJvdGggZnVuY3Rpb25zLlxuLS1cbmJsb2NrL2lvY3RsLmMtNzQ4LSAqL1xuYmxvY2svaW9jdGwuYzo3NDk6bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5ibG9jay9pb2N0bC5jLTc1MC17XG4tLVxuYmxvY2svaW9jdGwuYy04MDgtICAgRU5PSU9DVExDTUQgZm9yIHVua25vd24gaW9jdGxzLiAqL1xuYmxvY2svaW9jdGwuYzo4MDk6bG9uZyBjb21wYXRfYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuYmxvY2svaW9jdGwuYy04MTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBNdWx0aXBhdGggRW50cnkgUG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcga2V5IGVudHJ5IHBvaW50cyBmb3IgTlZNZSBtdWx0aXBhdGhpbmcgZnVuY3Rpb25hbGl0eS4gSXQgbG9va3MgbGlrZSBgYmxrZGV2X2lvY3RsYCBpcyBkZWZpbml0ZWx5IG9uZS4gVGhlbiB0aGVyZSYjMzk7cyBgZGV2aWNlX2FkZF9kaXNrYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50LiBNb3ZpbmcgaW50byB0aGUgbXVsdGlwYXRoLXNwZWNpZmljIGZ1bmN0aW9ucywgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYW5kIGBudm1lX2ZhaWxvdmVyX3JlcWAgYXJlIG9idmlvdXNseSBjcml0aWNhbCBmb3IgaGFuZGxpbmcgdGhlIHBhdGggc2VsZWN0aW9uIGFuZCBmYWlsb3ZlciBsb2dpYy4KCkhhbmcgb27igKYgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgc3RhdGljLCB3aGljaCB0eXBpY2FsbHkgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgYnV0IGl0JiMzOTtzIHRoZSBgc3VibWl0X2Jpb2AgZnVuY3Rpb24gZm9yIHRoZSBtdWx0aXBhdGggaGVhZCwgc28gdGhhdCYjMzk7cyBhY3R1YWxseSB0aGUgc3VibWl0X2JpbyBmdW5jdGlvbiBmb3IgdGhlIGFjdHVhbCBibG9jayBJL08uIFNvIEkgcmVhbGx5IHNob3VsZCBpbmNsdWRlIHRoYXQgb25lIGFzIHdlbGwuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSS9PIHJlcXVlc3RzIGFyZSBpbml0aWF0ZWQgd2l0aGluIHRoZSBtdWx0aXBhdGggY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSS9PIGFjdHVhbGx5IGdldHMgc3VibWl0dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX25zX2hlYWRfc3VibWl0X2JpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz01MTY9c3RhdGljIGJvb2wgbnZtZV9hdmFpbGFibGVfcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0OS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU1MDpzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NTEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTY0NT1jb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9uc19oZWFkX29wcyA9IHtcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY0Ni1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NjQ3Olx0LnN1Ym1pdF9iaW9cdD0gbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8sXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDgtXHQub3Blblx0XHQ9IG52bWVfbnNfaGVhZF9vcGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOVk1lIE11bHRpcGF0aCBCbG9jayBEZXZpY2UqKgoKT2theSwgc28gYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGJsb2NrIGRldmljZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyB3ZSYjMzk7bGwgYmUgZm9jdXNpbmcgb246IGBkZXZpY2VfYWRkX2Rpc2tgLCBgYmxrZGV2X2lvY3RsYCwgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kLCBvZiBjb3Vyc2UsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuCgpIbW0sIGhvbGQgb24uIEFyZW4mIzM5O3QgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBzdXBwb3NlZCB0byBiZSBleHBvcnRlZD8gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBBaCwgZ29vZCwgaXQgbG9va3MgbGlrZSBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCAqaXMqIGV4cG9ydGVkLCBidXQgSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfbXBhdGhfZW5kX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ0Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19udm1lX2VuZF9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY0LVx0aWYgKHJlcS1cdTAwM2VjbWRfZmxhZ3MgXHUwMDI2IFJFUV9OVk1FX01QQVRIKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NTpcdFx0bnZtZV9tcGF0aF9lbmRfcmVxdWVzdChyZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2Ni19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MjE2PUVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTctXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoyMTg6dm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxOS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwODA9dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMDgxOnZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEwODItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExODk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTEtfVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExOTI6c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBOVk1lIE11bHRpLVBhdGhpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE5WTWUgbXVsdGktcGF0aGluZyBtb2R1bGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyBldmVyeXRoaW5nJiMzOTtzIGNvbm5lY3RlZC4gSXQgc2VlbXMgbGlrZSBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgaXNuJiMzOTt0IGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIHN1cnByaXNlLCBidXQgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgICppcyogZXhwb3J0ZWQsIHdoaWNoIGNoYW5nZXMgdGhlIGR5bmFtaWMgYSBsaXR0bGUuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbiBJJiMzOTtsbCBpbmNsdWRlIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBhcyB3ZWxsIGFzIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIFRob3NlIGxvb2sgbGlrZSBrZXkgcGFydHMgb2YgdGhlIHJlcXVlc3QgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuCgpOb3csIHdoYXQgYWJvdXQgdGhhdCBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbj8gSSB0aG91Z2h0IHRoYXQgd2FzIHJlbGV2YW50LCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQWgsIG5vdyBJIHJlbWVtYmVyLCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiAKCkFoLCB5ZXMsIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdGhhdCBjYWxscyBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSBwYXJ0aXRpb24gaGFuZGxpbmcsIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9kaXNrX2NoYW5nZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmRldi5jPTcyNz1zdGF0aWMgaW50IGJsa2Rldl9nZXRfd2hvbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlKVxuLS1cbmJsb2NrL2JkZXYuYy03MzctXHRcdFx0ICAgICB0ZXN0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSkpXG5ibG9jay9iZGV2LmM6NzM4Olx0XHRcdFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgdHJ1ZSk7XG5ibG9jay9iZGV2LmMtNzM5LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuYmxvY2svYmRldi5jLTc1MC1cdFx0ICovXG5ibG9jay9iZGV2LmM6NzUxOlx0XHRyZXQgPSBiZGV2X2Rpc2tfY2hhbmdlZChkaXNrLCBmYWxzZSk7XG5ibG9jay9iZGV2LmMtNzUyLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAobW9kZSBcdTAwMjYgQkxLX09QRU5fU1RSSUNUX1NDQU4pKSB7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NTg0PXN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0NC1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjY0NTppbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0Ni17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNzEyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NzEzOkVYUE9SVF9TWU1CT0xfR1BMKGJkZXZfZGlza19jaGFuZ2VkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxNC1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cdG11dGV4X2xvY2soXHUwMDI2bG8tXHUwMDNlbG9fZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpcdHJjID0gYmRldl9kaXNrX2NoYW5nZWQobG8tXHUwMDNlbG9fZGlzaywgZmFsc2UpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNDQ0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTExMT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTYwOlx0XHRlcnIgPSBiZGV2X2Rpc2tfY2hhbmdlZChsby1cdTAwM2Vsb19kaXNrLCBmYWxzZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNDQ0PXN0YXRpYyB2b2lkIHVibGtfcGFydGl0aW9uX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0NTgtXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjQ1OTpcdGJkZXZfZGlza19jaGFuZ2VkKGRpc2ssIGZhbHNlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDYwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9Njg1PXN0YXRpYyB2b2lkIG52bWVfcGFydGl0aW9uX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjk0LVx0bXV0ZXhfbG9jayhcdTAwMjZoZWFkLVx1MDAzZWRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo2OTU6XHRiZGV2X2Rpc2tfY2hhbmdlZChoZWFkLVx1MDAzZWRpc2ssIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5Ni1cdG11dGV4X3VubG9jayhcdTAwMjZoZWFkLVx1MDAzZWRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz0xNTk9aW50IGRhc2Rfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jLTE3My1cdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlZ2RwLVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoxNzQ6XHRyYyA9IGJkZXZfZGlza19jaGFuZ2VkKGJsb2NrLVx1MDAzZWdkcCwgZmFsc2UpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xNzUtXHRtdXRleF91bmxvY2soXHUwMDI2YmxvY2stXHUwMDNlZ2RwLVx1MDAzZW9wZW5fbXV0ZXgpO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM9MTk3PXZvaWQgZGFzZF9kZXN0cm95X3BhcnRpdGlvbnMoc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjA4LVx0bXV0ZXhfbG9jayhcdTAwMjZmaWxlX2JkZXYoYmRldl9maWxlKS1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoyMDk6XHRiZGV2X2Rpc2tfY2hhbmdlZChmaWxlX2JkZXYoYmRldl9maWxlKS1cdTAwM2ViZF9kaXNrLCB0cnVlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjEwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZpbGVfYmRldihiZGV2X2ZpbGUpLVx1MDAzZWJkX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD05NzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9ucl96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtOTc4LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDo5Nzk6aW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC05ODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvcmUgQmxvY2sgTGF5ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGJkZXZfZGlza19jaGFuZ2VkYCBsb29rZWQgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQsIHNpbmNlIGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBwcm9taW5lbnQgYmxvY2sgZHJpdmVycyBsaWtlIGBsb29wYCwgYHVibGtgLCBhbmQgYG52bWVgLiBFeGNlbGxlbnQgZm9jdXMgc3ltYm9sLgoKQnV0IHRoZW4gSSBzYXcgdGhhdCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyBhY3R1YWxseSBleHBvcnRlZCAtIHllcCwgbm9uLXN0YXRpYy4gU28gSSBuZWVkIHRvIGluY2x1ZGUgdGhhdCBzeW1ib2wgYWxvbmcgd2l0aCBgYmRldl9kaXNrX2NoYW5nZWRgLgoKTm93LCB0aW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgc2VlLi4uIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgLCBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBhbmQgYENPTkZJR19OVk1FX0NPUkVgIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBBbnl0aGluZyBlbHNlIHJlbGV2YW50PyBBaCwgeWVzLCBgQ09ORklHX0JMS19ERVZfTlZNRWAgLSB0aGF0JiMzOTtzIHRoZSBQQ0llIE5WTWUgZHJpdmVyIGl0c2VsZi4gVGhlIG90aGVycywgYENPTkZJR19OVk1FX1RBUkdFVGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAsIGFyZSBmb3IgdGhlIE5WTWUgbG9vcCB0YXJnZXQuIFNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGluY2x1ZGUgYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuCgpXYWl0IGEgbWludXRlLi4uIHRoZXNlIHBhdGNoIHRvdWNoZXMgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgIC0gKmNvcmUqIGJsb2NrIGxheWVyIHN0dWZmLiBUaGF0IG1lYW5zIGBCTE9DS2AgbXVzdCBiZSByZXF1aXJlZCwgYnV0IHRoYXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgc28gaXQgZG9lc24mIzM5O3QgbWF0dGVyLiBUaGUgTlZNZSBtdWx0aXBhdGggY2hhbmdlcyBhcmUgb2J2aW91c2x5IHRpZWQgdG8gYE5WTUVfTVVMVElQQVRIYCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5lZWRlZC4gU2luY2UgdGhlIGBiZGV2X2Rpc2tfY2hhbmdlZGAgZnVuY3Rpb24gaXMgYWxzbyBuZWVkZWQsIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHRha2VuIHRvby4KClNvLCBJJiMzOTtsbCBhZGQgYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuIFRoYXQgZmVlbHMgcmlnaHQuIE5vdywgbGV0IG1lIHZlcmlmeSB0aG9zZSBgTlZNRV9UQVJHRVRgIGRlcGVuZGVuY2llcyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RBUkdFVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzozOmNvbmZpZyBOVk1FX1RBUkdFVFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFwmIzM0O05WTWUgVGFyZ2V0IGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9UQVJHRVRfUkRNQVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgUkRNQSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTIwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIX0RFQlVHXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3ltYm9sIExpc3QgZm9yIE5WTWUgTXVsdGlwYXRoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBzeW1ib2wgbGlzdC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgb2J2aW91cyBOVk1lIHJlbGF0ZWQgc3ltYm9sczogYE5WTUVfTVVMVElQQVRIYCwgYE5WTUVfVEFSR0VUX0xPT1BgLCBgTlZNRV9UQVJHRVRgLCBhbmQgYEJMS19ERVZfTlZNRWAuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBvbnRvIHRoZSBmdW5jdGlvbiBzeW1ib2xzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCBhbmQgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGFzIHdlbGwgYXMgYG52bWVfZmFpbG92ZXJfcmVxYC4gSSBhbHNvIGNoZWNrZWQgdGhlIGF2YWlsYWJpbGl0eSBvZiBgYmRldl9kaXNrX2NoYW5nZWRgLCBgZGlza19zY2FuX3BhcnRpdGlvbnNgLCBgZGV2aWNlX2FkZF9kaXNrYCBhbmQgYGJsa2Rldl9pb2N0bGAuCgpOb3csIHRoZSB0cmljayBpcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGxpc3Qgd2l0aCBvdmVybHkgZ2VuZXJpYywgaGlnaC1mcmVxdWVuY3kgJiMzNDtob3QgcGF0aCYjMzQ7IGZ1bmN0aW9ucy4gU28sIGxldCYjMzk7cyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZWlyIHJvbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjsgd2UgZG9uJiMzOTt0IHdhbnQgdGhlIGRpc3RyaWJ1dGlvbnMgc2tld2VkLgoKYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGhlYWQuIEFuZCBzaW5jZSBpdCYjMzk7cyBhIGBzdWJtaXRfYmlvYCBjYWxsYmFjaywgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IElPIG9uIHRoZSBtdWx0aXBhdGggaGVhZCwgdGhhdCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24uCmBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgYXJlIGNhbGxlZCBmb3IgZXZlcnkgcmVxdWVzdCwgYW5kIHRoYXQgaXMgYSBob3QtcGF0aC4gVGhlc2UgYXJlIG91dC4KCmBudm1lX2ZhaWxvdmVyX3JlcWAgaXMgaW52b2tlZCBvbmx5IGR1cmluZyBmYWlsb3ZlciBldmVudHMuIFRoYXQmIzM5O3Mgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgc3RheXMuCgpgZGV2aWNlX2FkZF9kaXNrYCBpcyB0cmlnZ2VyZWQgd2hlbiBhIG5ldyBkaXNrIGlzIGFkZGVkLCBjbGVhcmx5IG5vdCBhIGhvdC1wYXRoIHNpdHVhdGlvbi4KCmBiZGV2X2Rpc2tfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGR1cmluZyBhIHBhcnRpdGlvbiByZXNjYW4sIHdoaWNoIGlzbiYjMzk7dCBoaWdoLWZyZXF1ZW5jeSBlaXRoZXIuCgpgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gZHVyaW5nIHBhcnRpdGlvbiBzY2FuLCBzbyBpdCBpcyBub3QgaG90LXBhdGguCgpgYmxrZGV2X2lvY3RsYCBkZWFscyB3aXRoIGlvY3RscyBvbiBibG9jayBkZXZpY2VzLiBXaGlsZSBmcmVxdWVudCwgaXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBsaWtlIGBzdWJtaXRfYmlvYC4KClRoZXJlZm9yZSwgSSYjMzk7bGwgZHJvcCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgZnJvbSB0aGUgbGlzdC4gVGhlIGZpbmFsLCBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIEkmIzM5O20gZ29pbmcgd2l0aCBpczoKYG52bWVfZmFpbG92ZXJfcmVxYCwgYGRldmljZV9hZGRfZGlza2AsIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGFuZCBgYmxrZGV2X2lvY3RsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ3Nj1zdGF0aWMgdm9pZCBfX252bWVfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxLVx0Y2FzZSBGQUlMT1ZFUjpcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI6XHRcdG52bWVfZmFpbG92ZXJfcmVxKHJlcSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAzLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTQ3PXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE1OS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjE2MDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0xNjEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDYzPXZvaWQgbnZtZV9tcGF0aF9kZWZhdWx0X2lvcG9saWN5KHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMDY0OnZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA2NS12b2lkIG52bWVfa2lja19yZXF1ZXVlX2xpc3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX2N0cmxfdXNlX2FuYShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE3LX1cbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExMTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwNgoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUGVyZm9ybWFuY2UgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBtb2RpZmllcyBhIGZldyBrZXkgYXJlYXMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoZXkmIzM5O3JlIG9uIHRoZSAqaG90LXBhdGgqLgoKRmlyc3QsIGBudm1lX2ZhaWxvdmVyX3JlcWAuIFRoYXQmIzM5O3MgdHJpZ2dlcmVkIGR1cmluZyBhIHJlcXVlc3QgZmFpbHVyZSBhbmQgcmV0cnkgb24gYSBkaWZmZXJlbnQgcGF0aC4gTm90IGV4YWN0bHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIG9uIHRoZSBob3QgcGF0aCwgYW5kIG5vdCBhIG1hc3NpdmUgY29uY2Vybi4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgZGV2aWNlX2FkZF9kaXNrYCwgYGJkZXZfZGlza19jaGFuZ2VkYCwgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCwgYW5kIGBibGtkZXZfaW9jdGxgLiBUaGVzZSBhbGwgc2VlbSByZWxhdGVkIHRvIGRpc2sgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgYmUgZ29vZC4gQSBxdWljayBzY2FuIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBob3QtcGF0aCBmdW5jdGlvbnMuCgpIb2xkIG9uLCB0aGUgcGF0Y2ggdG91Y2hlcyBgY2hlY2tfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBIbW0sIGBjaGVja19wYXJ0aXRpb25gIGlzICpzdGF0aWMqLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBibGtfYWRkX3BhcnRpdGlvbnNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBiZGV2X2Rpc2tfY2hhbmdlZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AuIEdvb2QsIHNvIHRoZSBsb2dpYyBjaGVja3Mgb3V0LiBTbywgbm8gYmlnIGRlYWwgYWJvdXQgdGhpcy4KCkZpbmFsbHksIHRoZXJlJiMzOTtzIGBkaXNrc3RhdHNfc2hvd2AgaW4gYGJsb2NrL2dlbmhkLmNgLiBJdCYjMzk7cyAqc3RhdGljKiBhbmQgdXNlZCBmb3IgYC9wcm9jL2Rpc2tzdGF0c2AuICBOb3QgYSBob3QtcGF0aCBzaXR1YXRpb24sIGJ1dCBtYXliZSBzb21ldGhpbmcgdG8gbm90ZSBpbiBhIGdlbmVyYWwgcGVyZm9ybWFuY2Ugb3ZlcnZpZXcsIGFsdGhvdWdoIEkgZG9uJiMzOTt0IHRoaW5rIGl0JiMzOTtzIGEgcHJpb3JpdHkuCgpCYXNlZCBvbiBhbGwgb2YgdGhhdCwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYGRldmljZV9hZGRfZGlza2AKKiAgIGBiZGV2X2Rpc2tfY2hhbmdlZGAKKiAgIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AKKiAgIGBibGtkZXZfaW9jdGxgCiogICBgbnZtZV9mYWlsb3Zlcl9yZXFgCgpBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOgoqICAgYE5WTUVfTVVMVElQQVRIYAoqICAgYE5WTUVfVEFSR0VUX0xPT1BgCiogICBgTlZNRV9UQVJHRVRgCiogICBgQkxLX0RFVl9OVk1FYAoKRnJvbSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZW5hYmxpbmcgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIHdoaWNoIHByaW1hcmlseSBtYXR0ZXJzIGZvciBOVk1lIG11bHRpcGF0aC4gSXQgaW5jbHVkZXMgdXBkYXRlcyB0byBOVk1lIG11bHRpcGF0aCB0byBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBjb3JyZWN0bHkgZm9yIHBhcnRpdGlvbnMgb24gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGlzIGlzIG1vc3RseSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgdG8gZXhpc3RpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgTlZNZSBkcml2ZXJzLCBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHRlc3RpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4KCk9rYXksIHRoYXQmIzM5O3MgbXkgYW5hbHlzaXMuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O2JkZXZfZGlza19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O2Rpc2tfc2Nhbl9wYXJ0aXRpb25zJiMzNDssCiAgICAmIzM0O2Jsa2Rldl9pb2N0bCYjMzQ7LAogICAgJiMzNDtudm1lX2ZhaWxvdmVyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtiZGV2X2Rpc2tfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtkaXNrX3NjYW5fcGFydGl0aW9ucyYjMzQ7LAogICAgJiMzNDtibGtkZXZfaW9jdGwmIzM0OywKICAgICYjMzQ7bnZtZV9mYWlsb3Zlcl9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSwgd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgYnkgTlZNZSBtdWx0aXBhdGguIEl0IGFsc28gdXBkYXRlcyBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGNvcnJlY3RseSBoYW5kbGUgSS9PIGFuZCBmYWlsb3ZlciBmb3IgcGFydGl0aW9ucyBvbiBoaWRkZW4gZGlza3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBOVk1lIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIE5WTWUgbG9vcGJhY2sgdGFyZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODNhOTA3OTg4MzZmNGI3ZDVhNDczOGM4Y2M1NTYyYmFlZjJhYzIxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MDYsMTUgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJc3RydWN0IGRldmljZSAqZGRldiA9IGRpc2tfdG9fZGV2KGRpc2spOwogCi0JaWYgKCEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkgewotCQkvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqLwotCQlpZiAoZ2V0X2NhcGFjaXR5KGRpc2spICZhbXA7JmFtcDsgZGlza19oYXNfcGFydHNjYW4oZGlzaykpCi0JCQlzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCAmYW1wO2Rpc2stJmd0O3N0YXRlKTsKJiM0MzsJLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KJiM0MzsJaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQomIzQzOwkJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiAKLQkJYmRldl9hZGQoZGlzay0mZ3Q7cGFydDAsIGRkZXYtJmd0O2RldnQpOwotCQlpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKQotCQkJZGlza19zY2FuX3BhcnRpdGlvbnMoZGlzaywgQkxLX09QRU5fUkVBRCk7CiYjNDM7CWJkZXZfYWRkKGRpc2stJmd0O3BhcnQwLCBkZGV2LSZndDtkZXZ0KTsKJiM0MzsJaWYgKGdldF9jYXBhY2l0eShkaXNrKSkKJiM0MzsJCWRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpOwogCiYjNDM7CWlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKIAkJLyoKIAkJICogQW5ub3VuY2UgdGhlIGRpc2sgYW5kIHBhcnRpdGlvbnMgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgYXJlCiAJCSAqIGNyZWF0ZWQuIChmb3IgaGlkZGVuIGRpc2tzIHVldmVudHMgcmVtYWluIHN1cHByZXNzZWQgZm9yZXZlcikKQEAgLTQ5MSw4ICYjNDM7NDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJZGV2X3NldF9uYW1lKGRkZXYsICYjMzQ7JXMmIzM0OywgZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAlpZiAoZndub2RlKQogCQlkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTsKLQlpZiAoIShkaXNrLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKQotCQlkZGV2LSZndDtkZXZ0ID0gTUtERVYoZGlzay0mZ3Q7bWFqb3IsIGRpc2stJmd0O2ZpcnN0X21pbm9yKTsKJiM0MzsJZGRldi0mZ3Q7ZGV2dCA9IE1LREVWKGRpc2stJmd0O21ham9yLCBkaXNrLSZndDtmaXJzdF9taW5vcik7CiAJcmV0ID0gZGV2aWNlX2FkZChkZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2V4dF9taW5vcjsKQEAgLTEzNjgsNyAmIzQzOzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewotCQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsgIWJkZXZfbnJfc2VjdG9ycyhoZCkpCiYjNDM7CQlpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpKQogCQkJY29udGludWU7CiAKIAkJaW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMKQEAgLTE1Miw3ICYjNDM7MTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZCkKIAogCX0KIAlpZiAocmVzICZndDsgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CiYjNDM7CQlpZiAoIShoZC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKJiM0MzsJCQlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXMmIzM0Oywgc2VxX2J1Zl9zdHIoJmFtcDtzdGF0ZS0mZ3Q7cHBfYnVmKSk7CiAKIAkJa2ZyZWUoc3RhdGUtJmd0O3BwX2J1Zi5idWZmZXIpOwogCQlyZXR1cm4gc3RhdGU7CkBAIC0xNjQsNyAmIzQzOzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpCiAJICovCiAJaWYgKGVycikKIAkJcmVzID0gZXJyOwotCWlmIChyZXMpIHsKJiM0MzsJaWYgKHJlcyAmYW1wOyZhbXA7ICEoaGQtJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKIAkJc2VxX2J1Zl9wdXRzKCZhbXA7c3RhdGUtJmd0O3BwX2J1ZiwKIAkJCSAgICAgJiMzNDsgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXG4mIzM0Oyk7CiAJCXByaW50ayhLRVJOX0lORk8gJiMzNDslcyYjMzQ7LCBzZXFfYnVmX3N0cigmYW1wO3N0YXRlLSZndDtwcF9idWYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwppbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCkBAIC0xODA4LDEwICYjNDM7MTgwOCw2IEBAIHN0YXRpYyB2b2lkIG52bWVfZW5hYmxlX2FlbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKQogCiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpCiB7Ci0KLQkvKiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGR1ZSB0byBHRU5IRF9GTF9ISURERU4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtJmd0O2hlYWQpKSkKLQkJZ290byBmYWlsOwogCWlmICghbnZtZV9nZXRfbnMobnMpKQogCQlnb3RvIGZhaWw7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChucy0mZ3Q7Y3RybC0mZ3Q7b3BzLSZndDttb2R1bGUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwppbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMTkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cykKIAkJCWJsa19mcmVlemVfcXVldWVfc3RhcnQoaC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwomIzQzOwomIzQzOwkvKiBRdWljayBsb29rdXAgZm9yIHdob2xlIGRpc2sgKi8KJiM0MzsJaWYgKCFwYXJ0bm8pCiYjNDM7CQlyZXR1cm4gZGlzay0mZ3Q7cGFydDA7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJYmRldiA9IHhhX2xvYWQoJmFtcDtkaXNrLSZndDtwYXJ0X3RibCwgcGFydG5vKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBiZGV2OwomIzQzO30KJiM0MzsKIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtJmd0O3EtJmd0O3F1ZXVlZGF0YTsKQEAgLTE2NSw4ICYjNDM7MTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkKLQkJYmlvX3NldF9kZXYoYmlvLCBucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDApOwomIzQzOwlmb3IgKGJpbyA9IHJlcS0mZ3Q7YmlvOyBiaW87IGJpbyA9IGJpby0mZ3Q7YmlfbmV4dCkgewomIzQzOwkJYmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzaywKJiM0MzsJCQliZGV2X3BhcnRubyhiaW8tJmd0O2JpX2JkZXYpKSk7CiYjNDM7CX0KIAlibGtfc3RlYWxfYmlvcygmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xpc3QsIHJlcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25zLSZndDtoZWFkLSZndDtyZXF1ZXVlX2xvY2ssIGZsYWdzKTsKIApAQCAtMTk0LDggJiM0MzsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCXJldHVybjsKIAogCW52bWVfcmVxKHJxKS0mZ3Q7ZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUzsKLQludm1lX3JlcShycSktJmd0O3N0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCi0JCQkJCQkgICAgICBqaWZmaWVzKTsKJiM0MzsJbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KAomIzQzOwkJCW52bWVfdG9fZGlza19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKHJxLSZndDtwYXJ0KSksCiYjNDM7CQkJcmVxX29wKHJxKSwgamlmZmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpOwogCkBAIC0yMDgsNyAmIzQzOzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAKIAlpZiAoIShudm1lX3JlcShycSktJmd0O2ZsYWdzICZhbXA7IE5WTUVfTVBBVEhfSU9fU1RBVFMpKQogCQlyZXR1cm47Ci0JYmRldl9lbmRfaW9fYWNjdChucy0mZ3Q7aGVhZC0mZ3Q7ZGlzay0mZ3Q7cGFydDAsIHJlcV9vcChycSksCiYjNDM7CWJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2hlYWQtJmd0O2Rpc2ssCiYjNDM7CQkJIGJkZXZfcGFydG5vKHJxLSZndDtwYXJ0KSksIHJlcV9vcChycSksCiAJCQkgYmxrX3JxX2J5dGVzKHJxKSAmZ3Q7Jmd0OyBTRUNUT1JfU0hJRlQsCiAJCQkgbnZtZV9yZXEocnEpLSZndDtzdGFydF90aW1lKTsKIH0KQEAgLTU0OSw3ICYjNDM7NTY2LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKQogCXNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtoZWFkLSZndDtzcmN1KTsKIAlucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpOwogCWlmIChsaWtlbHkobnMpKSB7Ci0JCWJpb19zZXRfZGV2KGJpbywgbnMtJmd0O2Rpc2stJmd0O3BhcnQwKTsKJiM0MzsJCWJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtJmd0O2Rpc2ssCiYjNDM7CQkJCWJkZXZfcGFydG5vKGJpby0mZ3Q7YmlfYmRldikpKTsKJiM0MzsKIAkJLyoKIAkJICogVXNlIEJJT19SRU1BUFBFRCB0byBza2lwIGJpb19jaGVja19lb2QoKSB3aGVuIHRoaXMgYmlvCiAJCSAqIGVudGVycyBzdWJtaXRfYmlvX25vYWNjdCgpIGZvciB0aGUgcGVyLXBhdGggZGV2aWNlLiBUaGUgRU9ECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgZGlza19oYXNfcGFydHNjYW4oc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0JcmV0dXJuICEoZGlzay0mZ3Q7ZmxhZ3MgJmFtcDsgKEdFTkhEX0ZMX05PX1BBUlQgfCBHRU5IRF9GTF9ISURERU4pKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiAhKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX05PX1BBUlQpICZhbXA7JmFtcDsKIAkJIXRlc3RfYml0KEdEX1NVUFBSRVNTX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjEKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogMTQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyB0aGUgYmxvY2sgbGF5ZXIgKHNwZWNpZmljYWxseSBgYmxvY2svZ2VuaGQuY2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2ApIGFuZCB0aGUgTlZNZSBtdWx0aXBhdGggY29kZSAoYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY2ApLCBpc24mIzM5O3QgbGlrZWx5IHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LgoKVGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSByZWZpbmluZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzICYjMzQ7aGlkZGVuJiMzNDsgZGlza3MsIGlkZW50aWZpZWQgYnkgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcuIFdlJiMzOTtyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0aGF0IGFmZmVjdCBwYXJ0aXRpb24gc2Nhbm5pbmcsIGRldmljZSBhc3NpZ25tZW50LCBhbmQgb3V0cHV0IHN1cHByZXNzaW9uIHJlbGF0ZWQgdG8gdGhlc2UgaGlkZGVuIGRpc2tzLiBUaGUga2V5IGNoYW5nZXMgYXJlOgoKKiAgIEluIGBibG9jay9nZW5oZC5jYCwgdGhlIGBhZGRfZGlza19maW5hbGAgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gKmVuYWJsZSogcGFydGl0aW9uIHNjYW5zIGV2ZW4gZm9yIGhpZGRlbiBkaXNrcywgdGhvdWdoIHVldmVudHMgYXJlIHN0aWxsIHN1cHByZXNzZWQuIEl0IHNlZW1zIHRoZSBwYXJ0aXRpb24gc2Nhbm5pbmcgY29kZSBwYXRoIGlzIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGEgbmV3IGNvZGUgcGF0aCBmb3IgaGlkZGVuIHBhcnRpdGlvbnMKKiAgIGBfX2FkZF9kaXNrYCBpcyB1cGRhdGVkIHRvIHVuY29uZGl0aW9uYWxseSBhc3NpZ24gYGRkZXYtJmd0O2RldnRgLCBldmVuIGZvciBoaWRkZW4gZGlza3MuCiogICBgZGlza3N0YXRzX3Nob3dgIGlzIGxvZ2ljIGhhcyBjaGFuZ2VkIGluIHRoZSBjb25kaXRpb25hbCBsb2dpYyB3aGljaCBtYXkgb3IgbWF5IG5vdCBpbmNsdWRlIGhpZGRlbiBwYXJ0aXRpb25zCiogICBgY2hlY2tfcGFydGl0aW9uYCBub3cgc3VwcHJlc3NlcyBwcmludGluZyBvZiBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGhpZGRlbiBkaXNrcy4KKiAgIGBudm1lX25zX29wZW5gIHJlbW92ZXMgYSBgV0FSTl9PTl9PTkNFYCBmb3IgYSBtdWx0aXBhdGggY29uZGl0aW9uLgoqICAgU2V2ZXJhbCBOVk1lIG11bHRpcGF0aCBmdW5jdGlvbnMgKGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9mYWlsb3Zlcl9yZXFgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2ApIG5vdyB1c2UgYG52bWVfdG9fZGlza19wYXJ0YCB0byBsb29rIHVwIHBhcnRpdGlvbiBibG9jayBkZXZpY2VzIGluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gYGRpc2stJmd0O3BhcnQwYC4KKiAgIGBkaXNrX2hhc19wYXJ0c2NhbmAgbm93IHJlbW92ZXMgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcgZnJvbSB0aGUgY29uZGl0aW9uLgoKSeKAmW0gY2FyZWZ1bGx5IGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHJlZG9taW5hbnRseSBsb2dpYy1iYXNlZC4gVGhlcmUmIzM5O3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gYSByaXNreSB3YXkuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gbG9va3VwIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uIGZsYWdzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG52bWVfdG9fZGlza19wYXJ0YCBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pCnsKCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CgoJLyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovCglpZiAoIXBhcnRubykKCQlyZXR1cm4gZGlzay0mZ3Q7cGFydDA7CglyY3VfcmVhZF9sb2NrKCk7CgliZGV2ID0geGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBwYXJ0bm8pOwoJcmN1X3JlYWRfdW5sb2NrKCk7CglyZXR1cm4gYmRldjsKfQpgYGAKClRoaXMgZnVuY3Rpb24gc2ltcGx5IHVzZXMgYW4geGFycmF5IChgeGFfbG9hZGApIHRvIHJldHJpZXZlIGEgYmxvY2sgZGV2aWNlIHBvaW50ZXIuIEl0IGRvZXNu4oCZdCBjcmVhdGUgYW55IG1lbW9yeSBvciByZWFkIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBsb29rdXAgYW5kIG5vdCBpbml0aWFsaXphdGlvbi4KCkxldCYjMzk7cyBjaGVjayBgZGlza3N0YXRzX3Nob3dgOgoKYGBgYwp4YV9mb3JfZWFjaCgmYW1wO2dwLSZndDtwYXJ0X3RibCwgaWR4LCBoZCkgewoJaWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSAmYW1wOyZhbXA7CgkgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLSZndDtmbGFncyAmYW1wOyBHRU5IRF9GTF9ISURERU4pKSkKCQljb250aW51ZTsKYGBgCgpUaGlzIGFnYWluIGp1c3QgaXMgYSBsb2dpYyBjaGFuZ2UuCgpMZXQmIzM5O3MgY2hlY2sgYGFkZF9kaXNrX2ZpbmFsYDoKCmBgYGMKLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi8KaWYgKGdldF9jYXBhY2l0eShkaXNrKSAmYW1wOyZhbXA7IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKQoJc2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgJmFtcDtkaXNrLSZndDtzdGF0ZSk7CgpiZGV2X2FkZChkaXNrLSZndDtwYXJ0MCwgZGRldi0mZ3Q7ZGV2dCk7CmlmIChnZXRfY2FwYWNpdHkoZGlzaykpCglkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTsKCmlmICghKGRpc2stJmd0O2ZsYWdzICZhbXA7IEdFTkhEX0ZMX0hJRERFTikpIHsKYGBgCgpUaGlzIG1vdmVzIHRoZSBgR0VOSERfRkxfSElEREVOYCBjaGVjayBkb3duLCB0byBlbnN1cmUgdGhhdCBwYXJ0aXRpb24gc2Nhbm5pbmcgY2FuIG9jY3VyIGZvciBoaWRkZW4gZGlza3MuCgpMZXQmIzM5O3MgY2hlY2sgYF9fYWRkX2Rpc2tgOgoKYGBgYwpkZGV2LSZndDtkZXZ0ID0gTUtERVYoZGlzay0mZ3Q7bWFqb3IsIGRpc2stJmd0O2ZpcnN0X21pbm9yKTsKYGBgCgpUaGlzIHVuY29uZGl0aW9uYWxseSBhc3NpZ25zIHRoZSBgZGV2dGAuCgpMZXQmIzM5O3MgY2hlY2sgYGNoZWNrX3BhcnRpdGlvbmA6CgpgYGBjCmlmIChyZXMgJmd0OyAwKSB7CglpZiAoIShoZC0mZ3Q7ZmxhZ3MgJmFtcDsgR0VOSERfRkxfSElEREVOKSkKCQlwcmludGsoS0VSTgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayBsYXllciBhbmQgTlZNZSBtdWx0aXBhdGggY29kZSB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pIGFuZCBjb3JyZWN0bHkgcm91dGUgSS9PIHRvIHRoZSBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSB3aG9sZSBkaXNrIChwYXJ0MCkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93LCByZW1vdmluZyB3YXJuaW5ncywgYW5kIHVwZGF0aW5nIGJsb2NrIGRldmljZSBsb29rdXBzIHZpYSB4YXJyYXkuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gbmV3IGZpZWxkcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjEzLjk3Njc3NjY4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzIwMTk4MjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfTE9PUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9hZGRfZGlza1wiLFxuICAgIFwiYmRldl9kaXNrX2NoYW5nZWRcIixcbiAgICBcImRpc2tfc2Nhbl9wYXJ0aXRpb25zXCIsXG4gICAgXCJibGtkZXZfaW9jdGxcIixcbiAgICBcIm52bWVfZmFpbG92ZXJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToxMy45NzY3ODMyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzE2MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCAzMGFjMGZmZTY1MTc0Li4wNTMwMWVlNWQ0Y2E1IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcXG4rKysgYi9ibG9jay9nZW5oZC5jXFxuQEAgLTQwNiwxNSArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcXG4gXFxuLVxcdGlmICghKGRpc2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xcbi1cXHRcXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xcbi1cXHRcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFxcdTAwMjZcXHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxcbi1cXHRcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbitcXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xcbitcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spIFxcdTAwMjZcXHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxcbitcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbiBcXG4tXFx0XFx0YmRldl9hZGQoZGlzay1cXHUwMDNlcGFydDAsIGRkZXYtXFx1MDAzZWRldnQpO1xcbi1cXHRcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxcbi1cXHRcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG4rXFx0YmRldl9hZGQoZGlzay1cXHUwMDNlcGFydDAsIGRkZXYtXFx1MDAzZWRldnQpO1xcbitcXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxcbitcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG4gXFxuK1xcdGlmICghKGRpc2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcXG4gXFx0XFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxcbkBAIC00OTEsOCArNDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGRldl9zZXRfbmFtZShkZGV2LCBcXFwiJXNcXFwiLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXHRpZiAoZndub2RlKVxcbiBcXHRcXHRkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTtcXG4tXFx0aWYgKCEoZGlzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxcbi1cXHRcXHRkZGV2LVxcdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cXHUwMDNlbWFqb3IsIGRpc2stXFx1MDAzZWZpcnN0X21pbm9yKTtcXG4rXFx0ZGRldi1cXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXFx1MDAzZW1ham9yLCBkaXNrLVxcdTAwM2VmaXJzdF9taW5vcik7XFxuIFxcdHJldCA9IGRldmljZV9hZGQoZGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfZXh0X21pbm9yO1xcbkBAIC0xMzY4LDcgKzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNmdwLVxcdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xcbi1cXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFxcdTAwMjZcXHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxcbitcXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLmE0ODg5NmM2Yzc5MWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbkBAIC0xNTIsNyArMTUyLDggQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcXG4gXFxuIFxcdH1cXG4gXFx0aWYgKHJlcyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXNcXFwiLCBzZXFfYnVmX3N0cihcXHUwMDI2c3RhdGUtXFx1MDAzZXBwX2J1ZikpO1xcbitcXHRcXHRpZiAoIShoZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxcbitcXHRcXHRcXHRwcmludGsoS0VSTl9JTkZPIFxcXCIlc1xcXCIsIHNlcV9idWZfc3RyKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmKSk7XFxuIFxcbiBcXHRcXHRrZnJlZShzdGF0ZS1cXHUwMDNlcHBfYnVmLmJ1ZmZlcik7XFxuIFxcdFxcdHJldHVybiBzdGF0ZTtcXG5AQCAtMTY0LDcgKzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXFxuIFxcdCAqL1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXMgPSBlcnI7XFxuLVxcdGlmIChyZXMpIHtcXG4rXFx0aWYgKHJlcyBcXHUwMDI2XFx1MDAyNiAhKGhkLVxcdTAwM2VmbGFncyBcXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcXG4gXFx0XFx0c2VxX2J1Zl9wdXRzKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmLFxcbiBcXHRcXHRcXHQgICAgIFxcXCIgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXNcXFwiLCBzZXFfYnVmX3N0cihcXHUwMDI2c3RhdGUtXFx1MDAzZXBwX2J1ZikpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC0xODA4LDEwICsxODA4LDYgQEAgc3RhdGljIHZvaWQgbnZtZV9lbmFibGVfYWVuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuIFxcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuIHtcXG4tXFxuLVxcdC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZHVlIHRvIEdFTkhEX0ZMX0hJRERFTiAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXFx1MDAzZWhlYWQpKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbiBcXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcXG4gXFx0XFx0Z290byBmYWlsO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KG5zLVxcdTAwM2VjdHJsLVxcdTAwM2VvcHMtXFx1MDAzZW1vZHVsZSkpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcXG5AQCAtMTQ0LDYgKzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxcbiBcXHRcXHRcXHRibGtfZnJlZXplX3F1ZXVlX3N0YXJ0KGgtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcXG4rXFxuK1xcdC8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqL1xcbitcXHRpZiAoIXBhcnRubylcXG4rXFx0XFx0cmV0dXJuIGRpc2stXFx1MDAzZXBhcnQwO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGJkZXYgPSB4YV9sb2FkKFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdHJldHVybiBiZGV2O1xcbit9XFxuK1xcbiB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIHtcXG4gXFx0c3RydWN0IG52bWVfbnMgKm5zID0gcmVxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuQEAgLTE2NSw4ICsxNzgsMTAgQEAgdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bnMtXFx1MDAzZWhlYWQtXFx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xcbi1cXHRmb3IgKGJpbyA9IHJlcS1cXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cXHUwMDNlYmlfbmV4dClcXG4tXFx0XFx0YmlvX3NldF9kZXYoYmlvLCBucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbitcXHRmb3IgKGJpbyA9IHJlcS1cXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cXHUwMDNlYmlfbmV4dCkge1xcbitcXHRcXHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLFxcbitcXHRcXHRcXHRiZGV2X3BhcnRubyhiaW8tXFx1MDAzZWJpX2JkZXYpKSk7XFxuK1xcdH1cXG4gXFx0YmxrX3N0ZWFsX2Jpb3MoXFx1MDAyNm5zLVxcdTAwM2VoZWFkLVxcdTAwM2VyZXF1ZXVlX2xpc3QsIHJlcSk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5zLVxcdTAwM2VoZWFkLVxcdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcXG4gXFxuQEAgLTE5NCw4ICsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG52bWVfcmVxKHJxKS1cXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcXG4tXFx0bnZtZV9yZXEocnEpLVxcdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXFx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBqaWZmaWVzKTtcXG4rXFx0bnZtZV9yZXEocnEpLVxcdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxcbitcXHRcXHRcXHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cXHUwMDNlcGFydCkpLFxcbitcXHRcXHRcXHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbiBcXG5AQCAtMjA4LDcgKzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcbiBcXHRpZiAoIShudm1lX3JlcShycSktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YmRldl9lbmRfaW9fYWNjdChucy1cXHUwMDNlaGVhZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDAsIHJlcV9vcChycSksXFxuK1xcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdCBiZGV2X3BhcnRubyhycS1cXHUwMDNlcGFydCkpLCByZXFfb3AocnEpLFxcbiBcXHRcXHRcXHQgYmxrX3JxX2J5dGVzKHJxKSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQsXFxuIFxcdFxcdFxcdCBudm1lX3JlcShycSktXFx1MDAzZXN0YXJ0X3RpbWUpO1xcbiB9XFxuQEAgLTU0OSw3ICs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZXNyY3UpO1xcbiBcXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xcbiBcXHRpZiAobGlrZWx5KG5zKSkge1xcbi1cXHRcXHRiaW9fc2V0X2RldihiaW8sIG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuK1xcdFxcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXFx1MDAzZWRpc2ssXFxuK1xcdFxcdFxcdFxcdGJkZXZfcGFydG5vKGJpby1cXHUwMDNlYmlfYmRldikpKTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xcbiBcXHRcXHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbmluZGV4IDkyMTNhNTcxNmY5NWEuLmEyNzBjZjEzOTRjN2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5AQCAtMjYwLDcgKzI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpc2tfb3BlbmVycyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbi1cXHRyZXR1cm4gIShkaXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0cmV0dXJuICEoZGlzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBHRU5IRF9GTF9OT19QQVJUKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhdGVzdF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToxNC41NzA1NTc3NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjQxMTM0ODM1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9NVUxUSVBBVEhcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZpY2VfYWRkX2Rpc2tcIixcbiAgICBcImJkZXZfZGlza19jaGFuZ2VkXCIsXG4gICAgXCJkaXNrX3NjYW5fcGFydGl0aW9uc1wiLFxuICAgIFwiYmxrZGV2X2lvY3RsXCIsXG4gICAgXCJudm1lX2ZhaWxvdmVyX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTiksIHdoaWNoIGlzIHByaW1hcmlseSB1c2VkIGJ5IE5WTWUgbXVsdGlwYXRoLiBJdCBhbHNvIHVwZGF0ZXMgTlZNZSBtdWx0aXBhdGggY29kZSB0byBjb3JyZWN0bHkgaGFuZGxlIEkvTyBhbmQgZmFpbG92ZXIgZm9yIHBhcnRpdGlvbnMgb24gaGlkZGVuIGRpc2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgTlZNZSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBOVk1lIGxvb3BiYWNrIHRhcmdldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgzYTkwNzk4ODM2ZjRiN2Q1YTQ3MzhjOGNjNTU2MmJhZWYyYWMyMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCAzMGFjMGZmZTY1MTc0Li4wNTMwMWVlNWQ0Y2E1IDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuKysrIGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQwNiwxNSArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRkZXYgPSBkaXNrX3RvX2RldihkaXNrKTtcbiBcbi1cdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcbi1cdFx0LyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbi1cdFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4tXHRcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4rXHQvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBhcnRpdGlvbiBzY2FuIHdpbGwgYmUgcHJvY2VlZCAqL1xuK1x0aWYgKGdldF9jYXBhY2l0eShkaXNrKSBcdTAwMjZcdTAwMjYgZGlza19oYXNfcGFydHNjYW4oZGlzaykpXG4rXHRcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIFxuLVx0XHRiZGV2X2FkZChkaXNrLVx1MDAzZXBhcnQwLCBkZGV2LVx1MDAzZWRldnQpO1xuLVx0XHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuLVx0XHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuK1x0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbitcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG4rXHRcdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuIFxuK1x0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbm5vdW5jZSB0aGUgZGlzayBhbmQgcGFydGl0aW9ucyBhZnRlciBhbGwgcGFydGl0aW9ucyBhcmVcbiBcdFx0ICogY3JlYXRlZC4gKGZvciBoaWRkZW4gZGlza3MgdWV2ZW50cyByZW1haW4gc3VwcHJlc3NlZCBmb3JldmVyKVxuQEAgLTQ5MSw4ICs0OTEsNyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdGRldl9zZXRfbmFtZShkZGV2LCBcIiVzXCIsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbiBcdGlmIChmd25vZGUpXG4gXHRcdGRldmljZV9zZXRfbm9kZShkZGV2LCBmd25vZGUpO1xuLVx0aWYgKCEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSlcbi1cdFx0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4rXHRkZGV2LVx1MDAzZWRldnQgPSBNS0RFVihkaXNrLVx1MDAzZW1ham9yLCBkaXNrLVx1MDAzZWZpcnN0X21pbm9yKTtcbiBcdHJldCA9IGRldmljZV9hZGQoZGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9mcmVlX2V4dF9taW5vcjtcbkBAIC0xMzY4LDcgKzEzNjcsOCBAQCBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxZiwgdm9pZCAqdilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG4tXHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2ICFiZGV2X25yX3NlY3RvcnMoaGQpKVxuK1x0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFiZGV2X25yX3NlY3RvcnMoaGQpIHx8KGdwLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aW5mbGlnaHQgPSBiZGV2X2NvdW50X2luZmxpZ2h0KGhkKTtcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5pbmRleCBiNWM1OWI3OWNhN2NiLi5hNDg4OTZjNmM3OTFkIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG5AQCAtMTUyLDcgKzE1Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKmNoZWNrX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqaGQpXG4gXG4gXHR9XG4gXHRpZiAocmVzIFx1MDAzZSAwKSB7XG4tXHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbitcdFx0aWYgKCEoaGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG4rXHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzXCIsIHNlcV9idWZfc3RyKFx1MDAyNnN0YXRlLVx1MDAzZXBwX2J1ZikpO1xuIFxuIFx0XHRrZnJlZShzdGF0ZS1cdTAwM2VwcF9idWYuYnVmZmVyKTtcbiBcdFx0cmV0dXJuIHN0YXRlO1xuQEAgLTE2NCw3ICsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFx0ICovXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXMgPSBlcnI7XG4tXHRpZiAocmVzKSB7XG4rXHRpZiAocmVzIFx1MDAyNlx1MDAyNiAhKGhkLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG4gXHRcdHNlcV9idWZfcHV0cyhcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYsXG4gXHRcdFx0ICAgICBcIiB1bmFibGUgdG8gcmVhZCBwYXJ0aXRpb24gdGFibGVcXG5cIik7XG4gXHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbmluZGV4IDEzMjJjNjc4ZjRlYjguLmVkMjFmNGVmMzZjOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuQEAgLTE4MDgsMTAgKzE4MDgsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2VuYWJsZV9hZW4oc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBzdGF0aWMgaW50IG52bWVfbnNfb3BlbihzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4ge1xuLVxuLVx0Lyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBkdWUgdG8gR0VOSERfRkxfSElEREVOICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXHUwMDNlaGVhZCkpKVxuLVx0XHRnb3RvIGZhaWw7XG4gXHRpZiAoIW52bWVfZ2V0X25zKG5zKSlcbiBcdFx0Z290byBmYWlsO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChucy1cdTAwM2VjdHJsLVx1MDAzZW9wcy1cdTAwM2Vtb2R1bGUpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbmluZGV4IDc1ZGJiNTgyODZhMzIuLjVjOTVhMmFiNzc1NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbkBAIC0xNDQsNiArMTQ0LDE5IEBAIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRcdFx0YmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChoLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuK1xuK1x0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG4rXHRpZiAoIXBhcnRubylcbitcdFx0cmV0dXJuIGRpc2stXHUwMDNlcGFydDA7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRiZGV2ID0geGFfbG9hZChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCBwYXJ0bm8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4gYmRldjtcbit9XG4rXG4gdm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHtcbiBcdHN0cnVjdCBudm1lX25zICpucyA9IHJlcS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbkBAIC0xNjUsOCArMTc4LDEwIEBAIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9sb2NrLCBmbGFncyk7XG4tXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpXG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdGZvciAoYmlvID0gcmVxLVx1MDAzZWJpbzsgYmlvOyBiaW8gPSBiaW8tXHUwMDNlYmlfbmV4dCkge1xuK1x0XHRiaW9fc2V0X2RldihiaW8sIG52bWVfdG9fZGlza19wYXJ0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzayxcbitcdFx0XHRiZGV2X3BhcnRubyhiaW8tXHUwMDNlYmlfYmRldikpKTtcbitcdH1cbiBcdGJsa19zdGVhbF9iaW9zKFx1MDAyNm5zLVx1MDAzZWhlYWQtXHUwMDNlcmVxdWV1ZV9saXN0LCByZXEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCw4ICsyMDksOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXHRcdHJldHVybjtcbiBcbiBcdG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyB8PSBOVk1FX01QQVRIX0lPX1NUQVRTO1xuLVx0bnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUgPSBiZGV2X3N0YXJ0X2lvX2FjY3QoZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbi1cdFx0XHRcdFx0XHQgICAgICBqaWZmaWVzKTtcbitcdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KFxuK1x0XHRcdG52bWVfdG9fZGlza19wYXJ0KGRpc2ssIGJkZXZfcGFydG5vKHJxLVx1MDAzZXBhcnQpKSxcbitcdFx0XHRyZXFfb3AocnEpLCBqaWZmaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KTtcbiBcbkBAIC0yMDgsNyArMjI0LDggQEAgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcbiBcdGlmICghKG52bWVfcmVxKHJxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9NUEFUSF9JT19TVEFUUykpXG4gXHRcdHJldHVybjtcbi1cdGJkZXZfZW5kX2lvX2FjY3QobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwLCByZXFfb3AocnEpLFxuK1x0YmRldl9lbmRfaW9fYWNjdChudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0IGJkZXZfcGFydG5vKHJxLVx1MDAzZXBhcnQpKSwgcmVxX29wKHJxKSxcbiBcdFx0XHQgYmxrX3JxX2J5dGVzKHJxKSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZULFxuIFx0XHRcdCBudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSk7XG4gfVxuQEAgLTU0OSw3ICs1NjYsOSBAQCBzdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlc3JjdSk7XG4gXHRucyA9IG52bWVfZmluZF9wYXRoKGhlYWQpO1xuIFx0aWYgKGxpa2VseShucykpIHtcbi1cdFx0YmlvX3NldF9kZXYoYmlvLCBucy1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VkaXNrLFxuK1x0XHRcdFx0YmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKSk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFVzZSBCSU9fUkVNQVBQRUQgdG8gc2tpcCBiaW9fY2hlY2tfZW9kKCkgd2hlbiB0aGlzIGJpb1xuIFx0XHQgKiBlbnRlcnMgc3VibWl0X2Jpb19ub2FjY3QoKSBmb3IgdGhlIHBlci1wYXRoIGRldmljZS4gVGhlIEVPRFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhLi5hMjcwY2YxMzk0YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkaXNrX29wZW5lcnMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gICovXG4gc3RhdGljIGlubGluZSBib29sIGRpc2tfaGFzX3BhcnRzY2FuKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHJldHVybiAhKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChHRU5IRF9GTF9OT19QQVJUIHwgR0VOSERfRkxfSElEREVOKSkgXHUwMDI2XHUwMDI2XG4rXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9OT19QQVJUKSBcdTAwMjZcdTAwMjZcbiBcdFx0IXRlc3RfYml0KEdEX1NVUFBSRVNTX1BBUlRfU0NBTiwgXHUwMDI2ZGlzay1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MTQuNTcwNTYwMTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MjM0ODk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCdzIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzOiBgYmxvY2svZ2VuaGQuY2AsIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AsIGFuZCB0aGUgTlZNZSBkcml2ZXIgY29kZSBpbiBgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgaGFuZGxlIFwiaGlkZGVuXCIgZGlza3MsIHNwZWNpZmljYWxseSB0aG9zZSBmbGFnZ2VkIHdpdGggYEdFTkhEX0ZMX0hJRERFTmAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIGFyZSBnb2luZyB0byBtb2RpZnkgcGFydGl0aW9uIHNjYW5uaW5nIGZvciBoaWRkZW4gZGlza3MuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldHMsIHRoZSBwYXRjaCBpcyByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgdGhhdCBwcmV2ZW50ZWQgcGFydGl0aW9uIHNjYW5uaW5nIG9uIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhlIGBiZGV2X2FkZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgZnVuY3Rpb25zIGFyZSBub3cgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGBHRU5IRF9GTF9ISURERU5gIGZsYWcuIFdlIGFsc28gY2hhbmdlIGBkaXNrX2hhc19wYXJ0c2NhbmAgdG8gbm90IGNoZWNrIGBHRU5IRF9GTF9ISURERU5gLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGhpZGRlbiBkaXNrcyAqY2FuKiBub3cgaGF2ZSBwYXJ0aXRpb25zLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhciwgd2Ugc2hvdWxkIGJlIGF3YXJlIG9mIGFsbCBwYXJ0aXRpb25zLCBldmVuIG9uZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHVzZSBkaXJlY3RseSwgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIGRpc2suXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGltcGFjdCBvbiBOVk1lIG11bHRpcGF0aC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHBheSBjbG9zZXIgYXR0ZW50aW9uLiBUaGUgY2hhbmdlcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHNlZW0gdG8gYWRhcHQgc2V2ZXJhbCBOVk1lIGZ1bmN0aW9ucyBsaWtlIGBudm1lX2ZhaWxvdmVyX3JlcWAsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBhbmQgb3RoZXJzIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBwYXJ0aXRpb25zIG9uIHRoZXNlIHByZXZpb3VzbHkgaGlkZGVuIE5WTWUgZGlza3MuIEhvbGQgb24sIHRoZSBgR0VOSERfRkxfSElEREVOYCBmbGFnIGlzIHVzZWQgaW4gTlZNZSBtdWx0aXBhdGguIFRoaXMgbWVhbnMgYSBjaGFuZ2UgaW4gYmVoYXZpb3IsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIG9mIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHJlYWNoYWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJlYWNoYWJsZSB1c2luZyB0aGUgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE5WTWUgaXMgcmVhY2hhYmxlLCBldmVuIHdpdGggUUVNVSwgc2luY2UgdGhlcmUgYXJlIGxvb3BiYWNrIGFuZCBRRU1VIE5WTWUgZGV2aWNlcy4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSBjYW4gdXNlIHRoZSBOVk1lIGxvb3AgdGFyZ2V0IGZvciB0ZXN0aW5nIE5WTWUgbXVsdGlwYXRoLiBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjIuNzEyOTExNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMDYxMzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz01PWNvbmZpZyBCTEtfREVWX05WTUVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxNzpjb25maWcgTlZNRV9NVUxUSVBBVEhcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIk5WTWUgbXVsdGlwYXRoIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjI1LjQxMzUzMTIyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkzNTUzMDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOVk1lIFRhcmdldCBMb29wIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLiBSaWdodCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIGZldyBrZXkgYXNwZWN0czogZmlyc3QsIGlzIHRoaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlbiwgd2hhdCBsZXZlbCBvZiBjb250cm9sIGRvZXMgdGhpcyBvcHRpb24gb2ZmZXI/IElzIGl0IGEgY29tcGlsZS10aW1lIGRpcmVjdGl2ZSwgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgYm90aD9cblxuTW9yZSBzcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lOiB3aGF0IGV4YWN0bHkgKmlzKiB0aGUgXCJOVk1lIHRhcmdldCBsb29wXCI/IElzIGl0IHJlZmVycmluZyB0byB0aGUgc29mdHdhcmUgc2lkZSBvZiBhbiBOVk1lIHRhcmdldCBlbXVsYXRvciBvciBpcyB0aGVyZSBhbm90aGVyIG51YW5jZSBJJ20gbWlzc2luZz8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBOVk1lIHRhcmdldCBmZWF0dXJlcy4gSXMgdGhpcyBqdXN0IGEgdGVzdCBzZXR1cCwgb3IgaXMgaXQgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlPyBJIG5lZWQgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcyBpbiBpbnZlc3RpZ2F0aW5nIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjE0LjM0OTA2NTU4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc1NDQ0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZz0yOT1jb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk5WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjE3LjEyNDUxNTAxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc1MzMzNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gYE5WTUVfTVVMVElQQVRIYC4gQmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0J3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkgb2Ygd2hhdCB0aGlzIGlzICphY3R1YWxseSogcmVseWluZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3RvcmFnZSBzdGFjay4gSXMgaXQgdGllZCBkaXJlY3RseSB0byBzcGVjaWZpYyBOVk1lIGNvbnRyb2xsZXIgZHJpdmVycz8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBsaWtlIGRldmljZSBtYXBwZXIgb3IgbXVsdGlwYXRoZCB0aGF0IGl0IGxldmVyYWdlcz8gSSBoYXZlIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBsYXllcnMgaGVyZSwgb3RoZXJ3aXNlLCBJJ20ganVzdCBwb2tpbmcgYXJvdW5kIGluIHRoZSBkYXJrLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBzdHVmZiBmaXJzdC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIE5WTWUgY29tbWFuZHMgb3IgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGVzc2VudGlhbCBmb3IgbXVsdGlwYXRoaW5nIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbj8gQW5kIHRoZW4gd2hhdCBhYm91dCB0aGUgaGlnaGVyIGxldmVsPyBJcyBpdCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24taGVhdnksIG9yIG1vcmUga2VybmVsLWRyaXZlbiwgcmVxdWlyaW5nIGNlcnRhaW4gbW9kdWxlIGJ1aWxkcyBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzPyBJIGNhbiBhbG1vc3Qgc2VlIHRoZSBjb2RlIHN0cnVjdHVyZSwgdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGluY2x1ZGUgZGlyZWN0aXZlcyBhbHJlYWR5LiBJIHdpbGwgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBhbGwgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MDoyOS40OTk4NTIxNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTEyODQ4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTlZNRV9NVUxUSVBBVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUwOjMxLjk5NDk4OTM5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDQ3MDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIE5WTWUgSG9zdCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgTlZNZSBob3N0IGRyaXZlciBpcyBjb25maWd1cmVkLiBJIGtub3cgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXIncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAxNywgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ3VhcmRlZCBieSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucywgaG93IHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgZHJpdmVyIG1vZHVsZXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGV4cGxvcmUgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBrbm9icyBhdmFpbGFibGUgZm9yIHRoaXMgTlZNZSBob3N0IGNvbnRyb2xsZXIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkcml2ZXIncyBmbGV4aWJpbGl0eSBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgaXQncyBpbnRlbmRlZCB0byBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6MzUuMjk5NzAyMTE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdCAgVGhlIE5WTSBFeHByZXNzIGRyaXZlciBpcyBmb3Igc29saWQgc3RhdGUgZHJpdmVzIGRpcmVjdGx5XFxuICAxMTpcXHRcXHQgIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFBDSSBFeHByZXNzIGJ1cy4gIElmIHlvdSBrbm93IHlvdVxcbiAgMTI6XFx0XFx0ICBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgaXQgaXMgc2FmZSB0byBhbnN3ZXIgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG52bWUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9DT1JFXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHN1cHBvcnQgZm9yIG11bHRpcGF0aCBhY2Nlc3MgdG8gTlZNZVxcbiAgMjI6XFx0XFx0ICBzdWJzeXN0ZW1zLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHN1cHBvcnQgZm9yIE5WTWUgbXVsdGlwYXRoXFxuICAyMzpcXHRcXHQgIGFjY2VzcyBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBzdXBwb3J0XFxuICAyNDpcXHRcXHQgIGZvciBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXMgZXhjbHVkZWQgZnJvbSB0aGUga2VybmVsLiBXaGVuIHRoaXNcXG4gIDI1OlxcdFxcdCAgb3B0aW9uIGlzIGRpc2FibGVkIGVhY2ggY29udHJvbGxlci9uYW1lc3BhY2UgcmVjZWl2ZXMgaXRzXFxuICAyNjpcXHRcXHQgIG93biAvZGV2L252bWVYblkgZGV2aWNlIGVudHJ5IGFuZCBOVk1lIG11bHRpcGF0aCBhY2Nlc3MgaXNcXG4gIDI3OlxcdFxcdCAgbm90IHN1cHBvcnRlZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MDozNS4yOTk4MzgwNzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNjc0Nzg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVk1lIE11bHRpcGF0aCBhbmQgUGFydGl0aW9uIEhhbmRsaW5nOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGBOVk1FX01VTFRJUEFUSGAgZnVuY3Rpb25hbGl0eSBpbnRyaW5zaWNhbGx5IHJlbGllcyBvbiBgTlZNRV9DT1JFYCDigJMgdGhhdCBtYWtlcyBzZW5zZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCdzIGhpdHRpbmcgc29tZSBjb3JlIGJsb2NrIGxheWVyIGZpbGVzOiBgYmxvY2svZ2VuaGQuY2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AuICBUaGF0J3MgYSBwcmV0dHkgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGFzcGVjdHMgb2YgaG93IGRpc2tzIGFuZCBwYXJ0aXRpb25zIGFyZSBoYW5kbGVkLiAgV2UncmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgTlZNZSBkcml2ZXIgaXRzZWxmIHdpdGggYGRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhYm91dCBlbmFibGluZyBwYXJ0aXRpb25zIG9uIHdoYXQgSSdtIGd1ZXNzaW5nIGFyZSBcImhpZGRlblwiIGRpc2tzLCBsaWtlbHkgdXNlZCBpbiBhbiBOVk1lIG11bHRpcGF0aCBzZXR1cC4gVGhhdCdzIGEgZGVmaW5pdGUgZ2FtZS1jaGFuZ2VyIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBOVk1lIGRldmljZXMgaW4gYSBtdWx0aXBhdGhlZCBlbnZpcm9ubWVudC4gIEdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNvcmUgZmlsZXMgaW52b2x2ZWQsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gR290dGEgbG9vayBmb3IgdGhvc2UgZWRnZSBjYXNlcyFcblxuTGV0J3Mgc2Vl4oCmIGZvciBmdXp6aW5nLCB0aGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZTogYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCwgYGFkZF9kaXNrX2ZpbmFsYCwgYF9fYWRkX2Rpc2tgLCBhbmQgYGNoZWNrX3BhcnRpdGlvbmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgZW50cnkgcG9pbnRzIGFuZCBjcml0aWNhbCBkZWNpc2lvbiBwb2ludHMuXG5cbldhaXQgYSBzZWNvbmTigKYgaXMgYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBzdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSEgTGV0IG1lIGp1bXAgaW50byBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgIHRvIHZlcmlmeSB0aGF0IGZ1bmN0aW9uJ3Mgc2NvcGUuIEdvdHRhIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBzdHJhdGVnaWVzIGFyZSBoaXR0aW5nIHRoZSByaWdodCB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6NDAuNTA2NTg5MzgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY4OTM4ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfbnNfaGVhZF9zdWJtaXRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUxNj1zdGF0aWMgYm9vbCBudm1lX2F2YWlsYWJsZV9wYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDktXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NTUwOnN0YXRpYyB2b2lkIG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NTEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NjQ1PWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBudm1lX25zX2hlYWRfb3BzID0ge1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY0Ni1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjY0NzpcXHQuc3VibWl0X2Jpb1xcdD0gbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8sXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ4LVxcdC5vcGVuXFx0XFx0PSBudm1lX25zX2hlYWRfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTA6NDIuNzc1NTM0MjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMDA3MDQxNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVk1lIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuIEl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIHVzdWFsbHkgdGhyb3dzIGEgcmVkIGZsYWcgZm9yIEFQSSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGl0J3MgdXNlZCBhcyBgLnN1Ym1pdF9iaW9gIHdpdGhpbiBgbnZtZV9uc19oZWFkX29wc2AsIG1ha2luZyBpdCBhbiBlbnRyeSBwb2ludCBpbiB0aGF0IGNvbnRleHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYmVzdCBwcmFjdGljZSBpcyB0byBsZWFuIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBiZWNhdXNlIG9mIHBvdGVudGlhbCBpbmxpbmluZyBhbmQgbGFjayBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGZvciB0aGUgbGF0dGVyLlxuXG5CdXQsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSBpdCwgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCBJIHRoaW5rIHdlJ3JlIHNhZmUgd2l0aCB0aGlzIG9uZSwgZ2l2ZW4gdGhlIHdheSBpdCdzIHVzZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdsbCBhbHNvIGNvbnNpZGVyIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGFuZCBgbnZtZV9mYWlsb3Zlcl9yZXFgIGFzIHBvdGVudGlhbCBBUEkgZW50cnkgcG9pbnRzIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgY292ZXJlZC4gVGhpcyBoZWxwcyBtYWludGFpbiBjbGFyaXR5IGFuZCBlYXNlIG9mIGZ1dHVyZSBtYWludGVuYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoxNS43ODI1ODA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NTU2MzkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTYwPXZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE5Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxOTM6dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTUtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjIxNjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxNy1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDc5PXZvaWQgbnZtZV9tcGF0aF9yZW1vdmVfZGlzayhzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA4MDp2b2lkIG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDgxLXZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExODY9c3RhdGljIGlubGluZSB2b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTg4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTE4OTpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5MC17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTI2ND1zdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjY2LVxcdGlmIChycS1cXHUwMDNlY21kX2ZsYWdzIFxcdTAwMjYgUkVRX05WTUVfTVBBVEgpXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEyNjc6XFx0XFx0bnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTI2OC1cXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUyOjE4LjQ0ODE1MTAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTI4OTczMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5WTWUgTXVsdGlwYXRoIFJlcXVlc3QgSGFuZGxpbmcgLSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgaXMgZGVmaW5pdGVseSBleHBvc2VkLCBubyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQgZm9yIG11bHRpcGF0aCByZXF1ZXN0IGhhbmRsaW5nLCB0aGUgY29yZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgYWxzbyBhdmFpbGFibGUgZXh0ZXJuYWxseT8gVGhhdCdzIGEga2V5IHBpZWNlOyBpdCB3b3VsZCBkaWN0YXRlIGhvdyB3ZSBoYW5kbGUgZmFpbG92ZXIgc2NlbmFyaW9zIGluIGNvbmp1bmN0aW9uIHdpdGggdGhvc2UgcmVxdWVzdHMuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCdzIGV4cG9ydGVkIG9yIGlmIHRoZXJlJ3MgYW5vdGhlciBtZWNoYW5pc20gaW52b2x2ZWQuIFRpbWUgZm9yIGEgcXVpY2sgbG9vayBhdCB0aGUgZXhwb3J0IHRhYmxlLi4uIG9yIG1heWJlIEkgaGF2ZSBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgdGhlIHN0cnVjdHVyZSBoZXJlLiBMZXQgbWUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyMi43NjEwNTIwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjEyODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX2ZhaWxvdmVyX3JlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMS1cXHRjYXNlIEZBSUxPVkVSOlxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI6XFx0XFx0bnZtZV9mYWlsb3Zlcl9yZXEocmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAzLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTE0Nz1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqbnZtZV90b19kaXNrX3BhcnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE1OS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoxNjA6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTE2MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTA2Mz12b2lkIG52bWVfbXBhdGhfZGVmYXVsdF9pb3BvbGljeShzdHJ1Y3QgbnZtZV9zdWJzeXN0ZW0gKnN1YnN5cyk7XFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjEwNjQ6dm9pZCBudm1lX2ZhaWxvdmVyX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA2NS12b2lkIG52bWVfa2lja19yZXF1ZXVlX2xpc3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTExMTQ9c3RhdGljIGlubGluZSBib29sIG52bWVfY3RybF91c2VfYW5hKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExNy19XFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjExMTg6c3RhdGljIGlubGluZSB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExMTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyNC45MjMxODQwODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDM4MTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE5WTWUgRmFpbG92ZXIgSXNzdWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBudm1lX2ZhaWxvdmVyX3JlcWAgZnVuY3Rpb24uIEl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgdXNlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBhbmQgaW50ZXJhY3QuIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBgYWRkX2Rpc2tfZmluYWxgLiBJJ20gcHJldHR5IHN1cmUgdGhhdCBvbmUgKmlzKiBzdGF0aWMsIGl0J3MgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBCdXQgaG9sZCBvbiwgdGhlIGNhbGxpbmcgY2hhaW4gdGhlcmUgaXMgaW1wb3J0YW50OiBgZGV2aWNlX2FkZF9kaXNrYCBjYWxscyBgX19hZGRfZGlza2AsIGFuZCAqdGhhdCogdGhlbiBjYWxscyBgYWRkX2Rpc2tfZmluYWxgLiBTbywgZXZlbiBpZiBgYWRkX2Rpc2tfZmluYWxgIGlzIHN0YXRpYywgdGhhdCBkb2Vzbid0IHRlbGwgdGhlIGZ1bGwgc3RvcnkgYWJvdXQgdGhlIGZhaWxvdmVyIGxvZ2ljLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGggYXJvdW5kIGVpdGhlciBgX19hZGRfZGlza2Agb3IgYGRldmljZV9hZGRfZGlza2AsIHNlZSB3aGVyZSB0aG9zZSBhcmUgZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgdGhleSdyZSBkb2luZy4gSXQncyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MjoyOC45ODc1NjkzNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE3Mzc2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2aWNlX2FkZF9kaXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jPTgyOT1zdGF0aWMgaW50IHViZF9hZGQoaW50IG4sIGNoYXIgKiplcnJvcl9vdXQpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYy04OTUtXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM6ODk2OlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2dWJkX2Rldi1cXHUwMDNlcGRldi5kZXYsIGRpc2ssIHViZF9hdHRyX2dyb3Vwcyk7XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtODk3LVxcdGlmIChlcnIpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChhZGRfZGlza19md25vZGUpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02MTQtLyoqXFxuYmxvY2svZ2VuaGQuYzo2MTU6ICogZGV2aWNlX2FkZF9kaXNrIC0gYWRkIGRpc2sgaW5mb3JtYXRpb24gdG8ga2VybmVsIGxpc3RcXG5ibG9jay9nZW5oZC5jLTYxNi0gKiBAcGFyZW50OiBwYXJlbnQgZGV2aWNlIGZvciB0aGUgZGlza1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02MjItICovXFxuYmxvY2svZ2VuaGQuYzo2MjM6aW50IF9fbXVzdF9jaGVjayBkZXZpY2VfYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9nZW5oZC5jLTYyNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3VwcylcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNjI3LX1cXG5ibG9jay9nZW5oZC5jOjYyODpFWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XFxuYmxvY2svZ2VuaGQuYy02MjktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTc3OT1zdGF0aWMgdm9pZCBkaXNhYmxlX2Vsdl9zd2l0Y2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTc5Ni0gKlxcbmJsb2NrL2dlbmhkLmM6Nzk3OiAqIFRoaXMgaXMgdGhlIGNvdW50ZXIgdG8gdGhlIHJlc3BlY3RpdmUgZGV2aWNlX2FkZF9kaXNrKCkgY2FsbC5cXG5ibG9jay9nZW5oZC5jLTc5OC0gKlxcbi0tXFxuYmxvY2svZ2VuaGQuYy04MDAtICogd2l0aCBwdXRfZGlzaygpLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRlbF9nZW5kaXNrKCksIGlmXFxuYmxvY2svZ2VuaGQuYzo4MDE6ICogZGV2aWNlX2FkZF9kaXNrKCkgd2FzIHVzZWQuXFxuYmxvY2svZ2VuaGQuYy04MDItICpcXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZGlza19hdHRyX2dyb3Vwc1tdID0ge1xcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjY2LSAqXFxuYmxvY2svZ2VuaGQuYzoxMjY3OiAqIERyaXZlcnMgd2hpY2ggdXNlZCBkZXZpY2VfYWRkX2Rpc2soKSBoYXZlIGEgZ2VuZGlzayB3aXRoIGEgcmVxdWVzdF9xdWV1ZVxcbmJsb2NrL2dlbmhkLmMtMTI2OC0gKiBhc3NpZ25lZC4gU2luY2UgdGhlIHJlcXVlc3RfcXVldWUgc2l0cyBvbiB0b3Agb2YgdGhlIGdlbmRpc2sgZm9yIHRoZXNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYz0zMzA9YW9lYmxrX2dkYWxsb2Modm9pZCAqdnApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MDktXFxuZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmM6NDEwOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhOVUxMLCBnZCwgYW9lX2F0dHJfZ3JvdXBzKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy00MTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM9NDU2Nz1zdGF0aWMgaW50IF9faW5pdCBkb19mbG9wcHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9mbG9wcHkuYy00NzI5LVxcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6NDczMDpcXHRcXHRlcnIgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmZsb3BweV9kZXZpY2VbZHJpdmVdLmRldixcXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jLTQ3MzEtXFx0XFx0XFx0XFx0ICAgICAgZGlza3NbZHJpdmVdWzBdLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYz0zMzk5PXN0YXRpYyBpbnQgbXRpcF9ibG9ja19pbml0aWFsaXplKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzQ3OS1cXHQgKiBpZiByZWJ1aWxkIHBlbmRpbmcsIHN0YXJ0IHRoZSBzZXJ2aWNlIHRocmVhZCwgYW5kIGRlbGF5IHRoZSBibG9ja1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozNDgwOlxcdCAqIHF1ZXVlIGNyZWF0aW9uIGFuZCBkZXZpY2VfYWRkX2Rpc2soKVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDgxLVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTM0OTctXFx0LyogRW5hYmxlIHRoZSBibG9jayBkZXZpY2UgYW5kIGFkZCBpdCB0byAvZGV2ICovXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jOjM0OTg6XFx0cnYgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRkLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRkLVxcdTAwM2VkaXNrLCBtdGlwX2Rpc2tfYXR0cl9ncm91cHMpO1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zNDk5LVxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTM4Mz1zdGF0aWMgaW50IHBzM2Rpc2tfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqX2RldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jLTQ2OS1cXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzo0NzA6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRldi1cXHUwMDNlc2JkLmNvcmUsIGdlbmRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jLTQ3MS1cXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYz02MDU9c3RhdGljIGludCBwczN2cmFtX3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzdnJhbS5jLTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYzo3NTA6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmRldi1cXHUwMDNlY29yZSwgZ2VuZGlzaywgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9wczN2cmFtLmMtNzUxLVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM9NzA4MD1zdGF0aWMgc3NpemVfdCBkb19yYmRfYWRkKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYy03MTU4LVxcbmRyaXZlcnMvYmxvY2svcmJkLmM6NzE1OTpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2cmJkX2Rldi1cXHUwMDNlZGV2LCByYmRfZGV2LVxcdTAwM2VkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTcxNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYz03ODQ9c3RhdGljIGludCBwcm9iZV9kaXNrKHN0cnVjdCB2ZGNfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtODgxLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmM6ODgyOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2cG9ydC1cXHUwMDNldmlvLnZkZXYtXFx1MDAzZWRldiwgZywgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYy04ODMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU0Mi1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTQzOlxcdGVyciA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2dmRldi1cXHUwMDNlZGV2LCB2YmxrLVxcdTAwM2VkaXNrLCB2aXJ0YmxrX2F0dHJfZ3JvdXBzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTQ0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIzMTI9c3RhdGljIHZvaWQgYmxrZnJvbnRfY29ubmVjdChzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjM5NC1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIzOTU6XFx0ZXJyID0gZGV2aWNlX2FkZF9kaXNrKFxcdTAwMjZpbmZvLVxcdTAwM2V4YmRldi1cXHUwMDNlZGV2LCBpbmZvLVxcdTAwM2VnZCwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMzk2LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzA4OC1cXHRzZXRfY2FwYWNpdHkoenJhbS1cXHUwMDNlZGlzaywgMCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA4OTpcXHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgenJhbS1cXHUwMDNlZGlzaywgenJhbV9kaXNrX2dyb3Vwcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzA5MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM9MjA3Nz1zdGF0aWMgaW50IG1zYl9pbml0X2Rpc2soc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZClcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIxMjgtXFx0bXNiX3N0YXJ0KGNhcmQpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jOjIxMjk6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmNhcmQtXFx1MDAzZWRldiwgbXNiLVxcdTAwM2VkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0yMTMwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jPTEwOTk9c3RhdGljIGludCBtc3Byb19ibG9ja19pbml0X2Rpc2soc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZClcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjUtXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6MTE2NjpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2Y2FyZC1cXHUwMDNlZGV2LCBtc2ItXFx1MDAzZWRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTExNjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0yNzY9aW50IGFkZF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpuZXcpXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTM4MS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjM4MjpcXHRyZXQgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNm5ldy1cXHUwMDNlbXRkLVxcdTAwM2VkZXYsIGdkLCBOVUxMKTtcXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTM4My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM9MzQ5PWludCB1YmlibG9ja19jcmVhdGUoc3RydWN0IHViaV92b2x1bWVfaW5mbyAqdmkpXFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy00MjYtXFx0LyogTXVzdCBiZSB0aGUgbGFzdCBzdGVwOiBhbnlvbmUgY2FuIGNhbGwgZmlsZSBvcHMgZnJvbSBub3cgb24gKi9cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYzo0Mjc6XFx0cmV0ID0gZGV2aWNlX2FkZF9kaXNrKHZpLVxcdTAwM2VkZXYsIGRldi1cXHUwMDNlZ2QsIE5VTEwpO1xcbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTQyOC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9MTQ5Nj1zdGF0aWMgaW50IGJ0dF9ibGtfaW5pdChzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy0xNTIyLVxcdHNldF9jYXBhY2l0eShidHQtXFx1MDAzZWJ0dF9kaXNrLCBidHQtXFx1MDAzZW5sYmEgKiBidHQtXFx1MDAzZXNlY3Rvcl9zaXplIFxcdTAwM2VcXHUwMDNlIDkpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjE1MjM6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmJ0dC1cXHUwMDNlbmRfYnR0LVxcdTAwM2VkZXYsIGJ0dC1cXHUwMDNlYnR0X2Rpc2ssIE5VTEwpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTE1MjQtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3MS1cXHR9XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU3MjpcXHRyYyA9IGRldmljZV9hZGRfZGlzayhkZXYsIGRpc2ssIHBtZW1fYXR0cmlidXRlX2dyb3Vwcyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDIyNT1zdGF0aWMgdm9pZCBudm1lX2FsbG9jX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI5Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDI5ODpcXHRpZiAoZGV2aWNlX2FkZF9kaXNrKGN0cmwtXFx1MDAzZWRldmljZSwgbnMtXFx1MDAzZWRpc2ssIG52bWVfbnNfYXR0cl9ncm91cHMpKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00Mjk5LVxcdFxcdGdvdG8gb3V0X2NsZWFudXBfbnNfZnJvbV9saXN0O1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9ODA5PXN0YXRpYyB2b2lkIG52bWVfbXBhdGhfc2V0X2xpdmUoc3RydWN0IG52bWVfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODE4LVxcdCAqIHRlc3RfYW5kX3NldF9iaXQoKSBpcyB1c2VkIGJlY2F1c2UgaXQgaXMgcHJvdGVjdGluZyBhZ2FpbnN0IHR3byBudm1lXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6ODE5OlxcdCAqIHBhdGhzIHNpbXVsdGFuZW91c2x5IGNhbGxpbmcgZGV2aWNlX2FkZF9kaXNrKCkgb24gdGhlIHNhbWUgbmFtZXNwYWNlXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODIwLVxcdCAqIGhlYWQuXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy04MjItXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE5WTUVfTlNIRUFEX0RJU0tfTElWRSwgXFx1MDAyNmhlYWQtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjgyMzpcXHRcXHRyYyA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2aGVhZC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VkZXYsIGhlYWQtXFx1MDAzZWRpc2ssXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtODI0LVxcdFxcdFxcdFxcdCAgICAgbnZtZV9uc19hdHRyX2dyb3Vwcyk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jPTY3PWludCBkYXNkX2dlbmRpc2tfYWxsb2Moc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xMjQtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYzoxMjU6XFx0cmMgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNmJhc2UtXFx1MDAzZWNkZXYtXFx1MDAzZWRldiwgYmxvY2stXFx1MDAzZWdkcCwgTlVMTCk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0xMjYtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jPTU1Mz1kY3NzYmxrX2FkZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNzA5LVxcdGdldF9kZXZpY2UoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6NzEwOlxcdHJjID0gZGV2aWNlX2FkZF9kaXNrKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBkZXZfaW5mby1cXHUwMDNlZ2QsIE5VTEwpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNzExLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM9NDM0PWludCBzY21fYmxrX2Rldl9zZXR1cChzdHJ1Y3Qgc2NtX2Jsa19kZXYgKmJkZXYsIHN0cnVjdCBzY21fZGV2aWNlICpzY21kZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTQ5MC1cXHRzZXRfY2FwYWNpdHkoYmRldi1cXHUwMDNlZ2VuZGlzaywgc2NtZGV2LVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIDkpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6NDkxOlxcdHJldCA9IGRldmljZV9hZGRfZGlzayhcXHUwMDI2c2NtZGV2LVxcdTAwM2VkZXYsIGJkZXYtXFx1MDAzZWdlbmRpc2ssIE5VTEwpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmMtNDkyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0zOTkzPXN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy00MTA3LVxcbmRyaXZlcnMvc2NzaS9zZC5jOjQxMDg6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soZGV2LCBnZCwgTlVMTCk7XFxuZHJpdmVycy9zY3NpL3NkLmMtNDEwOS1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jPTYxOT1zdGF0aWMgaW50IHNyX3Byb2JlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTcwMy1cXG5kcml2ZXJzL3Njc2kvc3IuYzo3MDQ6XFx0ZXJyb3IgPSBkZXZpY2VfYWRkX2Rpc2soXFx1MDAyNnNkZXYtXFx1MDAzZXNkZXZfZ2VuZGV2LCBkaXNrLCBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy03MDUtXFx0aWYgKGVycm9yKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD03OTM9aW50IF9fbXVzdF9jaGVjayBhZGRfZGlza19md25vZGUoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNzk1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjc5NjppbnQgX19tdXN0X2NoZWNrIGRldmljZV9hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNzk3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTc5OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC03OTkte1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6ODAwOlxcdHJldHVybiBkZXZpY2VfYWRkX2Rpc2soTlVMTCwgZGlzaywgTlVMTCk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC04MDEtfVxcbi0tXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnM9OTg9ICAgIHB1YiBmbiBidWlsZFxcdTAwM2NUOiBPcGVyYXRpb25zXFx1MDAzZShcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTE4My0gICAgICAgICAgICB1bnNhZmUge1xcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzOjE4NDogICAgICAgICAgICAgICAgYmluZGluZ3M6OmRldmljZV9hZGRfZGlzayhjb3JlOjpwdHI6Om51bGxfbXV0KCksIGdlbmRpc2ssIGNvcmU6OnB0cjo6bnVsbF9tdXQoKSlcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0xODUtICAgICAgICAgICAgfSxcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTE5MC0gICAgICAgIC8vIElOVkFSSUFOVDogYGdlbmRpc2tgIHdhcyBpbml0aWFsaXplZCBhYm92ZS5cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yczoxOTE6ICAgICAgICAvLyBJTlZBUklBTlQ6IGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB2aWEgYGRldmljZV9hZGRfZGlza2AgYWJvdmUuXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMtMTkyLSAgICAgICAgLy8gSU5WQVJJQU5UOiBgZ2VuZGlzay5xdWV1ZS5xdWV1ZV9kYXRhYCBpcyBzZXQgdG8gYGRhdGFgIGluIHRoZSBjYWxsIHRvXFxuLS1cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycy0yMDYtLy8vICAtIGBnZW5kaXNrYCB3YXMgYWRkZWQgdG8gdGhlIFZGUyB0aHJvdWdoIGEgY2FsbCB0b1xcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzOjIwNzovLy8gICAgYGJpbmRpbmdzOjpkZXZpY2VfYWRkX2Rpc2tgLlxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzLTIwOC0vLy8gIC0gYHNlbGYuZ2VuZGlzay5xdWV1ZS5xdWV1ZWRhdGFgIGlzIGluaXRpYWxpemVkIGJ5IGEgY2FsbCB0byBgRm9yZWlnbk93bmFibGU6OmludG9fZm9yZWlnbmAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUyOjMxLjIzOTMxMzYwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODIwNzI4MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIERpc2sgQWRkaXRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgZGV2aWNlX2FkZF9kaXNrYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCwgcmlnaHQ/IEFuZCBgYWRkX2Rpc2tgIGl0c2VsZiwgdGhhdCBpbmxpbmUgZnVuY3Rpb24sIGp1c3QgY2FsbHMgYGRldmljZV9hZGRfZGlza2AuICBNYWtlcyBzZW5zZSwgdGhhdCdzIGNsYXNzaWMgZW5jYXBzdWxhdGlvbi4gR29vZC4gVGhlcmVmb3JlLCBJIHNob3VsZCBjZW50ZXIgbXkgYXR0ZW50aW9uIG9uIGBkZXZpY2VfYWRkX2Rpc2tgIOKAkyBpdCdzIHRoZSByaWdodCBzeW1ib2wgdG8gZGlnIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZGlzayBhZGRpdGlvbiBwcm9jZXNzIHdvcmtzLlxuXG5IbW0sIGJ1dCB3YWl0Li4uIEknbSBqdXN0IHJlY2FsbGluZyBzb21ldGhpbmcuIFRoZSBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbiwgSSAqdGhpbmsqIHRoYXQncyBzdGF0aWMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgbG9jYXRpb24uIE9oLCByaWdodCwgaXQncyBkZWZpbmVkIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBPa2F5LCB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBOb3csIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaW5ncyBhcmUgcmVhbGx5IGltcGFjdGVkLiBTbywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mjo0OS40NDY2MDA0MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjgzNjIzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcGFydGl0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTExMz1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpdGlvbnMoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTExOC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoxMTk6c3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0xMjAte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NTg0PXN0YXRpYyBpbnQgYmxrX2FkZF9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTkxLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjU5MjpcXHRzdGF0ZSA9IGNoZWNrX3BhcnRpdGlvbihkaXNrKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OTMtXFx0aWYgKCFzdGF0ZSlcXG4tLVxcbmZzL3VkZi9zdXBlci5jPTEwNDY9c3RhdGljIHN0cnVjdCB1ZGZfYml0bWFwICp1ZGZfc2JfYWxsb2NfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpbmRleClcXG4tLVxcbmZzL3VkZi9zdXBlci5jLTEwNTgtXFxuZnMvdWRmL3N1cGVyLmM6MTA1OTpzdGF0aWMgaW50IGNoZWNrX3BhcnRpdGlvbl9kZXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvdWRmL3N1cGVyLmMtMTA2MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFydGl0aW9uRGVzYyAqcCxcXG4tLVxcbmZzL3VkZi9zdXBlci5jPTExMDg9c3RhdGljIGludCB1ZGZfZmlsbF9wYXJ0ZGVzY19pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy91ZGYvc3VwZXIuYy0xMTQwLVxcbmZzL3VkZi9zdXBlci5jOjExNDE6XFx0ZXJyID0gY2hlY2tfcGFydGl0aW9uX2Rlc2Moc2IsIHAsIG1hcCk7XFxuZnMvdWRmL3N1cGVyLmMtMTE0Mi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mjo1MS43MTQ5Njc5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ0MzQ3MTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFydGl0aW9uaW5nIExvZ2ljKipcblxuT2theSwgc28gYGNoZWNrX3BhcnRpdGlvbmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgaXQncyBnZXR0aW5nIGludm9rZWQgYnkgYGJsa19hZGRfcGFydGl0aW9uc2AuICBUaGF0IG1ha2VzIHNlbnNlLCByaWdodD8gV2UncmUgYWRkaW5nIHBhcnRpdGlvbnMsIGFuZCB3ZSBuZWVkIHRvIGNoZWNrIHRoZW0uIE5vdywgd2hlcmUgYXJlIHRob3NlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20/IFRoZSB0ZXh0IG1lbnRpb25zIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AgYW5kIGBiZGV2X2Rpc2tfY2hhbmdlZGAuICBMZXQncyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdobydzIGtpY2tpbmcgb2ZmIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHBhcnRpdGlvbiBjaGVja2luZy4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTM6MDkuMTU4NDQzNTU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4NTMwODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2tfc2Nhbl9wYXJ0aXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay5oPTY0Nj1zdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX2FsbG9jX3F1ZXVlKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgaW50IG5vZGVfaWQpO1xcbmJsb2NrL2Jsay5oLTY0Ny1cXG5ibG9jay9ibGsuaDo2NDg6aW50IGRpc2tfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpO1xcbmJsb2NrL2Jsay5oLTY0OS1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MzYxPUVYUE9SVF9TWU1CT0xfR1BMKGRpc2tfdWV2ZW50KTtcXG5ibG9jay9nZW5oZC5jLTM2Mi1cXG5ibG9jay9nZW5oZC5jOjM2MzppbnQgZGlza19zY2FuX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5ibG9jay9nZW5oZC5jLTM2NC17XFxuLS1cXG5ibG9jay9nZW5oZC5jLTM3OS1cXHRpZiAoIShtb2RlIFxcdTAwMjYgQkxLX09QRU5fRVhDTCkpIHtcXG5ibG9jay9nZW5oZC5jOjM4MDpcXHRcXHRyZXQgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGRpc2stXFx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyxcXG5ibG9jay9nZW5oZC5jLTM4MS1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy00MDAtXFx0aWYgKCEobW9kZSBcXHUwMDI2IEJMS19PUEVOX0VYQ0wpKVxcbmJsb2NrL2dlbmhkLmM6NDAxOlxcdFxcdGJkX2Fib3J0X2NsYWltaW5nKGRpc2stXFx1MDAzZXBhcnQwLCBkaXNrX3NjYW5fcGFydGl0aW9ucyk7XFxuYmxvY2svZ2VuaGQuYy00MDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmJsb2NrL2dlbmhkLmM9NDA1PXN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy00MTQtXFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSlcXG5ibG9jay9nZW5oZC5jOjQxNTpcXHRcXHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcXG5ibG9jay9nZW5oZC5jLTQxNi1cXG4tLVxcbmJsb2NrL2lvY3RsLmM9NjUwPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9pb2N0bC5jLTcxMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9pb2N0bC5jOjcxMjpcXHRcXHRyZXR1cm4gZGlza19zY2FuX3BhcnRpdGlvbnMoYmRldi1cXHUwMDNlYmRfZGlzayxcXG5ibG9jay9pb2N0bC5jLTcxMy1cXHRcXHRcXHRcXHRtb2RlIHwgQkxLX09QRU5fU1RSSUNUX1NDQU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MzoxMS4zNTY5ODA3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTU3Mjk2ODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIEkvTyBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgcGFydGl0aW9uIHJlLXJlYWRpbmcgd29ya3MgaW4gdGhpcyBibG9jayBkZXZpY2UgZHJpdmVyLiBJIG5vdGljZWQgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGF0LCBidXQgaXQncyBub3QgZGlyZWN0bHkgZXhwb3J0ZWQuIEhtbSwgaW50ZXJlc3RpbmcuIEJ1dCBpdCBsb29rcyBsaWtlIGBibGtkZXZfY29tbW9uX2lvY3RsYCAqZG9lcyogY2FsbCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIHdoZW4gaXQgcmVjZWl2ZXMgdGhlIGBCTEtSUlBBUlRgIGlvY3RsIGNvbW1hbmQuIFRoYXQncyBhIHNvbGlkIGxlYWQuXG5cblJpZ2h0LCBgYmxrZGV2X2NvbW1vbl9pb2N0bGAgaGFuZGxlcyBpb2N0bHMgZm9yIGJsb2NrIGRldmljZXMg4oCTIHRoYXQncyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludC4gVGhhdCBnaXZlcyBtZSBhIGdvb2QsIGZvY3VzZWQgc3ltYm9sIHRvIHN0YXJ0IGZyb20uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIE9rYXksIHRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcyBhcyBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgYWxsIHRoZSBwbGFjZXMgaXQncyBjYWxsZWQuIExldCBtZSBjaGVjayB0aGUgY2FsbGVyIG9mIGBibGtkZXZfY29tbW9uX2lvY3RsYC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBhdCBgYmxrZGV2X2lvY3RsYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIGZvcndhcmQgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI1NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjUzOjMyLjkyOTk1MjIwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MjczMDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtkZXZfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MzU0PXN0YXRpYyBpbnQgYmxrZGV2X2NvcHlfem9uZV90b191c2VyKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTM3MC0gKiBCTEtSRVBPUlRaT05FIGFuZCBCTEtSRVBPUlRaT05FVjIgaW9jdGwgcHJvY2Vzc2luZy5cXG5ibG9jay9ibGstem9uZWQuYzozNzE6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxcbmJsb2NrL2Jsay16b25lZC5jLTM3Mi0gKi9cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTQyMD1zdGF0aWMgaW50IGJsa2Rldl9yZXNldF96b25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTQ0OS0gKiBCTEtSRVNFVFpPTkUsIEJMS09QRU5aT05FLCBCTEtDTE9TRVpPTkUgYW5kIEJMS0ZJTklTSFpPTkUgaW9jdGwgcHJvY2Vzc2luZy5cXG5ibG9jay9ibGstem9uZWQuYzo0NTA6ICogQ2FsbGVkIGZyb20gYmxrZGV2X2lvY3RsLlxcbmJsb2NrL2Jsay16b25lZC5jLTQ1MS0gKi9cXG4tLVxcbmJsb2NrL2Jsay5oPTY2ND1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuYmxvY2svYmxrLmgtNjY1LVxcdFxcdGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcXG5ibG9jay9ibGsuaDo2NjY6bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbmJsb2NrL2Jsay5oLTY2Ny1pbnQgYmxrZGV2X3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuYmxvY2svYmxrLmg6NjY4OmxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuYmxvY2svYmxrLmgtNjY5LVxcbi0tXFxuYmxvY2svZm9wcy5jPTkyNz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy05MzUtXFx0LmZzeW5jXFx0XFx0PSBibGtkZXZfZnN5bmMsXFxuYmxvY2svZm9wcy5jOjkzNjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IGJsa2Rldl9pb2N0bCxcXG5ibG9jay9mb3BzLmMtOTM3LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuYmxvY2svZm9wcy5jOjkzODpcXHQuY29tcGF0X2lvY3RsXFx0PSBjb21wYXRfYmxrZGV2X2lvY3RsLFxcbmJsb2NrL2ZvcHMuYy05MzktI2VuZGlmXFxuLS1cXG5ibG9jay9pb2N0bC5jPTY1MD1zdGF0aWMgaW50IGJsa2Rldl9jb21tb25faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuYmxvY2svaW9jdGwuYy03NDMtLypcXG5ibG9jay9pb2N0bC5jOjc0NDogKiBBbHdheXMga2VlcCB0aGlzIGluIHN5bmMgd2l0aCBjb21wYXRfYmxrZGV2X2lvY3RsKClcXG5ibG9jay9pb2N0bC5jLTc0NS0gKiB0byBoYW5kbGUgYWxsIGluY29tcGF0aWJsZSBjb21tYW5kcyBpbiBib3RoIGZ1bmN0aW9ucy5cXG4tLVxcbmJsb2NrL2lvY3RsLmMtNzQ4LSAqL1xcbmJsb2NrL2lvY3RsLmM6NzQ5OmxvbmcgYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmJsb2NrL2lvY3RsLmMtNzUwLXtcXG4tLVxcbmJsb2NrL2lvY3RsLmMtODA4LSAgIEVOT0lPQ1RMQ01EIGZvciB1bmtub3duIGlvY3Rscy4gKi9cXG5ibG9jay9pb2N0bC5jOjgwOTpsb25nIGNvbXBhdF9ibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuYmxvY2svaW9jdGwuYy04MTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1MzozNS41ODI2OTI0MjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxOTE2NzM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WTWUgTXVsdGlwYXRoIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBrZXkgZW50cnkgcG9pbnRzIGZvciBOVk1lIG11bHRpcGF0aGluZyBmdW5jdGlvbmFsaXR5LiBJdCBsb29rcyBsaWtlIGBibGtkZXZfaW9jdGxgIGlzIGRlZmluaXRlbHkgb25lLiBUaGVuIHRoZXJlJ3MgYGRldmljZV9hZGRfZGlza2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudC4gTW92aW5nIGludG8gdGhlIG11bHRpcGF0aC1zcGVjaWZpYyBmdW5jdGlvbnMsIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgLCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGFuZCBgbnZtZV9mYWlsb3Zlcl9yZXFgIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoZSBwYXRoIHNlbGVjdGlvbiBhbmQgZmFpbG92ZXIgbG9naWMuXG5cbkhhbmcgb27igKYgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIHR5cGljYWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGJ1dCBpdCdzIHRoZSBgc3VibWl0X2Jpb2AgZnVuY3Rpb24gZm9yIHRoZSBtdWx0aXBhdGggaGVhZCwgc28gdGhhdCdzIGFjdHVhbGx5IHRoZSBzdWJtaXRfYmlvIGZ1bmN0aW9uIGZvciB0aGUgYWN0dWFsIGJsb2NrIEkvTy4gU28gSSByZWFsbHkgc2hvdWxkIGluY2x1ZGUgdGhhdCBvbmUgYXMgd2VsbC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEkvTyByZXF1ZXN0cyBhcmUgaW5pdGlhdGVkIHdpdGhpbiB0aGUgbXVsdGlwYXRoIGNvbnRleHQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSS9PIGFjdHVhbGx5IGdldHMgc3VibWl0dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1Mzo1OC43NzQzNjkzNTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzE3NzQ2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9NTE2PXN0YXRpYyBib29sIG52bWVfYXZhaWxhYmxlX3BhdGgoc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0OS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NTA6c3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU1MS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02NDU9Y29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfbnNfaGVhZF9vcHMgPSB7XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNjQ2LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NjQ3OlxcdC5zdWJtaXRfYmlvXFx0PSBudm1lX25zX2hlYWRfc3VibWl0X2JpbyxcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy02NDgtXFx0Lm9wZW5cXHRcXHQ9IG52bWVfbnNfaGVhZF9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDowMS4xMDYxNTE0NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzOTU0Nzg5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTlZNZSBNdWx0aXBhdGggQmxvY2sgRGV2aWNlKipcblxuT2theSwgc28gYG52bWVfbnNfaGVhZF9zdWJtaXRfYmlvYCBpcyB0aGUgYHN1Ym1pdF9iaW9gIGNhbGxiYWNrIGZvciB0aGUgbXVsdGlwYXRoIGJsb2NrIGRldmljZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgd2UnbGwgYmUgZm9jdXNpbmcgb246IGBkZXZpY2VfYWRkX2Rpc2tgLCBgYmxrZGV2X2lvY3RsYCwgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAsIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYW5kLCBvZiBjb3Vyc2UsIGBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AuXG5cbkhtbSwgaG9sZCBvbi4gQXJlbid0IGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgc3VwcG9zZWQgdG8gYmUgZXhwb3J0ZWQ/IExldCBtZSBqdXN0IGNvbmZpcm0uLi4gQWgsIGdvb2QsIGl0IGxvb2tzIGxpa2UgYG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdGAgKmlzKiBleHBvcnRlZCwgYnV0IEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDoxNS41MDE2MzM0MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzI2NTk2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9tcGF0aF9lbmRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX252bWVfZW5kX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NC1cXHRpZiAocmVxLVxcdTAwM2VjbWRfZmxhZ3MgXFx1MDAyNiBSRVFfTlZNRV9NUEFUSClcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDY1OlxcdFxcdG52bWVfbXBhdGhfZW5kX3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2LX1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTIxNy1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzoyMTg6dm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy0yMTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEwODA9dm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA4MTp2b2lkIG52bWVfbXBhdGhfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTA4Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMTg5PXN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTExOTEtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBudm1lX21wYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTE5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU0OjE2Ljk3NDMwMDMxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgyMjE0Mzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBOVk1lIE11bHRpLVBhdGhpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOVk1lIG11bHRpLXBhdGhpbmcgbW9kdWxlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgZXZlcnl0aGluZydzIGNvbm5lY3RlZC4gSXQgc2VlbXMgbGlrZSBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAgaXNuJ3QgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgYml0IG9mIGEgc3VycHJpc2UsIGJ1dCBpdCdzICpub3QqIHN0YXRpYywgc28gaXQncyBjbGVhcmx5IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIGBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3RgICppcyogZXhwb3J0ZWQsIHdoaWNoIGNoYW5nZXMgdGhlIGR5bmFtaWMgYSBsaXR0bGUuXG5cblJpZ2h0LCBzbyB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIEknbGwgaW5jbHVkZSBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYXMgd2VsbCBhcyBgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdGAsIGBudm1lX2ZhaWxvdmVyX3JlcWAsIGFuZCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLiBUaG9zZSBsb29rIGxpa2Uga2V5IHBhcnRzIG9mIHRoZSByZXF1ZXN0IGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhhdCBgY2hlY2tfcGFydGl0aW9uYCBmdW5jdGlvbj8gSSB0aG91Z2h0IHRoYXQgd2FzIHJlbGV2YW50LCBpdCdzIHN0YXRpYywgc28gaXQncyBub3QgZXhwb3J0ZWQuIEFoLCBub3cgSSByZW1lbWJlciwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gXG5cbkFoLCB5ZXMsIGBiZGV2X2Rpc2tfY2hhbmdlZGAgdGhhdCBjYWxscyBgYmxrX2FkZF9wYXJ0aXRpb25zYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIHBhcnRpdGlvbiBoYW5kbGluZywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDozMC43OTY0NDcwODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEzMTk1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9kaXNrX2NoYW5nZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTcyNz1zdGF0aWMgaW50IGJsa2Rldl9nZXRfd2hvbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlKVxcbi0tXFxuYmxvY2svYmRldi5jLTczNy1cXHRcXHRcXHQgICAgIHRlc3RfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpKVxcbmJsb2NrL2JkZXYuYzo3Mzg6XFx0XFx0XFx0XFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgdHJ1ZSk7XFxuYmxvY2svYmRldi5jLTczOS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuYmxvY2svYmRldi5jLTc1MC1cXHRcXHQgKi9cXG5ibG9jay9iZGV2LmM6NzUxOlxcdFxcdHJldCA9IGJkZXZfZGlza19jaGFuZ2VkKGRpc2ssIGZhbHNlKTtcXG5ibG9jay9iZGV2LmMtNzUyLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9TVFJJQ1RfU0NBTikpIHtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTU4ND1zdGF0aWMgaW50IGJsa19hZGRfcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTY0NC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo2NDU6aW50IGJkZXZfZGlza19jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIGludmFsaWRhdGUpXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNjQ2LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo3MTM6RVhQT1JUX1NZTUJPTF9HUEwoYmRldl9kaXNrX2NoYW5nZWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTcxNC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQzOD1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NDItXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Rpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpcXHRyYyA9IGJkZXZfZGlza19jaGFuZ2VkKGxvLVxcdTAwM2Vsb19kaXNrLCBmYWxzZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDQ0LVxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Rpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTExMT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTU5LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjA6XFx0XFx0ZXJyID0gYmRldl9kaXNrX2NoYW5nZWQobG8tXFx1MDAzZWxvX2Rpc2ssIGZhbHNlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjQ0ND1zdGF0aWMgdm9pZCB1YmxrX3BhcnRpdGlvbl9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0NTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI0NTk6XFx0YmRldl9kaXNrX2NoYW5nZWQoZGlzaywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNDYwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYz02ODU9c3RhdGljIHZvaWQgbnZtZV9wYXJ0aXRpb25fc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo2OTU6XFx0YmRldl9kaXNrX2NoYW5nZWQoaGVhZC1cXHUwMDNlZGlzaywgZmFsc2UpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTY5Ni1cXHRtdXRleF91bmxvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYz0xNTk9aW50IGRhc2Rfc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTczLVxcdG11dGV4X2xvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2VnZHAtXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmM6MTc0OlxcdHJjID0gYmRldl9kaXNrX2NoYW5nZWQoYmxvY2stXFx1MDAzZWdkcCwgZmFsc2UpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMTc1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jPTE5Nz12b2lkIGRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaylcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMtMjA4LVxcdG11dGV4X2xvY2soXFx1MDAyNmZpbGVfYmRldihiZGV2X2ZpbGUpLVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jOjIwOTpcXHRiZGV2X2Rpc2tfY2hhbmdlZChmaWxlX2JkZXYoYmRldl9maWxlKS1cXHUwMDNlYmRfZGlzaywgdHJ1ZSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYy0yMTAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmaWxlX2JkZXYoYmRldl9maWxlKS1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTk3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X25yX3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTk3OC1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjk3OTppbnQgYmRldl9kaXNrX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgaW52YWxpZGF0ZSk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC05ODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU0OjMyLjI3Nzc3MjMxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAzMzQ1MTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb3JlIEJsb2NrIExheWVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgYmRldl9kaXNrX2NoYW5nZWRgIGxvb2tlZCBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCwgc2luY2UgaXQncyB1c2VkIGJ5IHNldmVyYWwgcHJvbWluZW50IGJsb2NrIGRyaXZlcnMgbGlrZSBgbG9vcGAsIGB1YmxrYCwgYW5kIGBudm1lYC4gRXhjZWxsZW50IGZvY3VzIHN5bWJvbC5cblxuQnV0IHRoZW4gSSBzYXcgdGhhdCBgZGlza19zY2FuX3BhcnRpdGlvbnNgIGlzIGFsc28gaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIC0geWVwLCBub24tc3RhdGljLiBTbyBJIG5lZWQgdG8gaW5jbHVkZSB0aGF0IHN5bWJvbCBhbG9uZyB3aXRoIGBiZGV2X2Rpc2tfY2hhbmdlZGAuXG5cbk5vdywgdGltZSB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZS4uLiBgQ09ORklHX05WTUVfTVVMVElQQVRIYCwgYENPTkZJR19OVk1FX1RBUkdFVF9MT09QYCwgYW5kIGBDT05GSUdfTlZNRV9DT1JFYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gQW55dGhpbmcgZWxzZSByZWxldmFudD8gQWgsIHllcywgYENPTkZJR19CTEtfREVWX05WTUVgIC0gdGhhdCdzIHRoZSBQQ0llIE5WTWUgZHJpdmVyIGl0c2VsZi4gVGhlIG90aGVycywgYENPTkZJR19OVk1FX1RBUkdFVGAgYW5kIGBDT05GSUdfTlZNRV9UQVJHRVRfTE9PUGAsIGFyZSBmb3IgdGhlIE5WTWUgbG9vcCB0YXJnZXQuIFNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIHdhbnQgdG8gaW5jbHVkZSBgTlZNRV9NVUxUSVBBVEhgLCBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgQkxLX0RFVl9OVk1FYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGVzZSBwYXRjaCB0b3VjaGVzIGBibG9jay9nZW5oZC5jYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCAtICpjb3JlKiBibG9jayBsYXllciBzdHVmZi4gVGhhdCBtZWFucyBgQkxPQ0tgIG11c3QgYmUgcmVxdWlyZWQsIGJ1dCB0aGF0J3MgYWx3YXlzIGVuYWJsZWQgc28gaXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBOVk1lIG11bHRpcGF0aCBjaGFuZ2VzIGFyZSBvYnZpb3VzbHkgdGllZCB0byBgTlZNRV9NVUxUSVBBVEhgLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBuZWVkZWQuIFNpbmNlIHRoZSBgYmRldl9kaXNrX2NoYW5nZWRgIGZ1bmN0aW9uIGlzIGFsc28gbmVlZGVkLCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSB0YWtlbiB0b28uXG5cblNvLCBJJ2xsIGFkZCBgTlZNRV9NVUxUSVBBVEhgLCBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVGAsIGFuZCBgQkxLX0RFVl9OVk1FYC4gVGhhdCBmZWVscyByaWdodC4gTm93LCBsZXQgbWUgdmVyaWZ5IHRob3NlIGBOVk1FX1RBUkdFVGAgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTQ6NDMuMzExMjI2ODU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk0MDE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NDo0NS4zMDUyNDc2MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NTgxMzczNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5bWJvbCBMaXN0IGZvciBOVk1lIE11bHRpcGF0aCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIHN5bWJvbCBsaXN0LiBGaXJzdCwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgdGhlIG9idmlvdXMgTlZNZSByZWxhdGVkIHN5bWJvbHM6IGBOVk1FX01VTFRJUEFUSGAsIGBOVk1FX1RBUkdFVF9MT09QYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBCTEtfREVWX05WTUVgLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBvbnRvIHRoZSBmdW5jdGlvbiBzeW1ib2xzLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoZSBhdmFpbGFiaWxpdHkgb2YgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgIGFuZCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYXMgd2VsbCBhcyBgbnZtZV9mYWlsb3Zlcl9yZXFgLiBJIGFsc28gY2hlY2tlZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGBkZXZpY2VfYWRkX2Rpc2tgIGFuZCBgYmxrZGV2X2lvY3RsYC5cblxuTm93LCB0aGUgdHJpY2sgaXMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBsaXN0IHdpdGggb3Zlcmx5IGdlbmVyaWMsIGhpZ2gtZnJlcXVlbmN5IFwiaG90IHBhdGhcIiBmdW5jdGlvbnMuIFNvLCBsZXQncyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZWlyIHJvbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjsgd2UgZG9uJ3Qgd2FudCB0aGUgZGlzdHJpYnV0aW9ucyBza2V3ZWQuXG5cbmBudm1lX25zX2hlYWRfc3VibWl0X2Jpb2AgaXMgdGhlIGBzdWJtaXRfYmlvYCBjYWxsYmFjayBmb3IgdGhlIG11bHRpcGF0aCBoZWFkLiBBbmQgc2luY2UgaXQncyBhIGBzdWJtaXRfYmlvYCBjYWxsYmFjaywgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IElPIG9uIHRoZSBtdWx0aXBhdGggaGVhZCwgdGhhdCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24uXG5gbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCBhbmQgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgIGFyZSBjYWxsZWQgZm9yIGV2ZXJ5IHJlcXVlc3QsIGFuZCB0aGF0IGlzIGEgaG90LXBhdGguIFRoZXNlIGFyZSBvdXQuXG5cbmBudm1lX2ZhaWxvdmVyX3JlcWAgaXMgaW52b2tlZCBvbmx5IGR1cmluZyBmYWlsb3ZlciBldmVudHMuIFRoYXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc28gdGhhdCBzdGF5cy5cblxuYGRldmljZV9hZGRfZGlza2AgaXMgdHJpZ2dlcmVkIHdoZW4gYSBuZXcgZGlzayBpcyBhZGRlZCwgY2xlYXJseSBub3QgYSBob3QtcGF0aCBzaXR1YXRpb24uXG5cbmBiZGV2X2Rpc2tfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGR1cmluZyBhIHBhcnRpdGlvbiByZXNjYW4sIHdoaWNoIGlzbid0IGhpZ2gtZnJlcXVlbmN5IGVpdGhlci5cblxuYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCBpcyBhbHNvIGR1cmluZyBwYXJ0aXRpb24gc2Nhbiwgc28gaXQgaXMgbm90IGhvdC1wYXRoLlxuXG5gYmxrZGV2X2lvY3RsYCBkZWFscyB3aXRoIGlvY3RscyBvbiBibG9jayBkZXZpY2VzLiBXaGlsZSBmcmVxdWVudCwgaXQncyBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGxpa2UgYHN1Ym1pdF9iaW9gLlxuXG5UaGVyZWZvcmUsIEknbGwgZHJvcCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gLCBgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYW5kIGBudm1lX21wYXRoX2VuZF9yZXF1ZXN0YCwgZnJvbSB0aGUgbGlzdC4gVGhlIGZpbmFsLCBmb2N1c2VkIHNldCBvZiBzeW1ib2xzIEknbSBnb2luZyB3aXRoIGlzOlxuYG52bWVfZmFpbG92ZXJfcmVxYCwgYGRldmljZV9hZGRfZGlza2AsIGBiZGV2X2Rpc2tfY2hhbmdlZGAsIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AsIGFuZCBgYmxrZGV2X2lvY3RsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MDcuOTYzMzg3ODg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNDU1OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfZmFpbG92ZXJfcmVxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NzY9c3RhdGljIHZvaWQgX19udm1lX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxLVxcdGNhc2UgRkFJTE9WRVI6XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUwMjpcXHRcXHRudm1lX2ZhaWxvdmVyX3JlcShyZXEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM9MTQ3PXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpudm1lX3RvX2Rpc2tfcGFydChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTU5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjE2MDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtMTYxLXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMDYzPXZvaWQgbnZtZV9tcGF0aF9kZWZhdWx0X2lvcG9saWN5KHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTA2NDp2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMDY1LXZvaWQgbnZtZV9raWNrX3JlcXVldWVfbGlzdHMoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTExND1zdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9jdHJsX3VzZV9hbmEoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMTE3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTExODpzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTExOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjA5LjQ3NDg1NzE3MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTMxNzUzMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBlcmZvcm1hbmNlIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgbW9kaWZpZXMgYSBmZXcga2V5IGFyZWFzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGV5J3JlIG9uIHRoZSAqaG90LXBhdGgqLlxuXG5GaXJzdCwgYG52bWVfZmFpbG92ZXJfcmVxYC4gVGhhdCdzIHRyaWdnZXJlZCBkdXJpbmcgYSByZXF1ZXN0IGZhaWx1cmUgYW5kIHJldHJ5IG9uIGEgZGlmZmVyZW50IHBhdGguIE5vdCBleGFjdGx5IGEgY29yZSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBvbiB0aGUgaG90IHBhdGgsIGFuZCBub3QgYSBtYXNzaXZlIGNvbmNlcm4uXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgZGV2aWNlX2FkZF9kaXNrYCwgYGJkZXZfZGlza19jaGFuZ2VkYCwgYGRpc2tfc2Nhbl9wYXJ0aXRpb25zYCwgYW5kIGBibGtkZXZfaW9jdGxgLiBUaGVzZSBhbGwgc2VlbSByZWxhdGVkIHRvIGRpc2sgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgYmUgZ29vZC4gQSBxdWljayBzY2FuIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlbid0IGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGNoZWNrX3BhcnRpdGlvbmAgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gSG1tLCBgY2hlY2tfcGFydGl0aW9uYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgY2FsbGVkIGJ5IGBibGtfYWRkX3BhcnRpdGlvbnNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBiZGV2X2Rpc2tfY2hhbmdlZGAgYW5kIGBkaXNrX3NjYW5fcGFydGl0aW9uc2AuIEdvb2QsIHNvIHRoZSBsb2dpYyBjaGVja3Mgb3V0LiBTbywgbm8gYmlnIGRlYWwgYWJvdXQgdGhpcy5cblxuRmluYWxseSwgdGhlcmUncyBgZGlza3N0YXRzX3Nob3dgIGluIGBibG9jay9nZW5oZC5jYC4gSXQncyAqc3RhdGljKiBhbmQgdXNlZCBmb3IgYC9wcm9jL2Rpc2tzdGF0c2AuICBOb3QgYSBob3QtcGF0aCBzaXR1YXRpb24sIGJ1dCBtYXliZSBzb21ldGhpbmcgdG8gbm90ZSBpbiBhIGdlbmVyYWwgcGVyZm9ybWFuY2Ugb3ZlcnZpZXcsIGFsdGhvdWdoIEkgZG9uJ3QgdGhpbmsgaXQncyBhIHByaW9yaXR5LlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhhdCwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuKiAgIGBkZXZpY2VfYWRkX2Rpc2tgXG4qICAgYGJkZXZfZGlza19jaGFuZ2VkYFxuKiAgIGBkaXNrX3NjYW5fcGFydGl0aW9uc2BcbiogICBgYmxrZGV2X2lvY3RsYFxuKiAgIGBudm1lX2ZhaWxvdmVyX3JlcWBcblxuQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczpcbiogICBgTlZNRV9NVUxUSVBBVEhgXG4qICAgYE5WTUVfVEFSR0VUX0xPT1BgXG4qICAgYE5WTUVfVEFSR0VUYFxuKiAgIGBCTEtfREVWX05WTUVgXG5cbkZyb20gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGVuYWJsaW5nIHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgaW4gdGhlIGJsb2NrIGxheWVyLCB3aGljaCBwcmltYXJpbHkgbWF0dGVycyBmb3IgTlZNZSBtdWx0aXBhdGguIEl0IGluY2x1ZGVzIHVwZGF0ZXMgdG8gTlZNZSBtdWx0aXBhdGggdG8gaGFuZGxlIEkvTyBhbmQgZmFpbG92ZXIgY29ycmVjdGx5IGZvciBwYXJ0aXRpb25zIG9uIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhpcyBpcyBtb3N0bHkgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IHRvIGV4aXN0aW5nIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciB0ZXN0aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBOVk1lIGxvb3BiYWNrIHRhcmdldHMuXG5cbk9rYXksIHRoYXQncyBteSBhbmFseXNpcy4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNiwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MTguNjA2NjE0Njg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MjI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfTVVMVElQQVRIXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2FkZF9kaXNrXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwiZGlza19zY2FuX3BhcnRpdGlvbnNcIixcbiAgICBcImJsa2Rldl9pb2N0bFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfTVVMVElQQVRIXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2FkZF9kaXNrXCIsXG4gICAgXCJiZGV2X2Rpc2tfY2hhbmdlZFwiLFxuICAgIFwiZGlza19zY2FuX3BhcnRpdGlvbnNcIixcbiAgICBcImJsa2Rldl9pb2N0bFwiLFxuICAgIFwibnZtZV9mYWlsb3Zlcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBsYXllciB0byBhbGxvdyBwYXJ0aXRpb24gc2Nhbm5pbmcgb24gaGlkZGVuIGRpc2tzIChHRU5IRF9GTF9ISURERU4pLCB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCBieSBOVk1lIG11bHRpcGF0aC4gSXQgYWxzbyB1cGRhdGVzIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gY29ycmVjdGx5IGhhbmRsZSBJL08gYW5kIGZhaWxvdmVyIGZvciBwYXJ0aXRpb25zIG9uIGhpZGRlbiBkaXNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIE5WTWUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgTlZNZSBsb29wYmFjayB0YXJnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo1NToxOC42ODQwNDUyMTRaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDk0NzAyMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NTU6MTguNjg0NTcyMjI0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4NDk0MTcxMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgbGF5ZXIgYW5kIE5WTWUgbXVsdGlwYXRoIGNvZGUgdG8gYWxsb3cgcGFydGl0aW9uIHNjYW5uaW5nIG9uIGhpZGRlbiBkaXNrcyAoR0VOSERfRkxfSElEREVOKSBhbmQgY29ycmVjdGx5IHJvdXRlIEkvTyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydGl0aW9uIGJsb2NrIGRldmljZSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgd2hvbGUgZGlzayAocGFydDApLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgcmVtb3Zpbmcgd2FybmluZ3MsIGFuZCB1cGRhdGluZyBibG9jayBkZXZpY2UgbG9va3VwcyB2aWEgeGFycmF5LiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIG5ldyBmaWVsZHMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4M2E5MDc5ODgzNmY0YjdkNWE0NzM4YzhjYzU1NjJiYWVmMmFjMjFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xuaW5kZXggMzBhYzBmZmU2NTE3NC4uMDUzMDFlZTVkNGNhNSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbisrKyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MDYsMTUgKzQwNiwxNSBAQCBzdGF0aWMgdm9pZCBhZGRfZGlza19maW5hbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gZGlza190b19kZXYoZGlzayk7XG4gXG4tXHRpZiAoIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0aGUgZmlyc3QgcGFydGl0aW9uIHNjYW4gd2lsbCBiZSBwcm9jZWVkICovXG4tXHRcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuLVx0XHRcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuK1x0LyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbitcdGlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuK1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiBcbi1cdFx0YmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbi1cdFx0aWYgKGdldF9jYXBhY2l0eShkaXNrKSlcbi1cdFx0XHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcbitcdGJkZXZfYWRkKGRpc2stXHUwMDNlcGFydDAsIGRkZXYtXHUwMDNlZGV2dCk7XG4rXHRpZiAoZ2V0X2NhcGFjaXR5KGRpc2spKVxuK1x0XHRkaXNrX3NjYW5fcGFydGl0aW9ucyhkaXNrLCBCTEtfT1BFTl9SRUFEKTtcbiBcbitcdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpIHtcbiBcdFx0LypcbiBcdFx0ICogQW5ub3VuY2UgdGhlIGRpc2sgYW5kIHBhcnRpdGlvbnMgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgYXJlXG4gXHRcdCAqIGNyZWF0ZWQuIChmb3IgaGlkZGVuIGRpc2tzIHVldmVudHMgcmVtYWluIHN1cHByZXNzZWQgZm9yZXZlcilcbkBAIC00OTEsOCArNDkxLDcgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRkZXZfc2V0X25hbWUoZGRldiwgXCIlc1wiLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4gXHRpZiAoZndub2RlKVxuIFx0XHRkZXZpY2Vfc2V0X25vZGUoZGRldiwgZndub2RlKTtcbi1cdGlmICghKGRpc2stXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG4tXHRcdGRkZXYtXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXHUwMDNlbWFqb3IsIGRpc2stXHUwMDNlZmlyc3RfbWlub3IpO1xuK1x0ZGRldi1cdTAwM2VkZXZ0ID0gTUtERVYoZGlzay1cdTAwM2VtYWpvciwgZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4gXHRyZXQgPSBkZXZpY2VfYWRkKGRkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZnJlZV9leHRfbWlub3I7XG5AQCAtMTM2OCw3ICsxMzY3LDggQEAgc3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZncC1cdTAwM2VwYXJ0X3RibCwgaWR4LCBoZCkge1xuLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oaGQpIFx1MDAyNlx1MDAyNiAhYmRldl9ucl9zZWN0b3JzKGhkKSlcbitcdFx0aWYgKGJkZXZfaXNfcGFydGl0aW9uKGhkKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghYmRldl9ucl9zZWN0b3JzKGhkKSB8fChncC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGluZmxpZ2h0ID0gYmRldl9jb3VudF9pbmZsaWdodChoZCk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuaW5kZXggYjVjNTliNzljYTdjYi4uYTQ4ODk2YzZjNzkxZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuQEAgLTE1Miw3ICsxNTIsOCBAQCBzdGF0aWMgc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpjaGVja19wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmhkKVxuIFxuIFx0fVxuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuLVx0XHRwcmludGsoS0VSTl9JTkZPIFwiJXNcIiwgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG4rXHRcdGlmICghKGhkLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKVxuK1x0XHRcdHByaW50ayhLRVJOX0lORk8gXCIlc1wiLCBzZXFfYnVmX3N0cihcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYpKTtcbiBcbiBcdFx0a2ZyZWUoc3RhdGUtXHUwMDNlcHBfYnVmLmJ1ZmZlcik7XG4gXHRcdHJldHVybiBzdGF0ZTtcbkBAIC0xNjQsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqY2hlY2tfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpoZClcbiBcdCAqL1xuIFx0aWYgKGVycilcbiBcdFx0cmVzID0gZXJyO1xuLVx0aWYgKHJlcykge1xuK1x0aWYgKHJlcyBcdTAwMjZcdTAwMjYgIShoZC1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfSElEREVOKSkge1xuIFx0XHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLFxuIFx0XHRcdCAgICAgXCIgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXFxuXCIpO1xuIFx0XHRwcmludGsoS0VSTl9JTkZPIFwiJXNcIiwgc2VxX2J1Zl9zdHIoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmKSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCAxMzIyYzY3OGY0ZWI4Li5lZDIxZjRlZjM2YzlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xODA4LDEwICsxODA4LDYgQEAgc3RhdGljIHZvaWQgbnZtZV9lbmFibGVfYWVuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4gXG4gc3RhdGljIGludCBudm1lX25zX29wZW4oc3RydWN0IG52bWVfbnMgKm5zKVxuIHtcbi1cbi1cdC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZHVlIHRvIEdFTkhEX0ZMX0hJRERFTiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRShudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLVx1MDAzZWhlYWQpKSlcbi1cdFx0Z290byBmYWlsO1xuIFx0aWYgKCFudm1lX2dldF9ucyhucykpXG4gXHRcdGdvdG8gZmFpbDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQobnMtXHUwMDNlY3RybC1cdTAwM2VvcHMtXHUwMDNlbW9kdWxlKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5pbmRleCA3NWRiYjU4Mjg2YTMyLi41Yzk1YTJhYjc3NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jXG5AQCAtMTQ0LDYgKzE0NCwxOSBAQCB2b2lkIG52bWVfbXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0XHRcdGJsa19mcmVlemVfcXVldWVfc3RhcnQoaC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbitcbitcdC8qIFF1aWNrIGxvb2t1cCBmb3Igd2hvbGUgZGlzayAqL1xuK1x0aWYgKCFwYXJ0bm8pXG4rXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0YmRldiA9IHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgcGFydG5vKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGJkZXY7XG4rfVxuK1xuIHZvaWQgbnZtZV9mYWlsb3Zlcl9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSByZXEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5AQCAtMTY1LDggKzE3OCwxMCBAQCB2b2lkIG52bWVfZmFpbG92ZXJfcmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbG9jaywgZmxhZ3MpO1xuLVx0Zm9yIChiaW8gPSByZXEtXHUwMDNlYmlvOyBiaW87IGJpbyA9IGJpby1cdTAwM2ViaV9uZXh0KVxuLVx0XHRiaW9fc2V0X2RldihiaW8sIG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRmb3IgKGJpbyA9IHJlcS1cdTAwM2ViaW87IGJpbzsgYmlvID0gYmlvLVx1MDAzZWJpX25leHQpIHtcbitcdFx0YmlvX3NldF9kZXYoYmlvLCBudm1lX3RvX2Rpc2tfcGFydChucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2ssXG4rXHRcdFx0YmRldl9wYXJ0bm8oYmlvLVx1MDAzZWJpX2JkZXYpKSk7XG4rXHR9XG4gXHRibGtfc3RlYWxfYmlvcyhcdTAwMjZucy1cdTAwM2VoZWFkLVx1MDAzZXJlcXVldWVfbGlzdCwgcmVxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bnMtXHUwMDNlaGVhZC1cdTAwM2VyZXF1ZXVlX2xvY2ssIGZsYWdzKTtcbiBcbkBAIC0xOTQsOCArMjA5LDkgQEAgdm9pZCBudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgfD0gTlZNRV9NUEFUSF9JT19TVEFUUztcbi1cdG52bWVfcmVxKHJxKS1cdTAwM2VzdGFydF90aW1lID0gYmRldl9zdGFydF9pb19hY2N0KGRpc2stXHUwMDNlcGFydDAsIHJlcV9vcChycSksXG4tXHRcdFx0XHRcdFx0ICAgICAgamlmZmllcyk7XG4rXHRudm1lX3JlcShycSktXHUwMDNlc3RhcnRfdGltZSA9IGJkZXZfc3RhcnRfaW9fYWNjdChcbitcdFx0XHRudm1lX3RvX2Rpc2tfcGFydChkaXNrLCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksXG4rXHRcdFx0cmVxX29wKHJxKSwgamlmZmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdCk7XG4gXG5AQCAtMjA4LDcgKzIyNCw4IEBAIHZvaWQgbnZtZV9tcGF0aF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXG4gXHRpZiAoIShudm1lX3JlcShycSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfTVBBVEhfSU9fU1RBVFMpKVxuIFx0XHRyZXR1cm47XG4tXHRiZGV2X2VuZF9pb19hY2N0KG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCwgcmVxX29wKHJxKSxcbitcdGJkZXZfZW5kX2lvX2FjY3QobnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrLFxuK1x0XHRcdCBiZGV2X3BhcnRubyhycS1cdTAwM2VwYXJ0KSksIHJlcV9vcChycSksXG4gXHRcdFx0IGJsa19ycV9ieXRlcyhycSkgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCxcbiBcdFx0XHQgbnZtZV9yZXEocnEpLVx1MDAzZXN0YXJ0X3RpbWUpO1xuIH1cbkBAIC01NDksNyArNTY2LDkgQEAgc3RhdGljIHZvaWQgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZoZWFkLVx1MDAzZXNyY3UpO1xuIFx0bnMgPSBudm1lX2ZpbmRfcGF0aChoZWFkKTtcbiBcdGlmIChsaWtlbHkobnMpKSB7XG4tXHRcdGJpb19zZXRfZGV2KGJpbywgbnMtXHUwMDNlZGlzay1cdTAwM2VwYXJ0MCk7XG4rXHRcdGJpb19zZXRfZGV2KGJpbywgbnZtZV90b19kaXNrX3BhcnQobnMtXHUwMDNlZGlzayxcbitcdFx0XHRcdGJkZXZfcGFydG5vKGJpby1cdTAwM2ViaV9iZGV2KSkpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBVc2UgQklPX1JFTUFQUEVEIHRvIHNraXAgYmlvX2NoZWNrX2VvZCgpIHdoZW4gdGhpcyBiaW9cbiBcdFx0ICogZW50ZXJzIHN1Ym1pdF9iaW9fbm9hY2N0KCkgZm9yIHRoZSBwZXItcGF0aCBkZXZpY2UuIFRoZSBFT0RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggOTIxM2E1NzE2Zjk1YS4uYTI3MGNmMTM5NGM3YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlza19vcGVuZXJzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2hhc19wYXJ0c2NhbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRyZXR1cm4gIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoR0VOSERfRkxfTk9fUEFSVCB8IEdFTkhEX0ZMX0hJRERFTikpIFx1MDAyNlx1MDAyNlxuK1x0cmV0dXJuICEoZGlzay1cdTAwM2VmbGFncyBcdTAwMjYgR0VOSERfRkxfTk9fUEFSVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCF0ZXN0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjE4LjY4NDU3MzE5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5NDE0ODU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHRvdWNoZXMgdGhlIGJsb2NrIGxheWVyIChzcGVjaWZpY2FsbHkgYGJsb2NrL2dlbmhkLmNgIGFuZCBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgKSBhbmQgdGhlIE5WTWUgbXVsdGlwYXRoIGNvZGUgKGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmNgKSwgaXNuJ3QgbGlrZWx5IHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LlxuXG5UaGUgcHJpbWFyeSBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgXCJoaWRkZW5cIiBkaXNrcywgaWRlbnRpZmllZCBieSB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgZmxhZy4gV2UncmUgc2VlaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCBhZmZlY3QgcGFydGl0aW9uIHNjYW5uaW5nLCBkZXZpY2UgYXNzaWdubWVudCwgYW5kIG91dHB1dCBzdXBwcmVzc2lvbiByZWxhdGVkIHRvIHRoZXNlIGhpZGRlbiBkaXNrcy4gVGhlIGtleSBjaGFuZ2VzIGFyZTpcblxuKiAgIEluIGBibG9jay9nZW5oZC5jYCwgdGhlIGBhZGRfZGlza19maW5hbGAgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gKmVuYWJsZSogcGFydGl0aW9uIHNjYW5zIGV2ZW4gZm9yIGhpZGRlbiBkaXNrcywgdGhvdWdoIHVldmVudHMgYXJlIHN0aWxsIHN1cHByZXNzZWQuIEl0IHNlZW1zIHRoZSBwYXJ0aXRpb24gc2Nhbm5pbmcgY29kZSBwYXRoIGlzIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGEgbmV3IGNvZGUgcGF0aCBmb3IgaGlkZGVuIHBhcnRpdGlvbnNcbiogICBgX19hZGRfZGlza2AgaXMgdXBkYXRlZCB0byB1bmNvbmRpdGlvbmFsbHkgYXNzaWduIGBkZGV2LVx1MDAzZWRldnRgLCBldmVuIGZvciBoaWRkZW4gZGlza3MuXG4qICAgYGRpc2tzdGF0c19zaG93YCBpcyBsb2dpYyBoYXMgY2hhbmdlZCBpbiB0aGUgY29uZGl0aW9uYWwgbG9naWMgd2hpY2ggbWF5IG9yIG1heSBub3QgaW5jbHVkZSBoaWRkZW4gcGFydGl0aW9uc1xuKiAgIGBjaGVja19wYXJ0aXRpb25gIG5vdyBzdXBwcmVzc2VzIHByaW50aW5nIG9mIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgaGlkZGVuIGRpc2tzLlxuKiAgIGBudm1lX25zX29wZW5gIHJlbW92ZXMgYSBgV0FSTl9PTl9PTkNFYCBmb3IgYSBtdWx0aXBhdGggY29uZGl0aW9uLlxuKiAgIFNldmVyYWwgTlZNZSBtdWx0aXBhdGggZnVuY3Rpb25zIChgbnZtZV9tcGF0aF9zdGFydF9yZXF1ZXN0YCwgYG52bWVfZmFpbG92ZXJfcmVxYCwgYG52bWVfbXBhdGhfZW5kX3JlcXVlc3RgLCBgbnZtZV9uc19oZWFkX3N1Ym1pdF9iaW9gKSBub3cgdXNlIGBudm1lX3RvX2Rpc2tfcGFydGAgdG8gbG9vayB1cCBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgc29sZWx5IG9uIGBkaXNrLVx1MDAzZXBhcnQwYC5cbiogICBgZGlza19oYXNfcGFydHNjYW5gIG5vdyByZW1vdmVzIHRoZSBgR0VOSERfRkxfSElEREVOYCBmbGFnIGZyb20gdGhlIGNvbmRpdGlvbi5cblxuSeKAmW0gY2FyZWZ1bGx5IGNoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHJlZG9taW5hbnRseSBsb2dpYy1iYXNlZC4gVGhlcmUncyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBhIHJpc2t5IHdheS4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBsb29rdXAgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24gZmxhZ3MuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYG52bWVfdG9fZGlza19wYXJ0YCBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKm52bWVfdG9fZGlza19wYXJ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXG57XG5cdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG5cblx0LyogUXVpY2sgbG9va3VwIGZvciB3aG9sZSBkaXNrICovXG5cdGlmICghcGFydG5vKVxuXHRcdHJldHVybiBkaXNrLVx1MDAzZXBhcnQwO1xuXHRyY3VfcmVhZF9sb2NrKCk7XG5cdGJkZXYgPSB4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIHBhcnRubyk7XG5cdHJjdV9yZWFkX3VubG9jaygpO1xuXHRyZXR1cm4gYmRldjtcbn1cbmBgYFxuXG5UaGlzIGZ1bmN0aW9uIHNpbXBseSB1c2VzIGFuIHhhcnJheSAoYHhhX2xvYWRgKSB0byByZXRyaWV2ZSBhIGJsb2NrIGRldmljZSBwb2ludGVyLiBJdCBkb2VzbuKAmXQgY3JlYXRlIGFueSBtZW1vcnkgb3IgcmVhZCBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGEgbG9va3VwIGFuZCBub3QgaW5pdGlhbGl6YXRpb24uXG5cbkxldCdzIGNoZWNrIGBkaXNrc3RhdHNfc2hvd2A6XG5cbmBgYGNcbnhhX2Zvcl9lYWNoKFx1MDAyNmdwLVx1MDAzZXBhcnRfdGJsLCBpZHgsIGhkKSB7XG5cdGlmIChiZGV2X2lzX3BhcnRpdGlvbihoZCkgXHUwMDI2XHUwMDI2XG5cdCAgICAoIWJkZXZfbnJfc2VjdG9ycyhoZCkgfHwoZ3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpKVxuXHRcdGNvbnRpbnVlO1xuYGBgXG5cblRoaXMgYWdhaW4ganVzdCBpcyBhIGxvZ2ljIGNoYW5nZS5cblxuTGV0J3MgY2hlY2sgYGFkZF9kaXNrX2ZpbmFsYDpcblxuYGBgY1xuLyogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYXJ0aXRpb24gc2NhbiB3aWxsIGJlIHByb2NlZWQgKi9cbmlmIChnZXRfY2FwYWNpdHkoZGlzaykgXHUwMDI2XHUwMDI2IGRpc2tfaGFzX3BhcnRzY2FuKGRpc2spKVxuXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcblxuYmRldl9hZGQoZGlzay1cdTAwM2VwYXJ0MCwgZGRldi1cdTAwM2VkZXZ0KTtcbmlmIChnZXRfY2FwYWNpdHkoZGlzaykpXG5cdGRpc2tfc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIEJMS19PUEVOX1JFQUQpO1xuXG5pZiAoIShkaXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBHRU5IRF9GTF9ISURERU4pKSB7XG5gYGBcblxuVGhpcyBtb3ZlcyB0aGUgYEdFTkhEX0ZMX0hJRERFTmAgY2hlY2sgZG93biwgdG8gZW5zdXJlIHRoYXQgcGFydGl0aW9uIHNjYW5uaW5nIGNhbiBvY2N1ciBmb3IgaGlkZGVuIGRpc2tzLlxuXG5MZXQncyBjaGVjayBgX19hZGRfZGlza2A6XG5cbmBgYGNcbmRkZXYtXHUwMDNlZGV2dCA9IE1LREVWKGRpc2stXHUwMDNlbWFqb3IsIGRpc2stXHUwMDNlZmlyc3RfbWlub3IpO1xuYGBgXG5cblRoaXMgdW5jb25kaXRpb25hbGx5IGFzc2lnbnMgdGhlIGBkZXZ0YC5cblxuTGV0J3MgY2hlY2sgYGNoZWNrX3BhcnRpdGlvbmA6XG5cbmBgYGNcbmlmIChyZXMgXHUwMDNlIDApIHtcblx0aWYgKCEoaGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEdFTkhEX0ZMX0hJRERFTikpXG5cdFx0cHJpbnRrKEtFUk5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjEsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjU1OjM3LjE3ODcyNTE1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBOVk1lIG11bHRpcGF0aCBjb2RlIHRvIGFsbG93IHBhcnRpdGlvbiBzY2FubmluZyBvbiBoaWRkZW4gZGlza3MgKEdFTkhEX0ZMX0hJRERFTikgYW5kIGNvcnJlY3RseSByb3V0ZSBJL08gdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBibG9jayBkZXZpY2UgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIHdob2xlIGRpc2sgKHBhcnQwKS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3csIHJlbW92aW5nIHdhcm5pbmdzLCBhbmQgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIGxvb2t1cHMgdmlhIHhhcnJheS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBubyBuZXcgZmllbGRzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzk6j9[1] Phase: Succeeded StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 14:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 14:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2] Phase: Succeeded StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 18:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 18:35:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 14:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 14:56:05 +0000 UTC FinishedAt: 2026-08-18 14:56:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowzk6j9/series-workflowzk6j9-convert-artifact-2613964619/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 14:56:15 +0000 UTC FinishedAt: 2026-08-18 15:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 14:56:15 +0000 UTC FinishedAt: 2026-08-18 15:12:25 +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:*989e4cac-bee6-474a-9746-c64156673824,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-workflowzk6j9/series-workflowzk6j9-convert-artifact-2613964619/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": "88d7e3ff-2dd1-4f9a-91a2-55be42b52aa5", "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-workflowzk6j9/series-workflowzk6j9-build-action-2089903689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 14:56:15 +0000 UTC FinishedAt: 2026-08-18 15:12:14 +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:*989e4cac-bee6-474a-9746-c64156673824,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-workflowzk6j9/series-workflowzk6j9-convert-artifact-2613964619/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": "88d7e3ff-2dd1-4f9a-91a2-55be42b52aa5", "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-workflowzk6j9/series-workflowzk6j9-build-action-2089903689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 15:12:25 +0000 UTC FinishedAt: 2026-08-18 15:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 15:12:25 +0000 UTC FinishedAt: 2026-08-18 15:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 15:12:25 +0000 UTC FinishedAt: 2026-08-18 15:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 15:12:25 +0000 UTC FinishedAt: 2026-08-18 15:12:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowzk6j9/series-workflowzk6j9-convert-artifact-1456132770/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 15:12:35 +0000 UTC FinishedAt: 2026-08-18 15:14:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 15:12:35 +0000 UTC FinishedAt: 2026-08-18 15:14:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88d7e3ff-2dd1-4f9a-91a2-55be42b52aa5,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-workflowzk6j9/series-workflowzk6j9-build-action-2089903689/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-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 15:14:13 +0000 UTC FinishedAt: 2026-08-18 15:14:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:14:13 +0000 UTC FinishedAt: 2026-08-18 15:14:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 15:14:13 +0000 UTC FinishedAt: 2026-08-18 15:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 15:14:13 +0000 UTC FinishedAt: 2026-08-18 15:31:37 +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:*989e4cac-bee6-474a-9746-c64156673824,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-workflowzk6j9/series-workflowzk6j9-convert-artifact-1456132770/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": "d5d2db1b-720a-4281-bae3-fc868921342c", "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-workflowzk6j9/series-workflowzk6j9-build-action-3835958006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 15:14:13 +0000 UTC FinishedAt: 2026-08-18 15:31:27 +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:*989e4cac-bee6-474a-9746-c64156673824,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-workflowzk6j9/series-workflowzk6j9-convert-artifact-1456132770/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": "d5d2db1b-720a-4281-bae3-fc868921342c", "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-workflowzk6j9/series-workflowzk6j9-build-action-3835958006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 15:31:37 +0000 UTC FinishedAt: 2026-08-18 15:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 15:31:37 +0000 UTC FinishedAt: 2026-08-18 15:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 15:31:37 +0000 UTC FinishedAt: 2026-08-18 15:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 15:31:37 +0000 UTC FinishedAt: 2026-08-18 15:33:26 +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:*d5d2db1b-720a-4281-bae3-fc868921342c,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-workflowzk6j9/series-workflowzk6j9-build-action-3835958006/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-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 18:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 18:35: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":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"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:*88d7e3ff-2dd1-4f9a-91a2-55be42b52aa5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5d2db1b-720a-4281-bae3-fc868921342c,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-workflowzk6j9/series-workflowzk6j9-build-action-2089903689/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-workflowzk6j9/series-workflowzk6j9-build-action-3835958006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 15:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 15:33:42 +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":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"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-workflowzk6j9/series-workflowzk6j9-convert-artifact-9913303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 15:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 15:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:33:36 +0000 UTC FinishedAt: 2026-08-18 15:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 15:33:46 +0000 UTC FinishedAt: 2026-08-18 18:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk6j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["device_add_disk","bdev_disk_changed","disk_scan_partitions","blkdev_ioctl","nvme_failover_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1a8846e06388113dfdbb89dee005083fa9afdf9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_MULTIPATH","NVME_TARGET_LOOP","NVME_TARGET","BLK_DEV_NVME"],"series_id":"a2036541-68a8-4ea4-95be-728a792efb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 15:33:46 +0000 UTC FinishedAt: 2026-08-18 18:35:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88d7e3ff-2dd1-4f9a-91a2-55be42b52aa5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5d2db1b-720a-4281-bae3-fc868921342c,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-workflowzk6j9/series-workflowzk6j9-build-action-2089903689/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-workflowzk6j9/series-workflowzk6j9-build-action-3835958006/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-workflowzk6j9/series-workflowzk6j9-convert-artifact-9913303/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,}