Name: series-workflowsk6g2 Phase: Succeeded StartedAt: 2026-07-01 04:16:53 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[0] Phase: Succeeded StartedAt: 2026-07-01 04:16:53 +0000 UTC FinishedAt: 2026-07-01 04:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 04:16:53 +0000 UTC FinishedAt: 2026-07-01 04:30:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "ef315e77-1437-483f-bad9-cf29c3edcd11" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dax_kmem_do_hotplug", "dax_kmem_do_hotremove", "dax_kmem_init_resources", "dax_kmem_cleanup_resources", "dax_kmem_parse_state", "offline_and_remove_memory_ranges", "__add_memory_driver_managed", "mhp_online_type_to_str" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9pbml0X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSBvZiBEQVgga21lbSBkZXZpY2VzLiBJdCBhZGRzIGxvZ2ljIHRvIGhhbmRsZSBob3RwbHVnZ2luZyBhbmQgaG90cmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgaW5jbHVkaW5nIG5ldyBjb3JlIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9ucyBsaWtlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA0OjI4OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuaW5kZXggYjM0MjY2YmZhZTQ5YWUuLjJkY2FkMWU5ZGFkMGQ4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbkBAIC0xNTEsMyAmIzQzOzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXG4gXHRcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxuIFx0XHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAmIzM5O3RydWUmIzM5OyBvciAmIzM5O2ZvcmNlJiMzOTsuXCYjMzQ7XG4mIzQzO1xuJiM0MztXaGF0Olx0XHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcbiYjNDM7RGF0ZTpcdFx0SnVuZSwgMjAyNlxuJiM0MztLZXJuZWxWZXJzaW9uOlx0djYuMjFcbiYjNDM7Q29udGFjdDpcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cbiYjNDM7XHRcdEFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuXG4mIzQzO1x0XHRPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy5cbiYjNDM7XG4mIzQzO1x0XHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXG4mIzQzO1x0XHR0aGUgcGVyLWJsb2NrIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGUgQUJJOjpcbiYjNDM7XG4mIzQzO1x0XHQgIFwmIzM0O3VucGx1Z2dlZFwmIzM0OzogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lXCYjMzQ7OiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXG4mIzQzO1x0XHQgIFwmIzM0O29ubGluZV9rZXJuZWxcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9OT1JNQUxcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lX21vdmFibGVcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXG4mIzQzO1xuJiM0MztcdFx0XCYjMzQ7b2ZmbGluZVwmIzM0OyAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcbiYjNDM7XHRcdHJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGVcbiYjNDM7XHRcdGF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgXCYjMzQ7b2ZmbGluZVwmIzM0Oy4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLFxuJiM0MztcdFx0YXMgaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuXG4mIzQzO1xuJiM0MztcdFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgc3RhdGUsIHNvIGFcbiYjNDM7XHRcdGRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvIFwmIzM0O3VucGx1Z2dlZFwmIzM0OyBiZWZvcmUgaXQgY2FuIGJlIG9ubGluZWRcbiYjNDM7XHRcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uNWVlYWQzMzQ2ZjFlMzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyAwIHx8IG9ubGluZV90eXBlIFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbiBcbiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldilcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXG5pbmRleCBkOGFlYTVmZTBhZjJjNS4uOGQ4M2I1NTc3YThlYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG5AQCAtMzk0LDYgJiM0MzszOTUsNyBAQCBzdGF0aWMgc3NpemVfdCBjcmVhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQuc2l6ZSA9IDAsXG4gXHRcdFx0LmlkID0gLTEsXG4gXHRcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IF9fZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbiBcbkBAIC0xNTI3LDYgJiM0MzsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcbiBcdGlkYV9pbml0KFx1MDAyNmRldl9kYXgtXHUwMDNlaWRhKTtcbiBcbiBcdGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcbiYjNDM7XHRkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cdTAwM2VvbmxpbmVfdHlwZTtcbiBcbiBcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xuIFx0ZGV2LVx1MDAzZWRldnQgPSBpbm9kZS1cdTAwM2VpX3JkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLjNiYzc2YmMwYTE0NTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvYnVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2lmbmRlZiBfX0RBWF9CVVNfSF9fXG4gI2RlZmluZSBfX0RBWF9CVVNfSF9fXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5AQCAtMTYsNiAmIzQzOzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKVxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcbiBcbiYjNDM7LypcbiYjNDM7ICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcbiYjNDM7ICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXG4mIzQzOyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFx0KC0xKVxuJiM0MztcbiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsXG4gXHRcdHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLFxuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcbkBAIC0yNiw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcbiBcdHJlc291cmNlX3NpemVfdCBzaXplO1xuIFx0aW50IGlkO1xuIFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXG4gfTtcbiBcbiBzdHJ1Y3QgZGV2X2RheCAqZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXG5pbmRleCAzYWIzOWI3Nzg0M2Q1ZS4uMWE3ZWM2MjEyMjEzNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9jeGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvY3hsLmNcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmFuZ2VfbGVuKFx1MDAyNmN4bHJfZGF4LVx1MDAzZWhwYV9yYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gdHJ1ZSxcbiYjNDM7XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cbiBzdHJ1Y3QgZGF4X2RldmljZTtcbkBAIC03OSw2ICYjNDM7ODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbiYjNDM7ICogQG9ubGluZV90eXBlOiBNTU9QXyogb25saW5lIHR5cGUgZm9yIG1lbW9yeSBob3RwbHVnLCBvciBEQVhfT05MSU5FX0RFRkFVTFRcbiYjNDM7ICpcdFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcbiAgKiBAbnJfcmFuZ2U6IHNpemUgb2YgQHJhbmdlc1xuICAqIEByYW5nZXM6IHJhbmdlIHR1cGxlcyBvZiBtZW1vcnkgdXNlZFxuICAqL1xuQEAgLTk1LDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XHQvKiBlbnVtIG1tb3AsIG9yIERBWF9PTkxJTkVfREVGQVVMVCBzZW50aW5lbCAqL1xuIFx0aW50IG5yX3JhbmdlO1xuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4xOWVmZmUwZGEzZGNlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZXJhbmdlc1tpXTtcbiBcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcdTAwMjZkYXhfcmFuZ2UtXHUwMDNlcmFuZ2U7XG4gXG4tXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cbi1cdHItXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4tXHRyLVx1MDAzZWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbiYjNDM7XG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbiYjNDM7XHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuJiM0MztcdGludCBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucyAqL1xuIFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcbiB9O1xuIFxuQEAgLTY1LDE1ICYjNDM7NjksMzM0IEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuJiM0MztcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcbiYjNDM7XHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgYWRkZWQgPSAwO1xuJiM0MztcdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogaW5pdF9yZXNvdXJjZXMoKSBpcyBiZXN0LWVmZm9ydDogaWYgYSByZXNlcnZhdGlvbiBjb25mbGljdFxuJiM0MztcdFx0ICogb2NjdXJzIGl0IGtlZXBzIHRoZSByYW5nZSBidXQgbGVhdmVzIHJlc1tpXT1OVUxMLiBGb3IgaG90cGx1Z1xuJiM0MztcdFx0ICogb24gcHJvYmUgc3lzdGVtcywgdGhpcyBtZWFucyBrbWVtIHdpbGwgcGFydGlhbGx5IG9ubGluZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBXZSBoYXZlIHRvIGtlZXAgdGhpcyBiZWhhdmlvciBub3QgdG8gYnJlYWsgdGhvc2Ugc3lzdGVtcy5cbiYjNDM7XHRcdCAqIEZvciB0aG9zZSBzeXN0ZW1zIC0gYXRvbWljaXR5IG9ubHkgYXBwbGllcyB0byB2YWxpZCByYW5nZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcbiYjNDM7XHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4mIzQzO1x0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbiYjNDM7XHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4mIzQzO1x0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0b25saW5lX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBSZWxlYXNlIHRoZSByZXNlcnZhdGlvbiBmb3IgdGhlIHJhbmdlIHRoYXQgZmFpbGVkIHRvXG4mIzQzO1x0XHRcdCAqIGFkZCBzbyBhIGxhdGVyIGhvdHJlbW92ZSBkb2VzIG5vdCB0cnkgdG8gcmVtb3ZlIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSkge1xuJiM0MztcdFx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4mIzQzO1x0XHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoYWRkZWQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFkZGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZGRlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbVxuJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4mIzQzOyAqXG4mIzQzOyAqIEluaXRpYWxpemVzIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgREFYXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNraXAgcmFuZ2VzIGFscmVhZHkgYWRkZWQgKi9cbiYjNDM7XHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cbiYjNDM7XHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbiYjNDM7XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXJlc19uYW1lKTtcbiYjNDM7XHRcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4mIzQzO1x0XHRcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChtYXBwZWQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxuJiM0MztcdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4mIzQzO1x0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuJiM0MztcdFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4mIzQzO1x0XHRtYXBwZWQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWFwcGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBPZmZsaW5lcyBhbmQgcmVtb3ZlcyBldmVyeSBjdXJyZW50bHktYWRkZWQgcmFuZ2UgaW4gdGhlIGRldl9kYXggcmVnaW9uXG4mIzQzOyAqIGF0b21pY2FsbHk6IGVpdGhlciBhbGwgcmFuZ2VzIGFyZSBvZmZsaW5lZCBhbmQgcmVtb3ZlZCwgb3Igbm9uZSBhcmUgYW5kXG4mIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJhbmdlICpyYW5nZXM7XG4mIzQzO1x0aW50IGksIG5yX3JhbmdlcyA9IDAsIHJjO1xuJiM0MztcbiYjNDM7XHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0LyogQ29sbGVjdCB0aGUgcmFuZ2VzIHRoYXQgd2VyZSBhY3R1YWxseSBhZGRlZCBkdXJpbmcgcHJvYmUuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmFuZ2VzW25yX3JhbmdlcyYjNDM7JiM0MztdID0gcmFuZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xuJiM0MztcdGlmICghbnJfcmFuZ2VzKSB7XG4mIzQzO1x0XHRrZnJlZShyYW5nZXMpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcbiYjNDM7XHRrZnJlZShyYW5nZXMpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0LyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtob3RyZW1vdmUgZmFpbGVkLCBkZXZpY2UgbGVmdCBvbmxpbmU6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXNcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXG4mIzQzO1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4mIzQzO1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTigoKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4mIzQzO1x0XHQgXCYjMzQ7SG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9ubGluZV90eXBlO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xuJiM0MztcdGlmIChzeXNmc19zdHJlcShidWYsIFwmIzM0O3VucGx1Z2dlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xuJiM0MztcdC8qIERpc2FsbG93IFwmIzM0O29mZmxpbmVcJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4mIzQzO1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbiYjNDM7XHRcdHN0YXRlX3N0ciA9IFwmIzM0O3VucGx1Z2dlZFwmIzM0OztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBzdGF0ZV9zdHIgPzogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IG9ubGluZV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkge1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4mIzQzO1x0XHRyZXR1cm4gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xuJiM0MztcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcbiBcdGludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFO1xuIFxuIFx0LypcbkBAIC0xMzMsNjggJiM0Mzs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4mIzQzO1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4mIzQzO1x0ZGF0YS1cdTAwM2VkZXZfZGF4ID0gZGV2X2RheDtcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbi1cdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbi1cdFx0ICovXG4tXHRcdHJjID0gYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xuJiM0MztcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuJiM0MztcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKVxuJiM0MztcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UocmVzKTtcbi1cdFx0XHRrZnJlZShyZXMpO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0bWFwcGVkJiM0MzsmIzQzOztcbi1cdH1cbiYjNDM7XHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ob3RwbHVnO1xuJiM0MztcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuJiM0MztcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVxdWVzdF9tZW06XG4mIzQzO2Vycl9ob3RwbHVnOlxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztlcnJfcmVzb3VyY2VzOlxuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDYsNjUgJiM0Mzs0OTksODYgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4mIzQzOy8qXG4mIzQzOyAqIFJlbW92ZSB0aGUgZGV2aWNlJiMzOTtzIGFkZGVkIHJhbmdlcyB3aXRoIHJlbW92ZV9tZW1vcnkoKS5cbiYjNDM7ICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmVcbiYjNDM7ICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4tXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbi1cdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1x0aW50IGksIHJjID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIG9uZSBzaG90IGZvciByZW1vdmluZyBtZW1vcnksIGlmIHNvbWUgbWVtb3J5IGJsb2NrcyB3ZXJlIG5vdFxuLVx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXG4tXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxuLVx0ICogdW5iaW5kIHdpbGwgc3VjY2VlZCBldmVuIGlmIHdlIHJldHVybiBmYWlsdXJlLlxuLVx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXHRcdGludCByYztcbiBcbi1cdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4tXHRcdGlmIChyYylcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0gfHwgZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKSkge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4mIzQzO1x0XHRcdHJjID0gLUVCVVNZO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiBcbi1cdFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKTtcbi1cdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0c3VjY2VzcyYjNDM7JiM0Mzs7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiYjNDM7c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiYjNDM7e1xuJiM0MztcdGludCBub2RlID0gZGV2X2RheC1cdTAwM2V0YXJnZXRfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBVTlBMVUdHRUQ6IHN0YXRlIGlzIGtub3duIGNsZWFuIGFuZCByZWJvb3QgY2FuIGNsZWFuIHVwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgT05MSU5FXyo6IG1lbW9yeSBjYW5ub3QgYmUgcmVtb3ZlZCBoZXJlOiBvZmZsaW5pbmcgZHVyaW5nIGFuXG4mIzQzO1x0ICogdW5pbnRlcnJ1cHRpYmxlIHVuYmluZCBjYW4gZGVhZGxvY2suIExlYWsgdGhlIHJlc291cmNlcyB1bnRpbCByZWJvb3QuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBPRkZMSU5FOiBibG9ja3MgYXJlIGF0dGVtcHRlZCB0byByZW1vdmUgd2l0aCByZW1vdmVfbWVtb3J5KCksXG4mIzQzO1x0ICogd2hpY2ggbmV2ZXIgYXR0ZW1wdHMgb2ZmbGluaW5nLiBBIGJsb2NrIG9ubGluZWQgYmVoaW5kIG91ciBiYWNrXG4mIzQzO1x0ICogZmFpbHMgLUVCVVNZIGFuZCBpcyBsZWFrZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoZGV2X2RheCwgZGF0YSkpIHtcbiBcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuLVx0XHRkZXZfZXJyKGRldixcbi1cdFx0XHRcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxcblwmIzM0Oyxcbi1cdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAoc3VjY2VzcyBcdTAwM2U9IGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UpIHtcbi1cdFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbi1cdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGtmcmVlKGRhdGEpO1xuLVx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbi1cdFx0Lypcbi1cdFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4tXHRcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4tXHRcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbi1cdFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuLVx0XHQgKiB0aWxsIG5leHQgcmVib290LlxuLVx0XHQgKi9cbi1cdFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbi1cdH1cbiYjNDM7XHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVx1MDAzZW1naWQpO1xuJiM0MztcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuJiM0MztcdGtmcmVlKGRhdGEpO1xuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4mIzQzO1x0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcbiYjNDM7XHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4mIzQzO1x0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuJiM0MztcdCAqIHRpbGwgbmV4dCByZWJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZVxuIFx0ICogZGV2aWNlLWRheCByYW5nZSBhbmQgcmV0dXJuICYjMzk7MCYjMzk7IHRvIC1cdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcbmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvcG1lbS5jXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0LnBnbWFwID0gXHUwMDI2cGdtYXAsXG4gXHRcdC5zaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbiBcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbiYjNDM7XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjE3ODMyOTkwNzNlNDc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAgICAgKDFVTCBcdTAwM2NcdTAwM2MgU0VDVElPTl9TSVpFX0JJVFMpXG4gXG5AQCAtMTAwLDYgJiM0MzsxMDEsMzIgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XG4gdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTtcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXG4mIzQzOyAqXG4mIzQzOyAqIEFsaWducyB0aGUgc3RhcnQgYWRkcmVzcyB1cCBhbmQgdGhlIGVuZCBhZGRyZXNzIGRvd24gdG8gbWVtb3J5IGJsb2NrXG4mIzQzOyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxuJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcbiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXHUwMDNjIGFsaWduZWQuZW5kKSBiZWZvcmUgdXNpbmcgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCByYW5nZSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhbmdlIGFsaWduZWQ7XG4mIzQzO1xuJiM0MztcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4mIzQzO1x0YWxpZ25lZC5lbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWVuZCAmIzQzOyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbiYjNDM7XHQvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqL1xuJiM0MztcdGlmIChhbGlnbmVkLmVuZCBcdTAwM2M9IGFsaWduZWQuc3RhcnQpXG4mIzQzO1x0XHRhbGlnbmVkLnN0YXJ0ID0gYWxpZ25lZC5lbmQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YWxpZ25lZC5lbmQgLT0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsaWduZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLmRiMTBkNTBmMzBhZTFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xuIFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcbkBAIC0yNjcsNiAmIzQzOzI2OCw4IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcyk7XG4gXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fVxuQEAgLTI4Myw2ICYjNDM7Mjg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbkBAIC0yOTQsNiAmIzQzOzMwMyw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG4gXHRcdFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XG4mIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdFx0XHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKTtcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbiBcdFx0XHRcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcbkBAIC0zMTYsNiAmIzQzOzMyOCw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcbiBleHRlcm4gaW50IGFyY2hfY3JlYXRlX2xpbmVhcl9tYXBwaW5nKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIGFyY2hfcmVtb3ZlX2xpbmVhcl9tYXBwaW5nKHU2NCBzdGFydCwgdTY0IHNpemUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZCkgeyByZXR1cm4gTU1PUF9PRkZMSU5FOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxuIFxuIFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKTtcbiBcbiB2b2lkIG1ocF9zZXRfZGVmYXVsdF9vbmxpbmVfdHlwZShlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXG4gXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxuIHtcbi1cdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xuJiM0MztcdGVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7XG4mIzQzO1xuJiM0MztcdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcbiBcdHJldHVybiBkZXZpY2Vfb25saW5lKFx1MDAyNm1lbS1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC0xNDkxLDcgJiM0MzsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbiAgKlxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcbiBcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xuQEAgLTE1ODEsOCAmIzQzOzE1ODUsOSBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0XHRtZXJnZV9zeXN0ZW1fcmFtX3Jlc291cmNlKHJlcyk7XG4gXG4gXHQvKiBvbmxpbmUgcGFnZXMgaWYgcmVxdWVzdGVkICovXG4tXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdGlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpXG4mIzQzO1x0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNm9ubGluZV90eXBlLFxuJiM0MztcdFx0XHRcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbiBlcnJvcjpcbkBAIC0xNTk4LDcgJiM0MzsxNjAzLDEzIEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXG4mIzQzO2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiBcbi0vKlxuJiM0MzsvKipcbiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG4mIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbiYjNDM7ICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcbiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCYjMzQ7U3lzdGVtIFJBTSAoJERSSVZFUilcJiMzNDtcbiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbiYjNDM7ICogQG9ubGluZV90eXBlOiBBdXRvLU9ubGluZSBiZWhhdmlvciAob2ZmbGluZSwgb25saW5lLCBrZXJuZWwsIG1vdmFibGUpXG4mIzQzOyAqXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcbiAgKiBtZW1vcnkgaXMgbm90IGV4cG9zZWQgdmlhIHRoZSByYXcgZmlybXdhcmUtcHJvdmlkZWQgbWVtbWFwIGFzIHN5c3RlbVxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcbkBAIC0xNjM0LDYgJiM0MzsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcbiYjNDM7ICpcbiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmVcbiAgKiAgIHVzZWQgKGUuZy4sIHVzZSBwZXJzaXN0ZW50IG1lbW9yeSBhcyBzeXN0ZW0gUkFNKVxuICAqIC0gQ29vcmRpbmF0aW9uIHdpdGggYSBoeXBlcnZpc29yIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIG1lbW9yeVxuQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBUaGUgcmVzb3VyY2VfbmFtZSAodmlzaWJsZSB2aWEgL3Byb2MvaW9tZW0pIGhhcyB0byBoYXZlIHRoZSBmb3JtYXRcbiAgKiBcJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKVwmIzM0Oy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLVx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuJiM0MztcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0aW50IHJjO1xuQEAgLTE2NTgsNiAmIzQzOzE2ODEsOSBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0ICAgIHJlc291cmNlX25hbWVbc3RybGVuKHJlc291cmNlX25hbWUpIC0gMV0gIT0gJiMzOTspJiMzOTspXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlIFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuIFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcbkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmMgPSBhZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MpO1xuJiM0MztcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcbiBcbkBAIC0xNjc0LDYgJiM0MzsxNzAwLDMwIEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcdHJldHVybiByYztcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcJiMzNDtrbWVtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxuJiM0MzsgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4mIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbiYjNDM7ICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFwmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpXCYjMzQ7XG4mIzQzOyAqIEBtaHBfZmxhZ3M6IE1lbW9yeSBob3RwbHVnIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5XG4mIzQzOyAqIGJ1aWxkIGNvbmZpZyBvciBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcbiYjNDM7XHRcdFx0bWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcbiBcbiAvKlxuQEAgLTIzNzksNTggJiM0MzsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiAgKi9cbiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbiYjNDM7XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7XG4mIzQzO1x0XHQuc3RhcnQgPSBzdGFydCxcbiYjNDM7XHRcdC5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoXHUwMDI2cmFuZ2UsIDEpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbiYjNDM7ICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXG4mIzQzOyAqIEBucl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIEByYW5nZXNcbiYjNDM7ICpcbiYjNDM7ICogT2ZmbGluZSBhbmQgcmVtb3ZlIHNldmVyYWwgbWVtb3J5IHJhbmdlcyBhcyBvbmUgb3BlcmF0aW9uLCBzZXJpYWxpemVkXG4mIzQzOyAqIGFnYWluc3Qgb3RoZXIgaG90cGx1ZyBvcGVyYXRpb25zIGJ5IGEgc2luZ2xlIGxvY2tfZGV2aWNlX2hvdHBsdWcoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBvZmZsaW5lcyBhbGwgcmFuZ2VzIGJlZm9yZSByZW1vdmluZyBhbnkgb2YgdGhlbS4gIElmIG9mZmxpbmluZyBhbnlcbiYjNDM7ICogcmFuZ2UgZmFpbHMsIHRoZSBlbnRpcmUgcHJvY2VzcyBpcyByZXZlcnRlZCBhbmQgbm90aGluZyBpcyByZW1vdmVkLlxuJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggcmFuZ2UgbXVzdCBiZSBtZW1vcnktYmxvY2sgYWxpZ25lZCBpbiBzdGFydCBhbmQgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS4gIE9uIGZhaWx1cmUgbm8gcmFuZ2UgaGFzXG4mIzQzOyAqIGJlZW4gcmVtb3ZlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gMDtcbiBcdHVpbnQ4X3QgKm9ubGluZV90eXBlcywgKnRtcDtcbi1cdGludCByYztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpbnQgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuJiM0MztcdGlmICghcmFuZ2VzIHx8ICFucl9yYW5nZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHU2NCBzdGFydCA9IHJhbmdlc1tpXS5zdGFydDtcbiYjNDM7XHRcdGNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuJiM0MztcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdG1iX2NvdW50ICYjNDM7PSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Lypcbi1cdCAqIFdlJiMzOTtsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4mIzQzO1x0ICogUmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBldmVyeSBtZW1vcnkgYmxvY2sgYWNyb3NzIGFsbCByYW5nZXMsXG4mIzQzO1x0ICogc28gd2UgY2FuIHJldmVydCBpZiBvZmZsaW5pbmcgYSBsYXRlciBibG9jayBmYWlscy4gIEFsbCBlbnRyaWVzIHN0YXJ0XG4mIzQzO1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4gXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJiMzOTtsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW5cbi1cdCAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS5cbi1cdCAqL1xuIFx0bWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7XG4gXG4gXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4mIzQzO1x0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cbiBcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSW4gY2FzZSB3ZSBzdWNjZWVkZWQgdG8gb2ZmbGluZSBhbGwgbWVtb3J5LCByZW1vdmUgaXQuXG4tXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXG4tXHQgKi9cbi1cdGlmICghcmMpIHtcbi1cdFx0cmMgPSB0cnlfcmVtb3ZlX21lbW9yeShzdGFydCwgc2l6ZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiBcdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuJiM0MztcdC8qIElmIGFueSBmYWlsdXJlIG9jY3VycmVkIGF0IGFsbCwgcm9sbGJhY2sgYW55IGNoYW5nZXMgYW5kIGJhaWwgKi9cbiBcdGlmIChyYykge1xuIFx0XHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLFxuLVx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSAyOiBSZW1vdmUuIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgaG9sZGluZyB0aGUgaG90cGx1ZyBsb2NrICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0cnlfcmVtb3ZlX21lbW9yeShyYW5nZXNbaV0uc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSkpKTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjU1Mjg2ODJhM2E5MTIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZVxuIFRBUkdFVFMgJiM0Mzs9IGNwdWZyZXFcbiBUQVJHRVRTICYjNDM7PSBjcHUtaG90cGx1Z1xuIFRBUkdFVFMgJiM0Mzs9IGRhbW9uXG4mIzQzO1RBUkdFVFMgJiM0Mzs9IGRheFxuIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmVcbiBUQVJHRVRTICYjNDM7PSBkbWFidWYtaGVhcHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVhNGYzZDczYTViYWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO2FsbDpcbiYjNDM7XG4mIzQzO1RFU1RfUFJPR1MgOj0gZGF4LWttZW0taG90cGx1Zy5zaFxuJiM0MztcbiYjNDM7aW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsNCBAQFxuJiM0MztDT05GSUdfREVWX0RBWD1tXG4mIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jOGJiYWY2MTc4ZWQ5Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbkBAIC0wLDAgJiM0MzsxLDE5MCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gXCYjMzQ7c3RhdGVcJiMzNDsgc3lzZnMgYXR0cmlidXRlOlxuJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtXHUwMDNlICB1bnBsdWdnZWQgfCBvbmxpbmUgfCBvbmxpbmVfa2VybmVsIHwgb25saW5lX21vdmFibGVcbiYjNDM7I1xuJiM0MzsjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuXG4mIzQzOyNcbiYjNDM7IyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbiYjNDM7IyAgIG1lbW1hcD0yRyE0R1xuJiM0MzsjXG4mIzQzOyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4mIzQzOyNcbiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuJiM0MzsjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4mIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0MztESVI9XCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWYgXCYjMzQ7JDBcJiMzNDspXCYjMzQ7KVwmIzM0O1xuJiM0MzsuIFwmIzM0OyRESVJcJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7REFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbiYjNDM7XG4mIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH1cbiYjNDM7Z2V0X3N0YXRlKCkgeyBjYXQgXCYjMzQ7JEhQXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IH1cbiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuJiM0MzsjIHdyaXRlJiMzOTtzIGV4aXQgc3RhdHVzICgwID0gYWNjZXB0ZWQgYnkgdGhlIGtlcm5lbClcbiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskSFBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgfVxuJiM0MztcbiYjNDM7ZmluZF9rbWVtX2RheCgpIHtcbiYjNDM7XHRsb2NhbCBkIGRydlxuJiM0MztcdGZvciBkIGluIFwmIzM0OyREQVhfQkFTRVwmIzM0Oy9kYXgqOyBkb1xuJiM0MztcdFx0WyAtZSBcJiMzNDskZC9zdGF0ZVwmIzM0OyBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0XHRkcnY9JChyZWFkbGluayBcJiMzNDskZC9kcml2ZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRcdFsgXCYjMzQ7JChiYXNlbmFtZSBcJiMzNDske2RydjotfVwmIzM0OylcJiMzNDsgPSBrbWVtIF0gfHwgY29udGludWVcbiYjNDM7XHRcdGJhc2VuYW1lIFwmIzM0OyRkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMFxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskVUlEXCYjMzQ7ICE9IDAgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7REFYPSQoZmluZF9rbWVtX2RheClcbiYjNDM7aWYgWyAteiBcJiMzNDskREFYXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4mIzQzO09SSUc9JChnZXRfc3RhdGUpXG4mIzQzO1xuJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSB8fCBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVwmIzM0O1xuJiM0MztcdFsgLW4gXCYjMzQ7JE9SSUdcJiMzNDsgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwmIzM0OyRPUklHXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuJiM0MztcbiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9tc2cgXCYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwmIzM0O1xuJiM0MztrdGFwX3NldF9wbGFuIDhcbiYjNDM7XG4mIzQzOyMgQSBwdWJsaWMgKE5fTUVNT1JZKSBrbWVtIG5vZGUgb25saW5lZCBpbnRvIGEga2VybmVsIHpvbmUgKG9ubGluZS9vbmxpbmVfa2VybmVsKVxuJiM0MzsjIGNvbGxlY3RzIHVubW92YWJsZSBhbGxvY2F0aW9ucyBhbmQgY2FuIHRoZW4gbmV2ZXIgYmUgb2ZmbGluZWQsIHdoaWNoIHdvdWxkXG4mIzQzOyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlclxuJiM0MzsjIHN1Y2Nlc3NmdWxseSBvbmxpbmVzIG9ubGluZV9tb3ZhYmxlLCB0aGUgb25lIG1vZGUgdGhhdCBpcyByZWxpYWJseSB1bnBsdWdnYWJsZS5cbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbiYjNDM7bXRfb25saW5lPSQobWVtdG90YWxfa2IpXG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X29ubGluZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnRcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQSBkaWZmZXJlbnQgb25saW5lIHR5cGUgaXMgcmVqZWN0ZWQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyB1bnBsdWcuICBUaGUgd3JpdGVcbiYjNDM7IyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kP1xuJiM0MztpZiBbIFwmIzM0OyRyY1wmIzM0OyAhPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3JlamVjdCBvbmxpbmVfa2VybmVsIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnIChubyBrZXJuZWwtem9uZSBvbmxpbmUpXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmVfbW92YWJsZS1cdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfb25saW5lXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDt1bnBsdWcgZnJvbSBvbmxpbmVfbW92YWJsZTogTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdCBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKVxuJiM0MztzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBcJiMzNDskYmVmb3JlXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFRoZSBvbmxpbmVfbW92YWJsZSAtXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXG4mIzQzOyMgcmUtcmVzZXJ2ZSB0aGUgcGVyLXJhbmdlIHJlc291cmNlcywgc28gYSBsYXRlciB1bnBsdWcgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZVxuJiM0MzsjIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgZWFjaCBpdGVyYXRpb24gcmVhbGx5IGFkZHMgYW5kIGZyZWVzIG1lbW9yeS5cbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZFxuJiM0MztjeWNsZV9vaz0xOyBmYWlsX2k9MDsgb249MDsgb2ZmPTBcbiYjNDM7Zm9yIGkgaW4gMSAyIDM7IGRvXG4mIzQzO1x0aWYgISBzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbiYjNDM7XHRvbj0kKG1lbXRvdGFsX2tiKVxuJiM0MztcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuJiM0MztcdG9mZj0kKG1lbXRvdGFsX2tiKVxuJiM0MztcdGlmIFsgXCYjMzQ7JG9uXCYjMzQ7IC1sZSBcJiMzNDskbXRfdW5wbHVnZ2VkXCYjMzQ7IF0gfHwgWyBcJiMzNDskb2ZmXCYjMzQ7IC1nZSBcJiMzNDskb25cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xuJiM0MztcdGZpXG4mIzQzO2RvbmVcbiYjNDM7aWYgWyBcJiMzNDskY3ljbGVfb2tcJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtvbmxpbmVfbW92YWJsZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogYWRkZWQgYW5kIGZyZWVkIGVhY2ggdGltZSlcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZWdyZXNzZWQgYXQgaXRlcmF0aW9uICRmYWlsX2kgKG9uPSRvbiBvZmY9JG9mZiBiYXNlbGluZT0kbXRfdW5wbHVnZ2VkKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XG4mIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkXG4mIzQzO2lmIFsgLXcgXCYjMzQ7JEFPQlwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIC13IFwmIzM0OyREUlYvdW5iaW5kXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi9iaW5kXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRvcmlnX2FvYj0kKGNhdCBcJiMzNDskQU9CXCYjMzQ7KVxuJiM0MztcdGVjaG8gXCYjMzQ7JERBWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGVjaG8gb2ZmbGluZSBcdTAwM2UgXCYjMzQ7JEFPQlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL2JpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XHRzdD0kKGdldF9zdGF0ZSlcbiYjNDM7XHRlY2hvIFwmIzM0OyRvcmlnX2FvYlwmIzM0OyBcdTAwM2UgXCYjMzQ7JEFPQlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5XG4mIzQzO1x0aWYgWyBcJiMzNDskc3RcJiMzNDsgPSBvZmZsaW5lIF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZSBwb2xpY3kgcmVzb2x2ZWQgYXQgYmluZDogYXV0b19vbmxpbmVfYmxvY2tzPW9mZmxpbmUgLVx1MDAzZSBzdGF0ZT1vZmZsaW5lXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7YmluZC10aW1lIHBvbGljeSBub3QgaG9ub3JlZDogc3RhdGU9JHN0IChleHBlY3RlZCBvZmZsaW5lKVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0c2V0X3N0YXRlIHVucGx1Z2dlZCAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDthdXRvX29ubGluZV9ibG9ja3Mgb3IgZHJpdmVyIGJpbmQvdW5iaW5kIG5vdCB3cml0YWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7WyAtbiBcJiMzNDskT1JJR1wmIzM0OyBdIFx1MDAyNlx1MDAyNiBzZXRfc3RhdGUgXCYjMzQ7JE9SSUdcJiMzNDtcbiYjNDM7XG4mIzQzOyMgREVTVFJVQ1RJVkU6IHVuYmluZGluZyB0aGUgZHJpdmVyIHdoaWxlIG1lbW9yeSBpcyBvbmxpbmUgY2F1c2VzIHRoZSByZXNvdXJjZXNcbiYjNDM7IyB0byBsZWFrIC0gYnV0IHRoZSB1bmJpbmQgc2hvdWxkIG5vdCBkZWFkbG9jay4gIEluc3RlYWQgdGhlIGRyaXZlciBsZWFrcyBpdFxuJiM0MzsjIHdpdGggYSBzaW5nbGUgXCYjMzQ7c3R1Y2sgb25saW5lXCYjMzQ7IHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGVcbiYjNDM7IyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsXG4mIzQzOyMgbGVhdmluZyB0aGUgcmVzdG9yZWQgc3RhdGUgYWJvdmUgdW50b3VjaGVkIG90aGVyd2lzZS4gIG9ubGluZV9tb3ZhYmxlIG9ubHk6XG4mIzQzOyMgdGhpcyB0ZXN0IG5ldmVyIG9ubGluZXMgYSBwdWJsaWMgbm9kZSBpbnRvIGEga2VybmVsIHpvbmUuXG4mIzQzO2lmIFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZVxuJiM0MztmaVxuJiM0MztpZiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdG10X29uPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0ZG1lc2cgLUMgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGVjaG8gXCYjMzQ7JERBWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0IyBUaGUgbGVha2VkIFwmIzM0O1N5c3RlbSBSQU0gKGttZW0pXCYjMzQ7IHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xuJiM0MztcdCMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLlxuJiM0MztcdCMgV2FsayAvcHJvYy9pb21lbSB0byBwcm92b2tlIHRoYXQgdXNlLWFmdGVyLWZyZWUgKGNhdWdodCBieSBLQVNBTikuXG4mIzQzO1x0Y2F0IC9wcm9jL2lvbWVtIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRzcGxhdD0kKGRtZXNnIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1jaUUgXCYjMzQ7S0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XCYjMzQ7KVxuJiM0MztcdGlmIFsgXCYjMzQ7JHNwbGF0XCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRtdF9hZnRlclwmIzM0OyAtZ2UgXCYjMzQ7JG10X29uXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmU6IG1lbW9yeSBsZWZ0IG9ubGluZSwgbm8gVUFGL29vcHMgKE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQilcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDt1bmJpbmQgd2hpbGUgb25saW5lIHJlZ3Jlc3NlZDogc3BsYXQ9JHNwbGF0IE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQlwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDtjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztrdGFwX2ZpbmlzaGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzO3RpbWVvdXQ9OTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZfREFYJiMzNDssCiAgICAmIzM0O0RFVl9EQVhfS01FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cGx1ZyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9kb19ob3RyZW1vdmUmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fcGFyc2Vfc3RhdGUmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OywKICAgICYjMzQ7X19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O21ocF9vbmxpbmVfdHlwZV90b19zdHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA0OjI4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4CmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheApAQCAtMTUxLDMgJiM0MzsxNTEsMjkgQEAgRGVzY3JpcHRpb246CiAJCW1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpcwogCQl0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC0KIAkJbWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJiMzOTt0cnVlJiMzOTsgb3IgJiMzOTtmb3JjZSYjMzk7LiYjMzQ7CiYjNDM7CiYjNDM7V2hhdDoJCS9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZQomIzQzO0RhdGU6CQlKdW5lLCAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJdjYuMjEKJiM0MztDb250YWN0OgludmRpbW1AbGlzdHMubGludXguZGV2CiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KJiM0MzsJCUFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuCiYjNDM7CQlPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy4KJiM0MzsKJiM0MzsJCVJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3IKJiM0MzsJCXRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OgomIzQzOwomIzQzOwkJICAmIzM0O3VucGx1Z2dlZCYjMzQ7OiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudAomIzQzOwkJICAmIzM0O29ubGluZSYjMzQ7OiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsCiYjNDM7CQkgICYjMzQ7b25saW5lX2tlcm5lbCYjMzQ7OiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMCiYjNDM7CQkgICYjMzQ7b25saW5lX21vdmFibGUmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEUKJiM0MzsKJiM0MzsJCSYjMzQ7b2ZmbGluZSYjMzQ7IChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZQomIzQzOwkJcmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZQomIzQzOwkJYXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyAmIzM0O29mZmxpbmUmIzM0Oy4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLAomIzQzOwkJYXMgaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuCiYjNDM7CiYjNDM7CQlBIGRldmljZSBjYW4gb25seSBiZSBvbmxpbmVkIGZyb20gdGhlICYjMzQ7dW5wbHVnZ2VkJiMzNDsgc3RhdGUsIHNvIGEKJiM0MzsJCWRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvICYjMzQ7dW5wbHVnZ2VkJiMzNDsgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkCiYjNDM7CQlpbnRvIGEgZGlmZmVyZW50IHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGJjZmUyZDlmNGFkYmQ5Li41ZWVhZDMzNDZmMWUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtNDYsNiAmIzQzOzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKQogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpOwomIzQzOwomIzQzO2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKQomIzQzO3sKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgMCB8fCBvbmxpbmVfdHlwZSAmZ3Q7PSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX3RvX3N0cik7CiAKICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jCmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvYnVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKQEAgLTM5NCw2ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkuc2l6ZSA9IDAsCiAJCQkuaWQgPSAtMSwKIAkJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkJLm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULAogCQl9OwogCQlzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IF9fZGV2bV9jcmVhdGVfZGV2X2RheCgmYW1wO2RhdGEpOwogCkBAIC0xNTI3LDYgJiM0MzsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSkKIAlpZGFfaW5pdCgmYW1wO2Rldl9kYXgtJmd0O2lkYSk7CiAKIAlkZXZfZGF4LSZndDttZW1tYXBfb25fbWVtb3J5ID0gZGF0YS0mZ3Q7bWVtbWFwX29uX21lbW9yeTsKJiM0MzsJZGV2X2RheC0mZ3Q7b25saW5lX3R5cGUgPSBkYXRhLSZndDtvbmxpbmVfdHlwZTsKIAogCWlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpOwogCWRldi0mZ3Q7ZGV2dCA9IGlub2RlLSZndDtpX3JkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oCmluZGV4IDU5MDkxNzFhNDQyOGI3Li4zYmM3NmJjMGExNDU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvYnVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2lmbmRlZiBfX0RBWF9CVVNfSF9fCiAjZGVmaW5lIF9fREFYX0JVU19IX18KICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwpAQCAtMTYsNiAmIzQzOzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uOwogI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApCiAjZGVmaW5lIElPUkVTT1VSQ0VfREFYX0tNRU0gQklUKDEpCiAKJiM0MzsvKgomIzQzOyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lCiYjNDM7ICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsCiYjNDM7ICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVAkoLTEpCiYjNDM7CiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsCiAJCXN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKQEAgLTI2LDYgJiM0MzszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEgewogCXJlc291cmNlX3NpemVfdCBzaXplOwogCWludCBpZDsKIAlib29sIG1lbW1hcF9vbl9tZW1vcnk7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsJLyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi8KIH07CiAKIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvY3hsLmMgYi9kcml2ZXJzL2RheC9jeGwuYwppbmRleCAzYWIzOWI3Nzg0M2Q1ZS4uMWE3ZWM2MjEyMjEzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2N4bC5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLmlkID0gLTEsCiAJCS5zaXplID0gcmFuZ2VfbGVuKCZhbXA7Y3hscl9kYXgtJmd0O2hwYV9yYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gdHJ1ZSwKJiM0MzsJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAl9OwogCiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKaW5kZXggODFlNGFmNDllMzljMTAuLjkwMmU5MjJkYzRlNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKIAogLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi8KIHN0cnVjdCBkYXhfZGV2aWNlOwpAQCAtNzksNiAmIzQzOzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2UgewogICogQGRldjogZGV2aWNlIGNvcmUKICAqIEBwZ21hcDogcGdtYXAgZm9yIG1lbW1hcCBzZXR1cCAvIGxpZmV0aW1lIChkcml2ZXIgb3duZWQpCiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5CiYjNDM7ICogQG9ubGluZV90eXBlOiBNTU9QXyogb25saW5lIHR5cGUgZm9yIG1lbW9yeSBob3RwbHVnLCBvciBEQVhfT05MSU5FX0RFRkFVTFQKJiM0MzsgKgkJIHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHMKICAqIEBucl9yYW5nZTogc2l6ZSBvZiBAcmFuZ2VzCiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWQKICAqLwpAQCAtOTUsNiAmIzQzOzk4LDcgQEAgc3RydWN0IGRldl9kYXggewogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7CiAJYm9vbCBtZW1tYXBfb25fbWVtb3J5OwomIzQzOwlpbnQgb25saW5lX3R5cGU7CS8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovCiAJaW50IG5yX3JhbmdlOwogCXN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uYwppbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdGF0aWMgaW50IGRheF9obWVtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCS5pZCA9IC0xLAogCQkuc2l6ZSA9IHJlZ2lvbl9pZGxlID8gMCA6IHJhbmdlX2xlbigmYW1wO21yaS0mZ3Q7cmFuZ2UpLAogCQkubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLAomIzQzOwkJLm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULAogCX07CiAKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoJmFtcDtkYXRhKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmMKaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjE5ZWZmZTBkYTNkY2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jCkBAIC0zMyw5ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKQogCXN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSAmYW1wO2Rldl9kYXgtJmd0O3Jhbmdlc1tpXTsKIAlzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gJmFtcDtkYXhfcmFuZ2UtJmd0O3JhbmdlOwogCi0JLyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovCi0Jci0mZ3Q7c3RhcnQgPSBBTElHTihyYW5nZS0mZ3Q7c3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpOwotCXItJmd0O2VuZCA9IEFMSUdOX0RPV04ocmFuZ2UtJmd0O2VuZCAmIzQzOyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7CiYjNDM7CSpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpOwogCWlmIChyLSZndDtzdGFydCAmZ3Q7PSByLSZndDtlbmQpIHsKIAkJci0mZ3Q7c3RhcnQgPSByYW5nZS0mZ3Q7c3RhcnQ7CiAJCXItJmd0O2VuZCA9IHJhbmdlLSZndDtlbmQ7CkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VECSgtMSkKJiM0MzsKIHN0cnVjdCBkYXhfa21lbV9kYXRhIHsKIAljb25zdCBjaGFyICpyZXNfbmFtZTsKIAlpbnQgbWdpZDsKJiM0MzsJaW50IG51bWFfbm9kZTsKJiM0MzsJc3RydWN0IGRldl9kYXggKmRldl9kYXg7CiYjNDM7CWludCBzdGF0ZTsKJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi8KIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlc1tdOwogfTsKIApAQCAtNjUsMTUgJiM0Mzs2OSwzMzQgQEAgc3RhdGljIHZvaWQga21lbV9wdXRfbWVtb3J5X3R5cGVzKHZvaWQpCiAJbXRfcHV0X21lbW9yeV90eXBlcygmYW1wO2ttZW1fbWVtb3J5X3R5cGVzKTsKIH0KIAomIzQzOy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqLwomIzQzO3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RhdGUgPT0gTU1PUF9PTkxJTkUgfHwKJiM0MzsJICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX0tFUk5FTCB8fAomIzQzOwkgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3MKJiM0MzsgKgomIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGUKJiM0MzsgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSwKJiM0MzsJCQkgICAgICAgaW50IG9ubGluZV90eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CWludCBpLCByYywgYWRkZWQgPSAwOwomIzQzOwltaHBfdCBtaHBfZmxhZ3M7CiYjNDM7CiYjNDM7CWlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSAmZ3Q7IE1NT1BfT05MSU5FX01PVkFCTEUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHJhbmdlIHJhbmdlOwomIzQzOwomIzQzOwkJcmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBpbml0X3Jlc291cmNlcygpIGlzIGJlc3QtZWZmb3J0OiBpZiBhIHJlc2VydmF0aW9uIGNvbmZsaWN0CiYjNDM7CQkgKiBvY2N1cnMgaXQga2VlcHMgdGhlIHJhbmdlIGJ1dCBsZWF2ZXMgcmVzW2ldPU5VTEwuIEZvciBob3RwbHVnCiYjNDM7CQkgKiBvbiBwcm9iZSBzeXN0ZW1zLCB0aGlzIG1lYW5zIGttZW0gd2lsbCBwYXJ0aWFsbHkgb25saW5lLgomIzQzOwkJICoKJiM0MzsJCSAqIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGJlaGF2aW9yIG5vdCB0byBicmVhayB0aG9zZSBzeXN0ZW1zLgomIzQzOwkJICogRm9yIHRob3NlIHN5c3RlbXMgLSBhdG9taWNpdHkgb25seSBhcHBsaWVzIHRvIHZhbGlkIHJhbmdlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7CiYjNDM7CQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKJiM0MzsJCQltaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXQKJiM0MzsJCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAomIzQzOwkJCQlyYW5nZV9sZW4oJmFtcDtyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLAomIzQzOwkJCQlvbmxpbmVfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJCSBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG8KJiM0MzsJCQkgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnkKJiM0MzsJCQkgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKSB7CiYjNDM7CQkJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoYWRkZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYWRkZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbQomIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZQomIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZwomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVgKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJaW50IGksIHJjLCBtYXBwZWQgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovCiYjNDM7CQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KJiM0MzsJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLAomIzQzOwkJCQkJIGRhdGEtJmd0O3Jlc19uYW1lKTsKJiM0MzsJCWlmICghcmVzKSB7CiYjNDM7CQkJZGV2X3dhcm4oZGV2LCAmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dAomIzQzOwkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobWFwcGVkKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCiYjNDM7CQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKJiM0MzsJCSAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzCiYjNDM7CQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcy0mZ3Q7ZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07CiYjNDM7CQltYXBwZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXBwZWQ7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb24KJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZAomIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CXN0cnVjdCByYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC0mZ3Q7bnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFuZ2VzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7CiYjNDM7CiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovCiYjNDM7CWlmICghbnJfcmFuZ2VzKSB7CiYjNDM7CQlrZnJlZShyYW5nZXMpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7CiYjNDM7CWtmcmVlKHJhbmdlcyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJLyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi8KJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2hvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxsIHJhbmdlcyByZW1vdmVkOyByZWxlYXNlIHRoZSByZXNlcnZlZCByZXNvdXJjZXMuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMgLSByZW1vdmUgdGhlIGRheCBtZW1vcnkgcmVzb3VyY2VzCiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlCiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyCiYjNDM7CSAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvbgomIzQzOwkgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTigoKGRhdGEtJmd0O3N0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgJmFtcDsmYW1wOwomIzQzOwkJICAoZGF0YS0mZ3Q7c3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksCiYjNDM7CQkgJiMzNDtIb3RwbHVnIG1lbW9yeSByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3QmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKJiM0MzsKJiM0MzsJLyogJiMzNDt1bnBsdWdnZWQmIzM0OyBpcyBrbWVtLXNwZWNpZmljIC0gdGhlIHJlc3QgbWFwIHRvIE1NT1BfICovCiYjNDM7CWlmIChzeXNmc19zdHJlcShidWYsICYjMzQ7dW5wbHVnZ2VkJiMzNDspKQomIzQzOwkJcmV0dXJuIERBWF9LTUVNX1VOUExVR0dFRDsKJiM0MzsKJiM0MzsJb25saW5lX3R5cGUgPSBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoYnVmKTsKJiM0MzsJLyogRGlzYWxsb3cgJiMzNDtvZmZsaW5lJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovCiYjNDM7CWlmIChvbmxpbmVfdHlwZSA9PSBNTU9QX09GRkxJTkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIG9ubGluZV90eXBlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWNvbnN0IGNoYXIgKnN0YXRlX3N0cjsKJiM0MzsKJiM0MzsJaWYgKCFkYXRhKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJaWYgKGRhdGEtJmd0O3N0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRCkKJiM0MzsJCXN0YXRlX3N0ciA9ICYjMzQ7dW5wbHVnZ2VkJiMzNDs7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBzdGF0ZV9zdHIgPzogJiMzNDt1bmtub3duJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7CiYjNDM7CXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IERBWF9LTUVNX1VOUExVR0dFRCkKJiM0MzsJCXJldHVybiBvbmxpbmVfdHlwZTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovCiYjNDM7CWlmIChkYXRhLSZndDtzdGF0ZSA9PSBvbmxpbmVfdHlwZSkKJiM0MzsJCXJldHVybiBsZW47CiYjNDM7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHsKJiM0MzsJCXJjID0gZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCWRhdGEtJmd0O3N0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwkJcmV0dXJuIGxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBPbmxpbmluZyBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgdW5wbHVnZ2VkIHN0YXRlLiAqLwomIzQzOwlpZiAoZGF0YS0mZ3Q7c3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJLyogUmUtYWNxdWlyZSByZXNvdXJjZXMgaWYgcHJldmlvdXNseSB1bnBsdWdnZWQsIG90aGVyd2lzZSBuby1vcCAqLwomIzQzOwlyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IG9ubGluZV90eXBlOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpOwomIzQzOwogc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7CiAJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7CiAJc3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbXR5cGU7Ci0JaW50IGksIHJjLCBtYXBwZWQgPSAwOwotCW1ocF90IG1ocF9mbGFnczsKJiM0MzsJaW50IGksIHJjOwogCWludCBudW1hX25vZGU7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKIAlpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTsKIAogCS8qCkBAIC0xMzMsNjggJiM0Mzs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiAJaWYgKHJjICZsdDsgMCkKIAkJZ290byBlcnJfcmVnX21naWQ7CiAJZGF0YS0mZ3Q7bWdpZCA9IHJjOwomIzQzOwlkYXRhLSZndDtudW1hX25vZGUgPSBudW1hX25vZGU7CiYjNDM7CWRhdGEtJmd0O2Rldl9kYXggPSBkZXZfZGF4OwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RhdGEtJmd0O2xvY2spOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQkJc3RydWN0IHJhbmdlIHJhbmdlOwotCi0JCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7Ci0JCWlmIChyYykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovCi0JCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLCBkYXRhLSZndDtyZXNfbmFtZSk7Ci0JCWlmICghcmVzKSB7Ci0JCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cbiYjMzQ7LAotCQkJCQlpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKLQkJCS8qCi0JCQkgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0Ci0JCQkgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuCi0JCQkgKi8KLQkJCWlmIChtYXBwZWQpCi0JCQkJY29udGludWU7Ci0JCQlyYyA9IC1FQlVTWTsKLQkJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOwotCQl9Ci0JCWRhdGEtJmd0O3Jlc1tpXSA9IHJlczsKLQotCQkvKgotCQkgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhcgotCQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKLQkJICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3MKLQkJICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LgotCQkgKi8KLQkJcmVzLSZndDtmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTsKJiM0MzsJZGV2X3NldF9kcnZkYXRhKGRldiwgZGF0YSk7CiAKLQkJbWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEOwotCQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKLQkJCW1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTsKJiM0MzsJcmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc291cmNlczsKIAotCQkvKgotCQkgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMmIzM5O2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdAotCQkgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LgotCQkgKi8KLQkJcmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAotCQkJCXJhbmdlX2xlbigmYW1wO3JhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpOwomIzQzOwkvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi8KJiM0MzsJb25saW5lX3R5cGUgPSBkZXZfZGF4LSZndDtvbmxpbmVfdHlwZTsKJiM0MzsJaWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVCkKJiM0MzsJCW9ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiAKLQkJaWYgKHJjKSB7Ci0JCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCi0JCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCQkJcmVtb3ZlX3Jlc291cmNlKHJlcyk7Ci0JCQlrZnJlZShyZXMpOwotCQkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKLQkJCWlmIChtYXBwZWQpCi0JCQkJY29udGludWU7Ci0JCQlnb3RvIGVycl9yZXF1ZXN0X21lbTsKLQkJfQotCQltYXBwZWQmIzQzOyYjNDM7OwotCX0KJiM0MzsJLyogQWx3YXlzIGNyZWF0ZSBibG9ja3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGV2ZW4gaWYgb2ZmbGluZSAqLwomIzQzOwlyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfaG90cGx1ZzsKJiM0MzsJZGF0YS0mZ3Q7c3RhdGUgPSBvbmxpbmVfdHlwZTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpOwomIzQzOwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZhbXA7ZGV2X2F0dHJfc3RhdGUpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxuJiMzNDspOwogCiAJcmV0dXJuIDA7CiAKLWVycl9yZXF1ZXN0X21lbToKJiM0MztlcnJfaG90cGx1ZzoKJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7ZXJyX3Jlc291cmNlczoKJiM0MzsJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7CiBlcnJfcmVnX21naWQ6CiAJa2ZyZWUoZGF0YS0mZ3Q7cmVzX25hbWUpOwpAQCAtMjA2LDY1ICYjNDM7NDk5LDg2IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogfQogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiYjNDM7LyoKJiM0MzsgKiBSZW1vdmUgdGhlIGRldmljZSYjMzk7cyBhZGRlZCByYW5nZXMgd2l0aCByZW1vdmVfbWVtb3J5KCkuCiYjNDM7ICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmUKJiM0MzsgKiBvbmxpbmUgKC1FQlVTWSksIHNvIGl0IGlzIHNhZmUgZnJvbSB1bmJpbmQuIEZhaWx1cmVzIGxlYWsgdW50aWwgcmVib290LgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9yZW1vdmVfcmFuZ2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQogewotCWludCBpLCBzdWNjZXNzID0gMDsKLQlpbnQgbm9kZSA9IGRldl9kYXgtJmd0O3RhcmdldF9ub2RlOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7ZGV2X2RheC0mZ3Q7ZGV2OwotCXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBpLCByYyA9IDA7CiAKLQkvKgotCSAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90Ci0JICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kCi0JICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2UKLQkgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuCi0JICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0JCWludCByYzsKIAotCQlyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksICZhbXA7cmFuZ2UpOwotCQlpZiAocmMpCiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSB8fCBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKIAkJCWNvbnRpbnVlOwotCi0JCS8qIHJhbmdlIHdhcyBuZXZlciBhZGRlZCBkdXJpbmcgcHJvYmUgKi8KLQkJaWYgKCFkYXRhLSZndDtyZXNbaV0pIHsKLQkJCXN1Y2Nlc3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbigmYW1wO3JhbmdlKSkpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCXJjID0gLUVCVVNZOwogCQkJY29udGludWU7CiAJCX0KJiM0MzsJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJa2ZyZWUoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWRhdGEtJmd0O3Jlc1tpXSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KIAotCQlyYyA9IHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbigmYW1wO3JhbmdlKSk7Ci0JCWlmIChyYyA9PSAwKSB7Ci0JCQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKLQkJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7Ci0JCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwotCQkJc3VjY2VzcyYjNDM7JiM0Mzs7Ci0JCQljb250aW51ZTsKLQkJfQomIzQzO3N0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiYjNDM7ewomIzQzOwlpbnQgbm9kZSA9IGRldl9kYXgtJmd0O3RhcmdldF9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIElmIFVOUExVR0dFRDogc3RhdGUgaXMga25vd24gY2xlYW4gYW5kIHJlYm9vdCBjYW4gY2xlYW4gdXAuCiYjNDM7CSAqCiYjNDM7CSAqIElmIE9OTElORV8qOiBtZW1vcnkgY2Fubm90IGJlIHJlbW92ZWQgaGVyZTogb2ZmbGluaW5nIGR1cmluZyBhbgomIzQzOwkgKiB1bmludGVycnVwdGlibGUgdW5iaW5kIGNhbiBkZWFkbG9jay4gTGVhayB0aGUgcmVzb3VyY2VzIHVudGlsIHJlYm9vdC4KJiM0MzsJICoKJiM0MzsJICogSWYgT0ZGTElORTogYmxvY2tzIGFyZSBhdHRlbXB0ZWQgdG8gcmVtb3ZlIHdpdGggcmVtb3ZlX21lbW9yeSgpLAomIzQzOwkgKiB3aGljaCBuZXZlciBhdHRlbXB0cyBvZmZsaW5pbmcuIEEgYmxvY2sgb25saW5lZCBiZWhpbmQgb3VyIGJhY2sKJiM0MzsJICogZmFpbHMgLUVCVVNZIGFuZCBpcyBsZWFrZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtJmd0O3N0YXRlKSkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0hvdHBsdWcgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0gZWxzZSBpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gTU1PUF9PRkZMSU5FICZhbXA7JmFtcDsKJiM0MzsJCSAgIGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoZGV2X2RheCwgZGF0YSkpIHsKIAkJYW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlOwotCQlkZXZfZXJyKGRldiwKLQkJCSYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjYW5ub3QgYmUgaG90cmVtb3ZlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3RcbiYjMzQ7LAotCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiAJfQogCi0JaWYgKHN1Y2Nlc3MgJmd0Oz0gZGV2X2RheC0mZ3Q7bnJfcmFuZ2UpIHsKLQkJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7Ci0JCWtmcmVlKGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCQkvKgotCQkgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy4KLQkJICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmUKLQkJICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZQotCQkgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kCi0JCSAqIHRpbGwgbmV4dCByZWJvb3QuCi0JCSAqLwotCQljbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpOwotCX0KJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CW1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtJmd0O21naWQpOwomIzQzOwlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CiYjNDM7CWtmcmVlKGRhdGEpOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuCiYjNDM7CSAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlCiYjNDM7CSAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGUKJiM0MzsJICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZAomIzQzOwkgKiB0aWxsIG5leHQgcmVib290LgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CiAJLyoKIAkgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZQogCSAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAmIzM5OzAmIzM5OyB0byAtJmd0O3JlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jCmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L3BtZW0uYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLnBnbWFwID0gJmFtcDtwZ21hcCwKIAkJLnNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCA0NjNkYzAyZjZjZmYwNS4uMTc4MzI5OTA3M2U0NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKIAogI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgJmx0OyZsdDsgU0VDVElPTl9TSVpFX0JJVFMpCiAKQEAgLTEwMCw2ICYjNDM7MTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTsKIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTsKIAomIzQzOy8qKgomIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3MKJiM0MzsgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnbgomIzQzOyAqCiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2sKJiM0MzsgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3QKJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkCiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgJmx0OyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDsKJiM0MzsKJiM0MzsJYWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLSZndDtzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7CiYjNDM7CWFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7ZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpOwomIzQzOwkvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqLwomIzQzOwlpZiAoYWxpZ25lZC5lbmQgJmx0Oz0gYWxpZ25lZC5zdGFydCkKJiM0MzsJCWFsaWduZWQuc3RhcnQgPSBhbGlnbmVkLmVuZDsKJiM0MzsJZWxzZQomIzQzOwkJYWxpZ25lZC5lbmQgLT0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsaWduZWQ7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbW9yeV9ub3RpZnkgewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggN2M5ZDY2NzI5YzYwOTUuLmRiMTBkNTBmMzBhZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTsKIAogZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7CiAKIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi8KIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkOwpAQCAtMjY3LDYgJiM0MzsyNjgsOCBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLAomIzQzOwkJdW5zaWduZWQgaW50IG5yX3Jhbmdlcyk7CiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fQpAQCAtMjgzLDYgJiM0MzsyODYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjk0LDYgJiM0MzszMDMsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7CiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwKIAkJCSAgICAgICBtaHBfdCBtaHBfZmxhZ3MpOwomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkJY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQllbnVtIG1tb3Agb25saW5lX3R5cGUpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiAJCQkJICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLAogCQkJCSAgICAgbWhwX3QgbWhwX2ZsYWdzKTsKQEAgLTMxNiw2ICYjNDM7MzI4LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLAogZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCSAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKQogCiAJcmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7CiAKIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpCiAKIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKIHsKLQltZW0tJmd0O29ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiYjNDM7CWVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7CiYjNDM7CiYjNDM7CW1lbS0mZ3Q7b25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7CiAJcmV0dXJuIGRldmljZV9vbmxpbmUoJmFtcDttZW0tJmd0O2Rldik7CiB9CiAKQEAgLTE0OTEsNyAmIzQzOzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogICoKICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcKICAqLwotaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQkgZW51bSBtbW9wIG9ubGluZV90eXBlKQogewogCXN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07CiAJZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7CkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKIAkJbWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpOwogCiAJLyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqLwotCWlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpCi0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpCiYjNDM7CQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7b25saW5lX3R5cGUsCiYjNDM7CQkJCSAgIG9ubGluZV9tZW1vcnlfYmxvY2spOwogCiAJcmV0dXJuIHJldDsKIGVycm9yOgpAQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi8KJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLAomIzQzOwkJCQkgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovCiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAKLS8qCiYjNDM7LyoqCiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlCiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZAomIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlCiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlcwomIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsKJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFncwomIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKQomIzQzOyAqCiAgKiBBZGQgc3BlY2lhbCwgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0gYXMgc3lzdGVtIFJBTS4gU3VjaAogICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW0KICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCwKQEAgLTE2MzQsNiAmIzQzOzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKICAqCiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhCiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOgomIzQzOyAqCiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmUKICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pCiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnkKQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAgKgogICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0CiAgKiAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAotCQkJICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCWNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncywKJiM0MzsJCWVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmM7CkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAmIzM5OykmIzM5OykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlICZndDsgTU1PUF9PTkxJTkVfTU9WQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7CkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTsKJiM0MzsJcmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpOwogCWlmIChyYyAmbHQ7IDApCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKQEAgLTE2NzQsNiAmIzQzOzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAl1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAlyZXR1cm4gcmM7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsICYjMzQ7a21lbSYjMzQ7KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeQomIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWQKJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZQomIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXMKJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKSYjMzQ7CiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3MKJiM0MzsgKgomIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5CiYjNDM7ICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci4KJiM0MzsgKgomIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsCiYjNDM7CQkJbWhwX2ZsYWdzLAomIzQzOwkJCW1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTsKIAogLyoKQEAgLTIzNzksNTggJiM0MzsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKICAqLwogaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7CiYjNDM7CXN0cnVjdCByYW5nZSByYW5nZSA9IHsKJiM0MzsJCS5zdGFydCA9IHN0YXJ0LAomIzQzOwkJLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoJmFtcDtyYW5nZSwgMSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXMKJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmUKJiM0MzsgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzCiYjNDM7ICoKJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWQKJiM0MzsgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueQomIzQzOyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC4KJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXMKJiM0MzsgKiBiZWVuIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLAomIzQzOwkJdW5zaWduZWQgaW50IG5yX3JhbmdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwOwogCXVpbnQ4X3QgKm9ubGluZV90eXBlcywgKnRtcDsKLQlpbnQgcmM7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlpbnQgcmMgPSAwOwogCi0JaWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fAotCSAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSkKJiM0MzsJaWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU2NCBzdGFydCA9IHJhbmdlc1tpXS5zdGFydDsKJiM0MzsJCWNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwKJiM0MzsJCSAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCW1iX2NvdW50ICYjNDM7PSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTsKJiM0MzsJfQomIzQzOwogCS8qCi0JICogV2UmIzM5O2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhbgotCSAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHMKLQkgKiBhZnRlciBvZmZsaW5pbmcgc29tZSBvdGhlcnMgc3VjY2VlZGVkLgomIzQzOwkgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcywKJiM0MzsJICogc28gd2UgY2FuIHJldmVydCBpZiBvZmZsaW5pbmcgYSBsYXRlciBibG9jayBmYWlscy4gIEFsbCBlbnRyaWVzIHN0YXJ0CiYjNDM7CSAqIGFzIE1NT1BfT0ZGTElORSBzbyBibG9ja3Mgd2UgbmV2ZXIgdG91Y2hlZCBhcmUgc2tpcHBlZCBvbiByb2xsYmFjay4KIAkgKi8KIAlvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIW9ubGluZV90eXBlcykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JLyoKLQkgKiBJbml0aWFsaXplIGFsbCBzdGF0ZXMgdG8gTU1PUF9PRkZMSU5FLCBzbyB3aGVuIHdlIGFib3J0IHByb2Nlc3NpbmcgaW4KLQkgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UmIzM5O2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpbgotCSAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS4KLQkgKi8KIAltZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTsKIAogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAomIzQzOwkvKiBQaGFzZSAxOiBvZmZsaW5lIGV2ZXJ5IGJsb2NrIGluIGV2ZXJ5IHJhbmdlLiAqLwogCXRtcCA9IG9ubGluZV90eXBlczsKLQlyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgJmFtcDt0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7Ci0KLQkvKgotCSAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LgotCSAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS4KLQkgKi8KLQlpZiAoIXJjKSB7Ci0JCXJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pLAomIzQzOwkJCQkJJmFtcDt0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7CiAJCWlmIChyYykKLQkJCXByX2VycigmIzM0OyVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWQmIzM0OywgX19mdW5jX18sIHJjKTsKJiM0MzsJCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsCi0JICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy4KLQkgKi8KJiM0MzsJLyogSWYgYW55IGZhaWx1cmUgb2NjdXJyZWQgYXQgYWxsLCByb2xsYmFjayBhbnkgY2hhbmdlcyBhbmQgYmFpbCAqLwogCWlmIChyYykgewogCQl0bXAgPSBvbmxpbmVfdHlwZXM7Ci0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgJmFtcDt0bXAsCi0JCQkJICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LAomIzQzOwkJCQkJICAgcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKSwgJmFtcDt0bXAsCiYjNDM7CQkJCQkgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIDI6IFJlbW92ZS4gVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBob2xkaW5nIHRoZSBob3RwbHVnIGxvY2sgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQlXQVJOX09OX09OQ0UodHJ5X3JlbW92ZV9tZW1vcnkocmFuZ2VzW2ldLnN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHJhbmdlX2xlbigmYW1wO3Jhbmdlc1tpXSkpKTsKJiM0MzsKJiM0MztvdXRfdW5sb2NrOgogCXVubG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiAJa2ZyZWUob25saW5lX3R5cGVzKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjU1Mjg2ODJhM2E5MTIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZQogVEFSR0VUUyAmIzQzOz0gY3B1ZnJlcQogVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWcKIFRBUkdFVFMgJiM0Mzs9IGRhbW9uCiYjNDM7VEFSR0VUUyAmIzQzOz0gZGF4CiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3MKIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmUKIFRBUkdFVFMgJiM0Mzs9IGRtYWJ1Zi1oZWFwcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO2FsbDoKJiM0MzsKJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZwpAQCAtMCwwICYjNDM7MSw0IEBACiYjNDM7Q09ORklHX0RFVl9EQVg9bQomIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bQomIzQzO0NPTkZJR19NRU1PUllfSE9UUExVRz15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhiYmFmNjE3OGVkOWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gJiMzNDtzdGF0ZSYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZToKJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtJmd0OyAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX2tlcm5lbCB8IG9ubGluZV9tb3ZhYmxlCiYjNDM7IwomIzQzOyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLgomIzQzOyMgSWYgbm8gc3VpdGFibGUgZGV2aWNlIGlzIGZvdW5kIHRoZSB0ZXN0cyBTS0lQLgomIzQzOyMKJiM0MzsjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOgomIzQzOyMgICBtZW1tYXA9MkchNEcKJiM0MzsjCiYjNDM7IyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbToKJiM0MzsjCiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZgomIzQzOyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW0KJiM0MzsjICAgLi9kYXgta21lbS1ob3RwbHVnLnNoCiYjNDM7CiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxCiYjNDM7RElSPSYjMzQ7JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZiAmIzM0OyQwJiMzNDspJiMzNDspJiMzNDsKJiM0MzsuICYjMzQ7JERJUiYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztEQVhfQkFTRT0vc3lzL2J1cy9kYXgvZGV2aWNlcwomIzQzOwomIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH0KJiM0MztnZXRfc3RhdGUoKSB7IGNhdCAmIzM0OyRIUCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB9CiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZQomIzQzOyMgd3JpdGUmIzM5O3MgZXhpdCBzdGF0dXMgKDAgPSBhY2NlcHRlZCBieSB0aGUga2VybmVsKQomIzQzO3NldF9zdGF0ZSgpIHsgZWNobyAmIzM0OyQxJiMzNDsgJmd0OyAmIzM0OyRIUCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB9CiYjNDM7CiYjNDM7ZmluZF9rbWVtX2RheCgpIHsKJiM0MzsJbG9jYWwgZCBkcnYKJiM0MzsJZm9yIGQgaW4gJiMzNDskREFYX0JBU0UmIzM0Oy9kYXgqOyBkbwomIzQzOwkJWyAtZSAmIzM0OyRkL3N0YXRlJiMzNDsgXSB8fCBjb250aW51ZQomIzQzOwkJZHJ2PSQocmVhZGxpbmsgJiMzNDskZC9kcml2ZXImIzM0OyAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsJCVsgJiMzNDskKGJhc2VuYW1lICYjMzQ7JHtkcnY6LX0mIzM0OykmIzM0OyA9IGttZW0gXSB8fCBjb250aW51ZQomIzQzOwkJYmFzZW5hbWUgJiMzNDskZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMAomIzQzOwlkb25lCiYjNDM7CXJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRVSUQmIzM0OyAhPSAwIF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0O211c3QgYmUgcnVuIGFzIHJvb3QmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztEQVg9JChmaW5kX2ttZW1fZGF4KQomIzQzO2lmIFsgLXogJiMzNDskREFYJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7bm8ga21lbS1ib3VuZCBkYXggZGV2aWNlIHdpdGggYSBzdGF0ZSBhdHRyaWJ1dGUmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MztIUD0kREFYX0JBU0UvJERBWC9zdGF0ZQomIzQzO09SSUc9JChnZXRfc3RhdGUpCiYjNDM7CiYjNDM7IyBBIGZhaWx1cmUgdG8gcmVhY2ggdGhlIGJhc2VsaW5lIGlzIGVudmlyb25tZW50YWwgKG1lbW9yeSBpbiB1c2UpLCBub3QgYW4KJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuCiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdIHx8IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KSYjMzQ7CiYjNDM7CVsgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKQomIzQzOwomIzQzO0RSVj0vc3lzL2J1cy9kYXgvZHJpdmVycy9rbWVtCiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2NrcwomIzQzOwomIzQzO2t0YXBfcHJpbnRfbXNnICYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKSYjMzQ7CiYjNDM7a3RhcF9zZXRfcGxhbiA4CiYjNDM7CiYjNDM7IyBBIHB1YmxpYyAoTl9NRU1PUlkpIGttZW0gbm9kZSBvbmxpbmVkIGludG8gYSBrZXJuZWwgem9uZSAob25saW5lL29ubGluZV9rZXJuZWwpCiYjNDM7IyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZAomIzQzOyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlcgomIzQzOyMgc3VjY2Vzc2Z1bGx5IG9ubGluZXMgb25saW5lX21vdmFibGUsIHRoZSBvbmUgbW9kZSB0aGF0IGlzIHJlbGlhYmx5IHVucGx1Z2dhYmxlLgomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD8KJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdF9vbmxpbmUmIzM0OyAtZ3QgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O29ubGluZV9tb3ZhYmxlOiBzdGF0ZT1vbmxpbmVfbW92YWJsZSwgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lIGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX21vdmFibGUgaWRlbXBvdGVudCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyBBIGRpZmZlcmVudCBvbmxpbmUgdHlwZSBpcyByZWplY3RlZCB3aXRob3V0IGFuIGludGVydmVuaW5nIHVucGx1Zy4gIFRoZSB3cml0ZQomIzQzOyMgaXMgcmVmdXNlZCBiZWZvcmUgYW55IGhvdHBsdWcsIHNvIHRoaXMgbmV2ZXIgYWN0dWFsbHkgb25saW5lcyBhIGtlcm5lbCB6b25lLgomIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyAhPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7cmVqZWN0IG9ubGluZV9rZXJuZWwgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWcgKG5vIGtlcm5lbC16b25lIG9ubGluZSkmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmVfbW92YWJsZS0mZ3Q7b25saW5lX2tlcm5lbCBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MzttdD0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IHVucGx1Z2dlZCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1sdCAmIzM0OyRtdF9vbmxpbmUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLSZndDsgJG10IGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtJmd0OyAkbXQmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKQomIzQzO3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gJiMzNDskYmVmb3JlJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O3JlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgVGhlIG9ubGluZV9tb3ZhYmxlIC0mZ3Q7IHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvCiYjNDM7IyByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyBhIGxhdGVyIHVucGx1ZyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlCiYjNDM7IyBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGVhY2ggaXRlcmF0aW9uIHJlYWxseSBhZGRzIGFuZCBmcmVlcyBtZW1vcnkuCiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZAomIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wOyBvbj0wOyBvZmY9MAomIzQzO2ZvciBpIGluIDEgMiAzOyBkbwomIzQzOwlpZiAhIHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaQomIzQzOwlvbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmkKJiM0MzsJb2ZmPSQobWVtdG90YWxfa2IpCiYjNDM7CWlmIFsgJiMzNDskb24mIzM0OyAtbGUgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXSB8fCBbICYjMzQ7JG9mZiYjMzQ7IC1nZSAmIzM0OyRvbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7aWYgWyAmIzM0OyRjeWNsZV9vayYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvdwomIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQKJiM0MztpZiBbIC13ICYjMzQ7JEFPQiYjMzQ7IF0gJmFtcDsmYW1wOyBbIC13ICYjMzQ7JERSVi91bmJpbmQmIzM0OyBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJb3JpZ19hb2I9JChjYXQgJiMzNDskQU9CJiMzNDspCiYjNDM7CWVjaG8gJiMzNDskREFYJiMzNDsgJmd0OyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBvZmZsaW5lICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi9iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJc2xlZXAgMQomIzQzOwlzdD0kKGdldF9zdGF0ZSkKJiM0MzsJZWNobyAmIzM0OyRvcmlnX2FvYiYjMzQ7ICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwJCSMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5CiYjNDM7CWlmIFsgJiMzNDskc3QmIzM0OyA9IG9mZmxpbmUgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC0mZ3Q7IHN0YXRlPW9mZmxpbmUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O2JpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSkmIzM0OwomIzQzOwlmaQomIzQzOwlzZXRfc3RhdGUgdW5wbHVnZ2VkIDImZ3Q7L2Rldi9udWxsCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO1sgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlcwomIzQzOyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXQKJiM0MzsjIHdpdGggYSBzaW5nbGUgJiMzNDtzdHVjayBvbmxpbmUmIzM0OyB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlCiYjNDM7IyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsCiYjNDM7IyBsZWF2aW5nIHRoZSByZXN0b3JlZCBzdGF0ZSBhYm92ZSB1bnRvdWNoZWQgb3RoZXJ3aXNlLiAgb25saW5lX21vdmFibGUgb25seToKJiM0MzsjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLgomIzQzO2lmIFsgLXcgJiMzNDskRFJWL3VuYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZV9tb3ZhYmxlCiYjNDM7ZmkKJiM0MztpZiBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgXTsgdGhlbgomIzQzOwltdF9vbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlkbWVzZyAtQyAyJmd0Oy9kZXYvbnVsbAomIzQzOwllY2hvICYjMzQ7JERBWCYjMzQ7ICZndDsgJiMzNDskRFJWL3VuYmluZCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CW10X2FmdGVyPSQobWVtdG90YWxfa2IpCiYjNDM7CSMgVGhlIGxlYWtlZCAmIzM0O1N5c3RlbSBSQU0gKGttZW0pJiMzNDsgcmVnaW9ucyBzdGF5IGluIHRoZSBpb21lbSB0cmVlOyByZWFkaW5nCiYjNDM7CSMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLgomIzQzOwkjIFdhbGsgL3Byb2MvaW9tZW0gdG8gcHJvdm9rZSB0aGF0IHVzZS1hZnRlci1mcmVlIChjYXVnaHQgYnkgS0FTQU4pLgomIzQzOwljYXQgL3Byb2MvaW9tZW0gJmd0OyAvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc3BsYXQ9JChkbWVzZyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLWNpRSAmIzM0O0tBU0FOfEJVRzp8dXNlLWFmdGVyLWZyZWV8Z2VuZXJhbCBwcm90ZWN0aW9ufE9vcHN8cmVmY291bnRfdCYjMzQ7KQomIzQzOwlpZiBbICYjMzQ7JHNwbGF0JiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10X2FmdGVyJiMzNDsgLWdlICYjMzQ7JG10X29uJiMzNDsgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDt1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLSZndDsgJG10X2FmdGVyIGtCKSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLSZndDsgJG10X2FmdGVyIGtCJiMzNDsKJiM0MzsJZmkKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7Y291bGQgbm90IG9ubGluZSBkZXZpY2UgZm9yIHVuYmluZC13aGlsZS1vbmxpbmUgdGVzdCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7dGltZW91dD05MAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIb3RwbHVnIFBhdGNoIGZvciBEQVggS21lbSBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIG1lbW9yeSBob3RwbHVnIGFuZCBEQVgga21lbSBkcml2ZXJzLiBUaGUgbWVhdCBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZWAsIGZvciBEQVgga21lbSBkZXZpY2VzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBvZnRlbiBlbnRyeSBwb2ludHMgZm9yIHN5emthbGxlci4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYGRyaXZlcnMvZGF4L2ttZW0uY2AgdG8gaGFuZGxlIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBzZWUgaXQgYWxzbyBhZGRzIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgdG8gYG1tL21lbW9yeV9ob3RwbHVnLmNgIGFuZCB0d2Vha3MgYGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIHRvIGFjY2VwdCBgb25saW5lX3R5cGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6ICpJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQ2FuIHN5emthbGxlciByZWFjaCBpdD8qCgpNeSBmaXJzdCBzdGVwIGlzIGZpZ3VyaW5nIG91dCBob3cgc3l6a2FsbGVyIGNhbiBhY2Nlc3MgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhlIHN5c2ZzIGF0dHJpYnV0ZSwgYHN0YXRlYC4gU3l6a2FsbGVyIG5lZWRzIHRvIGtub3cgdGhlIHBhdGg6IGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgLiAgVGhlIGNvcmUgZHJpdmVyLCBhY2NvcmRpbmcgdG8gdGhlIHBhdGNoLCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBTbyB0aGUgcXVlc3Rpb24gaXMsICpkb2VzIHN5emthbGxlciBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBlbmFibGVkIHRvIGV2ZW4gKnNlZSogdGhpcz8qCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIGFyZSBhbGwgZW5hYmxlZCBpbiBzeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgc3lzZnMgYXR0cmlidXRlLiBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCAtIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHZhbHVlLCByZXNwZWN0aXZlbHkuIEFsc28sIEkmIzM5O2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGFuZCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBzaW5jZSB0aG9zZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBob3RwbHVnL2hvdHJlbW92ZSBsb2dpYyB3aWxsIGJlIGhhcHBlbmluZy4gSSBrbm93IHRoZSBwYXRjaCB3aWxsIGJlIG1ha2luZyBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGRyaXZlciBjb2RlLgoKT2theSwgSSYjMzk7bGwgZGlnIGludG8gYGRyaXZlcnMvZGF4L2ttZW0uY2AgYW5kIHN0YXJ0IHdpdGggYHN0YXRlX3N0b3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDMtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzQ0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQ1LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBkcml2ZXJzL2RheC9rbWVtLmNgIGZpbGUsIGZyb20gYSBrZXJuZWwgZHJpdmVyIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBkcml2ZXJzL2RheC9rbWVtLmMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgd2l0aGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBNeSBmb2N1cyBpcyBwaW5wb2ludGluZyBhbnkgYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvcmUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUsIGFzIHRoZXNlIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSBjb2RlIHRoYXQgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gcGVyc2lzdGVudCBtZW1vcnkgb3Igb3RoZXIgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZlYXR1cmVzLCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGFsZ29yaXRobXMsIG9yIGV2ZW4gb3B0aW1pemF0aW9ucyBtYWRlIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5IHdpdGhpbiB0aGUgREFYIHN1YnN5c3RlbS4gSSYjMzk7bGwgYmUgY2hlY2tpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IG1ldGhvZHMsIGVzcGVjaWFsbHkgdGhvc2UgY29uY2VybmluZyBkaXJlY3QgYWNjZXNzIHRvIG1lbW9yeS4gSSB3aWxsIHdhdGNoIG91dCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgb3Igb3RoZXIgbWVtb3J5LW1hcHBpbmcgYXNwZWN0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlciByZXNpZGVzLCBhbmQgdGhlIGNoYW5nZXMgaGVyZSB3aWxsIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIERBWCBsYXllciBpcyBldm9sdmluZyB0byB1dGlsaXplIHBlcnNpc3RlbnQgbWVtb3J5IGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKmRheF9rbWVtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9Mjk9c3RhdGljIGJvb2wgYW55X2hvdHJlbW92ZV9mYWlsZWQ7XG5kcml2ZXJzL2RheC9rbWVtLmMtMzAtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzE6c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMi17XG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTY2PXN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy03Mi0vKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzo3MzpzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuZHJpdmVycy9kYXgva21lbS5jLTc0LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTkyLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTY2LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjE2NzpzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTE2OC1cdFx0XHRcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yMjMtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6MjI0OnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTIyNS1cdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjcxLSNlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6MjcyOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTI3My1cdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjg1LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjI4NjpzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yODctXHRcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTMxMS1cbmRyaXZlcnMvZGF4L2ttZW0uYzozMTI6c3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXG5kcml2ZXJzL2RheC9rbWVtLmMtMzEzLXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9Mzg5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7XG5kcml2ZXJzL2RheC9rbWVtLmMtMzkwLVxuZHJpdmVycy9kYXgva21lbS5jOjM5MTpzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbmRyaXZlcnMvZGF4L2ttZW0uYy0zOTIte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01MDgtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6NTA5OnN0YXRpYyBpbnQgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTAtXHRcdFx0XHQgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01MzItXG5kcml2ZXJzL2RheC9rbWVtLmM6NTMzOnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG5kcml2ZXJzL2RheC9rbWVtLmMtNTM0LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc1LSNlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6NTc2OnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc3LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTkyLVxuZHJpdmVycy9kYXgva21lbS5jOjU5MzpzdGF0aWMgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyIGRldmljZV9kYXhfa21lbV9kcml2ZXIgPSB7XG5kcml2ZXJzL2RheC9rbWVtLmMtNTk0LVx0LnByb2JlID0gZGV2X2RheF9rbWVtX3Byb2JlLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01OTgtXG5kcml2ZXJzL2RheC9rbWVtLmM6NTk5OnN0YXRpYyBpbnQgX19pbml0IGRheF9rbWVtX2luaXQodm9pZClcbmRyaXZlcnMvZGF4L2ttZW0uYy02MDAte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy02MTktXG5kcml2ZXJzL2RheC9rbWVtLmM6NjIwOnN0YXRpYyB2b2lkIF9fZXhpdCBkYXhfa21lbV9leGl0KHZvaWQpXG5kcml2ZXJzL2RheC9rbWVtLmMtNjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTWVtb3J5IEhvdHBsdWcgYW5kIERBWCBrbWVtIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIHNvbWUgbmV3IGZlYXR1cmVzIHRvIHRoZSBrZXJuZWw7IG1haW5seSBmb2N1c2VkIGFyb3VuZCBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIERBWCBrbWVtIGRyaXZlci4gSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgYWRkaW5nIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIGFuZCwgb2YgY291cnNlLCB0aGUgY3JpdGljYWwgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIGxvZ2ljLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcy4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBhbmQgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGludGVyYWN0IHdpdGggYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBjZW50cmFsIGhvdHBsdWcgZnVuY3Rpb24sIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBpcyBjcnVjaWFsIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmFuZ2VzIGFyZSBhY3R1YWxseSBvZmZsaW5lJiMzOTtkIGFuZCByZW1vdmVkLCBmb3Igd2hpY2ggdGhlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9MjQzMD1pbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzNi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQzNzpcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzgtfVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDM5PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ0MS0vKipcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ0MjogKiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyAtIG9mZmxpbmUgYW5kIHJlbW92ZSBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NDMtICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU3LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDU4OmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ1OS1cdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjEtfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTIyOkVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyMy0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgdGhlIGR5bmFtaWMgYWRkaXRpb24gb2YgbWVtb3J5LiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGhpbnRzIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIG1lbW9yeSBob3RwbHVnLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIGRyaXZlcnMgYW5kLCBpbXBvcnRhbnRseSwgYSBtYW5hZ2VkIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gb3JjaGVzdHJhdGVzIHRoZSBhZGRpdGlvbiBmcm9tIGEgaGlnaC1sZXZlbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBsb2NrcyBpbnZvbHZlZC4gV2Ugd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIHRoZSBkZXZpY2UgZHJpdmVycyB0aGF0IHBhcnRpY2lwYXRlIGluIHRoZSBtZW1vcnkgaG90cGx1ZyBwcm9jZXNzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGhhbmRsaW5nIG1lY2hhbmlzbXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIG5ldyBtZW1vcnkgcmVnaW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MgbWFwLCBwYWdlIHRhYmxlcyBhcmUgdXBkYXRlZCAob3IgY3JlYXRlZCBpZiBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgbmV3IG5vZGUpLCBhbmQgYW55IG5lY2Vzc2FyeSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb3Igbm90aWZpY2F0aW9uIGlzIHBlcmZvcm1lZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xNjM4PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0MC0vKipcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0MTogKiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggZXhwbGljaXQgb25saW5lX3R5cGVcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi0gKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjcxLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjcyOmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3My1cdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcwMi19XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDM6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFwmIzM0O2ttZW1cJiMzNDspO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNS0gKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzE2OiAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNy0gKlxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTcyMD1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyMi17XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MjM6XHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjQtXHRcdFx0bWhwX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgREFYIGttZW0gYW5kIE1lbW9yeSBIb3RwbHVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc29tZSBmYWlybHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZ2V0dGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIGNydWNpYWxseSwgdGhlIGhvdHBsdWcvaG90cmVtb3ZlIGxvZ2ljIGZvciBEQVgga21lbSBkZXZpY2VzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGdyYWIgbXkgYXR0ZW50aW9uIGFyZSBgc3RhdGVfc3RvcmVgLCBgc3RhdGVfc2hvd2AsIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBhcyB3ZWxsIGFzIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGV5IGFwcGVhciB0byBiZSB0aGUgY29yZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxhY2UuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVl9EQVhfS01FTWAsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCBhcmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5LiBPYnZpb3VzbHksIGBDT05GSUdfREVWX0RBWF9LTUVNYCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgc28gdGhhdCYjMzk7cyBhIGdpdmVuLiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSByZXF1aXJlZCwganVkZ2luZyBieSB0aGUgcHJlc2VuY2Ugb2YgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIGZvciBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBvYnZpb3VzbHkuIFdlIHdpbGwgbmVlZCBgQ09ORklHX0RFVl9EQVhgIGFzIHdlbGwuCgpJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZGF4L0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGUgZXhhY3QgbmFtZXMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWX0RBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo4OmNvbmZpZyBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0xOC1cbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cbmRyaXZlcnMvZGF4L0tjb25maWc6MzA6Y29uZmlnIERFVl9EQVhfSE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0hNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvICYjMzk7c3BlY2lmaWMgcHVycG9zZSYjMzk7IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNDktXG5kcml2ZXJzL2RheC9LY29uZmlnOjUwOmNvbmZpZyBERVZfREFYX0NYTFxuZHJpdmVycy9kYXgvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O0NYTCBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gQ1hMIFJBTSByZWdpb25zXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy02My1cbmRyaXZlcnMvZGF4L0tjb25maWc6NjQ6Y29uZmlnIERFVl9EQVhfSE1FTV9ERVZJQ0VTXG5kcml2ZXJzL2RheC9LY29uZmlnLTY1LVx0ZGVwZW5kcyBvbiBERVZfREFYX0hNRU0gXHUwMDI2XHUwMDI2IERBWFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNjctXG5kcml2ZXJzL2RheC9LY29uZmlnOjY4OmNvbmZpZyBERVZfREFYX0ZTREVWXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxuZHJpdmVycy9kYXgvS2NvbmZpZzo3Mzpjb25maWcgREVWX0RBWF9LTUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTc0LVx0dHJpc3RhdGUgXCYjMzQ7S01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBSaWdodCBub3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgZnVuY3Rpb25hbGl0aWVzIGFyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3aWxsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9LY29uZmlnYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IEhvdHJlbW92ZSAtIENvbnNpZGVyYXRpb25zIGFuZCBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYE1FTU9SWV9IT1RSRU1PVkVgLiBIbW0sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHZhcmlvdXMgaW1wbGljYXRpb25zLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhpcyBwcm9wZXJseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIG1vZGVybiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29yZSBpc3N1ZSBpcywgb2YgY291cnNlLCB0aGUgcmVtb3ZhbCBvZiBtZW1vcnkgZnJvbSBhIHJ1bm5pbmcgc3lzdGVtLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlIGRlYWxsb2NhdGlvbjsgaXQmIzM5O3MgYSBkeW5hbWljIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUgcmVzb3VyY2UgYXZhaWxhYmxlLgoKRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIHdlJiMzOTtyZSBhdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBhIGJhcmUtbWV0YWwgc2V0dXAsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIGNvbnRleHQsIHJpZ2h0PyBUaGUgdmlydHVhbGl6YXRpb24gbGF5ZXIgYWRkcyBhbm90aGVyIGxheWVyIG9mIGluZGlyZWN0aW9uLCBhbmQgaXRzIGltcGxpY2F0aW9ucyBvbiBob3QtcmVtb3ZlIGJlaGF2aW91ciBjYW4gYmUgbm9uLXRyaXZpYWwsIGVzcGVjaWFsbHkgd2l0aCB0ZWNobmlxdWVzIGxpa2UgYmFsbG9vbmluZywgb3IgbWVtb3J5IG92ZXJjb21taXRtZW50LiBXaGF0IGFyZSB0aGUgaHlwZXJ2aXNvcuKAmXMgZ3VhcmFudGVlcyBhcm91bmQgdHJhbnNwYXJlbnQgbWVtb3J5IHJlbW92YWwsIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbj8KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHF1ZXN0aW9uIG9mIHRoZSBPUyBpdHNlbGYuIEhvdyB3ZWxsIGRvZXMgdGhlIGtlcm5lbCBoYW5kbGUgdGhlIGhvdC1yZW1vdmUgZXZlbnQ/IERvZXMgaXQgcHJvcGVybHkgdHJhY2sgYW5kIGZyZWUgcGFnZXMsIGFuZCBkb2VzIGl0IGRvIHNvIGluIGEgY29uc2lzdGVudCBhbmQgc2FmZSBtYW5uZXI/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBwYWdlIHRhYmxlIG1hcHBpbmdzLCBhbmQgYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24uIFdlJiMzOTtyZSBhc3N1bWluZyB0aGUga2VybmVsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCB0aGlzLCBidXQgY29uZmlndXJhdGlvbiBjYW4gdmFyeSB3aWRlbHkuIElmIHdlIGFyZSBpbiBhIHN5c3RlbSB3aXRoIG1hbnkgTlVNQSBub2Rlcywgd2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3QgdG8gdGhlIGxvY2FsaXR5IG9mIG1lbW9yeSBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGFwcGxpY2F0aW9ucyBydW5uaW5nLiBIb3cgYXJlIHRoZXkgaW5mb3JtZWQgKGlmIGF0IGFsbCkgb2YgdGhlIHNocmlua2luZyBtZW1vcnkgc3BhY2U/IElmIHdlJiMzOTtyZSByZW1vdmluZyBtZW1vcnkgdGhhdCYjMzk7cyBhY3RpdmVseSBpbiB1c2UsIG9yIGNvbnRhaW5pbmcgZGF0YSwgdGhlbiB3ZSYjMzk7cmUgaW4gdHJvdWJsZS4gSG93IGRvIHdlIGVuc3VyZSBhcHBsaWNhdGlvbnMgYXJlbiYjMzk7dCBhY2Nlc3Npbmcgb3IgZXhwZWN0aW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFib3V0IHRvIGJlIHVubWFwcGVkPyBBcmUgdGhleSB1dGlsaXppbmcgc2hhcmVkIG1lbW9yeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgaGFuZGxlIGl0PyBXaGF0IGFib3V0IG1lbW9yeS1tYXBwZWQgZmlsZXMgYW5kIGNhY2hlcz8gRGF0YSBsb3NzIGlzIHRoZSB1bHRpbWF0ZSBjb25jZXJuLiBUaGluayBvZiB0aGUgdHJhbnNhY3Rpb25hbCBhcHBsaWNhdGlvbnMsIGZvciBleGFtcGxlLiBXZSBuZWVkIGF0b21pY2l0eSBoZXJlLgoKVGhpbmtpbmcgb2YgdGhpcywgd2hhdCBhcmUgdGhlIGJlc3QgcHJhY3RpY2VzIGZvciBndWFyYW50ZWVpbmcgYSBzYWZlIG1lbW9yeSBob3QtcmVtb3ZlPyBXaGF0IGFyZSB0aGUgbWVjaGFuaXNtcyBhdmFpbGFibGU/IERvIHdlIG5lZWQgdG8gaW50cm9kdWNlIGV4cGxpY2l0IG1lbW9yeSBkcmFpbmluZyBwcm9jZWR1cmVzPyBXaGF04oCZcyB0aGUgaW1wbGljYXRpb24gZm9yIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBhYm91dCBpdHMgcGVyZm9ybWFuY2U/IElzIHRoZXJlIGEgcGVyZm9ybWFuY2UgaGl0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaG90LXJlbW92ZSBwcm9jZWR1cmUgaXRzZWxmPyBIb3cgYXJlIHdlIGFjY291bnRpbmcgZm9yIGxvY2sgY29udGVudGlvbj8KCkFuZCBmaW5hbGx5LCBkaWFnbm9zdGljcy4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoZSBob3QtcmVtb3ZlIHByb2Nlc3Mg4oCTIGEga2VybmVsIHBhbmljLCBhIGNvcnJ1cHRlZCBhcHBsaWNhdGlvbiwgb3Igc29tZSBvdGhlciB1bmV4cGVjdGVkIGZhaWx1cmUg4oCTIGhvdyBkbyB3ZSBkZWJ1ZyBpdD8gV2hhdCBraW5kIG9mIGxvZ2dpbmcgYW5kIHRyYWNpbmcgaXMgYXZhaWxhYmxlPyBXaGF0IHRvb2xzIGFyZSB3ZSBnb2luZyB0byB1c2UgdG8gZXhhbWluZSB0aGlzIGJlaGF2aW9yPwoKU28sIHllYWguLi4gYE1FTU9SWV9IT1RSRU1PVkVgLiBJdCYjMzk7cyBub3QgYSBzaW1wbGUgc3dpdGNoOyBpdOKAmXMgYSB3aG9sZSBlY29zeXN0ZW0gb2YgaW1wbGljYXRpb25zLiBXZSBuZWVkIGEgcmlnb3JvdXMgYW5kIHN5c3RlbWF0aWMgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODk9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU5MC1cbm1tL0tjb25maWc6NTkxOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU5Mi1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzY2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFRhcmdldHMqKgoKT2theSwgeWVzLCBJIHNlZSB0aGUgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcy4gRnJvbSB0aGUgbG9vayBvZiBpdCwgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW46IGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLgoKQWhhLCB3YWl0IGEgbWludXRlLiBJIHJlbWVtYmVyIHRoYXQgYHN0YXRlX3N0b3JlYCBhbmQgYHN0YXRlX3Nob3dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGxvY2F0ZWQgd2l0aGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBTbyB0aGF0JiMzOTtzIHRoZSBzY29wZSBoZXJlLiBTbyBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYW5kIGp1c3Qgd29yayB3aXRoIHRob3NlIHNwZWNpZmljIGluc3RhbmNlcyBpbiB0aGUgZGF4IGttZW0gZHJpdmVyOiBgc3RhdGVfc3RvcmVgLCBgc3RhdGVfc2hvd2AsIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4KCkhvd2V2ZXIsIGJlZm9yZSB3ZSBwcm9jZWVkIHRvbyBmYXIsIHRob3NlIG5hbWVzIGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCBhcmUgcXVpdGUgZ2VuZXJpYy4gU3l6a2FsbGVyIGNvdWxkIGVhc2lseSBwaWNrIHVwIG9uIHNpbWlsYXIgbmFtZXMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHVuaXF1ZSBpbiB0aGUgY29kZSBiYXNlLiBXZSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmM9NDI9c3RhdGljIHNzaXplX3QgZWVoX3BlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTUtXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jOjU2OnN0YXRpYyBzc2l6ZV90IGVlaF9wZV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jLTU3LVx0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jPTI2Mz1zdGF0aWMgaW50IGFnZW50X3RocmVhZF9mbih2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMtMjc1LVx0XHQgKiB0byBhdm9pZCBtaXhpbmcgdGhlIHR3byB3aXRoIHN1Y2ggYSBjb25maWd1cmF0aW9uIChvclxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYzoyNzY6XHRcdCAqIGVsc2UgZml4IGl0IGJ5IGFkZGluZyBhIG11dGV4IHRvIHN0YXRlX3N0b3JlIHRoYXQgd2UgY2FuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jLTI3Ny1cdFx0ICogc3luY2hyb25pemUgd2l0aCkuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTM5ND1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQwMy1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDUtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDEzPXN0YXRpYyBzc2l6ZV90IGNwdWlkbGVfc3RhdGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYy00MjYtXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0Mjc6c3RhdGljIHNzaXplX3QgY3B1aWRsZV9zdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQyOC1cdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4tLVxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3RhdGVfc3lzZnNfb3BzID0ge1xuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDQ2LVx0LnNob3cgPSBjcHVpZGxlX3N0YXRlX3Nob3csXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0NDc6XHQuc3RvcmUgPSBjcHVpZGxlX3N0YXRlX3N0b3JlLFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDQ4LX07XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM9MTk9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMwLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMyLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zMjc9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM0My1cbmRyaXZlcnMvZGF4L2ttZW0uYzozNDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYz0yMjE5PXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYXB0dXJlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0MS1cdC8qIFB1Ymxpc2ggdGhlIGVycm9yIHN0YXRlLCBhbmQgYW5ub3VuY2UgaXQgdG8gdGhlIHdvcmxkICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jOjIyNDI6XHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGNhcC1cdTAwM2VlcnJvcik7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jLTIyNDMtXHRpOTE1X2dwdV9jb3JlZHVtcF9wdXQoY2FwLVx1MDAzZWVycm9yKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyMTQ9aTkxNV9ncHVfY29yZWR1bXAoc3RydWN0IGludGVsX2d0ICpndCwgaW50ZWxfZW5naW5lX21hc2tfdCBlbmdpbmVfbWFzaywgdTMyIGR1bXBfZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjI4LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYzoyMjI5OnZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgaTkxNV9ncHVfY29yZWR1bXAgKmVycm9yKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjMwLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyNjA9dm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGludGVsX2d0ICpndCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jLTIyNzAtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jOjIyNzE6XHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGVycm9yKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjI3Mi1cdGk5MTVfZ3B1X2NvcmVkdW1wX3B1dChlcnJvcik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaD0zMDM9dm9pZCBpOTE1X3ZtYV9jYXB0dXJlX2ZpbmlzaChzdHJ1Y3QgaW50ZWxfZ3RfY29yZWR1bXAgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmgtMzA1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaDozMDY6dm9pZCBpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zMDctXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaD0zOTE9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjM5MjppOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oLTM5My17XG4tLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDAtXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00Mi1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxuLS1cbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYz01MTM9c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ncmV5YnVzL2ludGVyZmFjZS5jLTUyMy1cbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYzo1MjQ6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ncmV5YnVzL2ludGVyZmFjZS5jLTUyNS1cdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBvd2VyX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ1LVxuZHJpdmVycy9od21vbi9lbWMxNDAzLmM6NDY6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ3LVx0XHRcdFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYz05Mzc9c3RhdGljIHNzaXplX3Qgc2VxX2N1cnJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2MS1cbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYzo5NjI6c3RhdGljIHNzaXplX3Qgc2VxX2N1cnJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2My1cdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM9MTQxND1zdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG00eC1zeXNmcy5jLTE0MjUtXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM6MTQyNjpzdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG00eC1zeXNmcy5jLTE0MjctXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jPTM1OT1zdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jLTM2OS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jOjM3MDpzdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jLTM3MS1cdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jPTI3Mj1zdGF0aWMgZW51bSBpaW9fZXZlbnRfaW5mbyBpaW9fZXZfYXR0cl9pbmZvKHN0cnVjdCBpaW9fZGV2X2F0dHIgKmF0dHIpXG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtMjc2LVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM6Mjc3OnN0YXRpYyBzc2l6ZV90IGlpb19ldl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYy0yNzgtXHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jPTM4NT1zdGF0aWMgaW50IGlpb19kZXZpY2VfYWRkX2V2ZW50KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsXG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtNDE2LVx0XHRcdHNob3cgPSBpaW9fZXZfc3RhdGVfc2hvdztcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jOjQxNzpcdFx0XHRzdG9yZSA9IGlpb19ldl9zdGF0ZV9zdG9yZTtcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxOC1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jPTExOT1zdGF0aWMgc3NpemVfdCB0cmFuc2llbnRfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMjktXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jOjEzMDpzdGF0aWMgc3NpemVfdCB0cmFuc2llbnRfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMzEtXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM9MTUxPXN0YXRpYyBERVZJQ0VfQVRUUihkdXJhdGlvbiwgMDY0NCwgdHJhbnNpZW50X2R1cmF0aW9uX3Nob3csXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTE1Mi1cdFx0ICAgdHJhbnNpZW50X2R1cmF0aW9uX3N0b3JlKTtcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM6MTUzOnN0YXRpYyBERVZJQ0VfQVRUUihzdGF0ZSwgMDY0NCwgdHJhbnNpZW50X3N0YXRlX3Nob3csIHRyYW5zaWVudF9zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTE1NC1cbi0tXG5kcml2ZXJzL21kL21kLmM9MzA3OT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9tZC9tZC5jOjMwODA6c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zMDgxLXtcbi0tXG5kcml2ZXJzL21kL21kLmM9MzI0OD1zdGF0aWMgc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgcmRldl9zdGF0ZSA9XG5kcml2ZXJzL21kL21kLmM6MzI0OTpfX0FUVFJfUFJFQUxMT0Moc3RhdGUsIFNfSVJVR098U19JV1VTUiwgc3RhdGVfc2hvdywgc3RhdGVfc3RvcmUpO1xuZHJpdmVycy9tZC9tZC5jLTMyNTAtXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM3MzU9cmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbWQvbWQuYy0zNzUxLVxuZHJpdmVycy9tZC9tZC5jOjM3NTI6XHRpZiAoZW50cnktXHUwMDNlc3RvcmUgPT0gc3RhdGVfc3RvcmUpIHtcbmRyaXZlcnMvbWQvbWQuYy0zNzUzLVx0XHRpZiAoY21kX21hdGNoKHBhZ2UsIFwmIzM0O3JlbW92ZVwmIzM0OykpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTQ2NDc9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvbWQvbWQuYzo0NjQ4OmFycmF5X3N0YXRlX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy00NjQ5LXtcbi0tXG5kcml2ZXJzL21kL21kLmM9NDc3OD1zdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2FycmF5X3N0YXRlID1cbmRyaXZlcnMvbWQvbWQuYzo0Nzc5Ol9fQVRUUl9QUkVBTExPQyhhcnJheV9zdGF0ZSwgU19JUlVHT3xTX0lXVVNSLCBhcnJheV9zdGF0ZV9zaG93LCBhcnJheV9zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL21kL21kLmMtNDc4MC1cbi0tXG5kcml2ZXJzL21kL21kLmM9NjExMz1tZF9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MTI1LVxuZHJpdmVycy9tZC9tZC5jOjYxMjY6XHRpZiAoZW50cnktXHUwMDNlc3RvcmUgPT0gYXJyYXlfc3RhdGVfc3RvcmUgXHUwMDI2XHUwMDI2IGNtZF9tYXRjaChwYWdlLCBcJiMzNDtjbGVhclwmIzM0OykpXG5kcml2ZXJzL21kL21kLmMtNjEyNy1cdFx0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihrb2JqLCBhdHRyKTtcbi0tXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM9NTY4PXN0YXRpYyBpcnFyZXR1cm5fdCBiaDE3NzBfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYyOC1cbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzo2Mjk6c3RhdGljIHNzaXplX3QgYmgxNzcwX3Bvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYy02MzAtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM9MTEzNj1zdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBiaDE3NzBfcG93ZXJfc3RhdGVfc2hvdyxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzoxMTM3Olx0XHRcdFx0XHRcdCBiaDE3NzBfcG93ZXJfc3RhdGVfc3RvcmUpO1xuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTExMzgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmM9MTU9c3RhdGljIHNzaXplX3QgYnRfY29leF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvc3lzZnMuYy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jOjMwOnN0YXRpYyBzc2l6ZV90IGJ0X2NvZXhfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmMtMzEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM9MTg4MT1zdGF0aWMgc3NpemVfdCBudm1ldF9hbmFfZ3JvdXBfYW5hX3N0YXRlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk1LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjE4OTY6c3RhdGljIHNzaXplX3QgbnZtZXRfYW5hX2dyb3VwX2FuYV9zdGF0ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTg5Ny1cdFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA0Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNTUtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNTY6c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA1Ny1cdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jPTExMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2JkX3JnYl9tb2RlX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMtMTExNy0vKiBUVUYgTGFwdG9wIEtleWJvYXJkIFJHQiBTdGF0ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYzoxMTE4OnN0YXRpYyBzc2l6ZV90IGtiZF9yZ2Jfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYy0xMTE5LVx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS1iYXNlLmM9Mjk1PXN0YXRpYyBzc2l6ZV90IGxpZ2h0aW5nX2NvbnRyb2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMDgtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktYmFzZS5jOjMwOTpzdGF0aWMgc3NpemVfdCBsaWdodGluZ19jb250cm9sX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS1iYXNlLmMtMzEwLVx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jPTU1OT1zdGF0aWMgc3NpemVfdCBmbl9sb2NrX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2h1YXdlaS13bWkuYy01NzEtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9odWF3ZWktd21pLmM6NTcyOnN0YXRpYyBzc2l6ZV90IGZuX2xvY2tfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jLTU3My1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xMzczPXN0YXRpYyBzc2l6ZV90IHdsc3dfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTM3Ny1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTM3ODpzdGF0aWMgc3NpemVfdCB3bHN3X2VtdWxzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzktXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTM5Nj1zdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQwMC1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTQwMTpzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTE0MDItXHRcdFx0XHRcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jPTE0MTY9c3RhdGljIHNzaXplX3Qgd3dhbl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDIwLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDIxOnN0YXRpYyBzc2l6ZV90IHd3YW5fZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMi1cdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xNDM2PXN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDQwLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDQxOnN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDQyLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jPTQyPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTUyLVxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmM6NTM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTU0LVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM9MTc4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE4OC0vKiBDaGFuZ2UgcmVtb3RlIHByb2Nlc3NvciBzdGF0ZSB2aWEgc3lzZnMgKi9cbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM6MTg5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmMtMTkwLVx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTE4MDQ9c3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODI0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MTgyNTpzdGF0aWMgc3NpemVfdCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTE4MjYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODQ3PXN0YXRpYyBERVZJQ0VfQVRUUihsYXN0X2tub3duX3Jlc2VydmF0aW9uX3N0YXRlLCAwNjQ0LFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MTg0ODpcdFx0ICAgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93LCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTE4NDktXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTMzMD1scGZjX29hc19zdXBwb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNDEtLyoqXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzoxMzQyOiAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnRcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNDMtICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTM1Mz1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM6MTM1NDpscGZjX2xpbmtfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNTUtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTMxMjA9c3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdyxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjMxMjE6XHRcdGxwZmNfbGlua19zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zMTIyLXN0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQwNj1scGZjX29hc19sdW5fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MTUtLyoqXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDE2OiAqIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSAtIFN0b3JlIHRoZSBzdGF0ZSAoZW5hYmxlZCBvciBkaXNhYmxlZClcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MTctICpcdFx0XHQgICAgb2Ygd2hldGhlciBsdW5zIHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTM0Mjk9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjM0MzA6bHBmY19vYXNfbHVuX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zNDMxLVx0XHRcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYz0zNDUyPXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX3hsYW5lX2x1bl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDUzOlx0XHQgICBscGZjX29hc19sdW5fc3RhdGVfc2hvdywgbHBmY19vYXNfbHVuX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0NTQtXG4tLVxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmM9MzM0ND1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmM6MzM0NTpmd19jcmFzaF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpjZGV2LFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMtMzM0Ni1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbXlyYi5jPTE3NjA9c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3Njc2kvbXlyYi5jLTE4MDQtXG5kcml2ZXJzL3Njc2kvbXlyYi5jOjE4MDU6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3Njc2kvbXlyYi5jLTE4MDYtXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbXlycy5jPTkzND1zdGF0aWMgc3NpemVfdCByYWlkX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvc2NzaS9teXJzLmMtOTY4LVxuZHJpdmVycy9zY3NpL215cnMuYzo5Njk6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk3MC1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM9MjQ0PXZvaWQgYXBiX2N0cmxfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjQ4LVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYzoyNDk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYy0yNTAtXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYz0yODE9YXJjaGVfcGxhdGZvcm1fcG93ZXJvZmZfc2VxKHN0cnVjdCBhcmNoZV9wbGF0Zm9ybV9kcnZkYXRhICphcmNoZV9wZGF0YSlcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmMtMzA3LVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmM9Mjk2MD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdGdfcHRfZ3BfYWx1YV9hY2Nlc3Nfc3RhdGVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYy0yOTY2LVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYzoyOTY3OnN0YXRpYyBzc2l6ZV90IHRhcmdldF90Z19wdF9ncF9hbHVhX2FjY2Vzc19zdGF0ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jLTI5NjgtXHRcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jPTUzMT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzZnMuYzo1MzI6Y3VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jLTUzMy1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0zNjY9c3RhdGljIERFVklDRV9BVFRSKGN1cnJlbnRfdnR5LFxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMzY4LVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzozNjk6c3RhdGljIHNzaXplX3QgaHZjc192dGVybV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTM3MC1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM9NDE5PXN0YXRpYyBERVZJQ0VfQVRUUih2dGVybV9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjQyMDpcdFx0aHZjc192dGVybV9zdGF0ZV9zaG93LCBodmNzX3Z0ZXJtX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtNDIxLVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMTU9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMzA1PXN0YXRpYyBEUklWRVJfQVRUUl9STyhpcnFfaGFuZGxlcnMpO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy0xMzA2LVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYzoxMzA3OnN0YXRpYyBzc2l6ZV90IGlycV9oYW5kbGVyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEzMDgtXHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzY0PWludCBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzY5LSAqXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozNzA6ICogUGFpcmVkIHdpdGggaW5ldF9za19zdGF0ZV9zdG9yZSgpLiBVc2VkIGluIHBsYWNlcyB3ZSBkb24mIzM5O3QgaG9sZCBzb2NrZXQgbG9jazpcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3MS0gKiB0Y3BfZGlhZ19nZXRfaW5mbygpLCB0Y3BfZ2V0X2luZm8oKSwgdGNwX3BvbGwoKSwgZ2V0X3RjcDRfc29jaygpIC4uLlxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTM3Mz1zdGF0aWMgaW5saW5lIGludCBpbmV0X3NrX3N0YXRlX2xvYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3OS0vKipcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjM4MDogKiBpbmV0X3NrX3N0YXRlX3N0b3JlIC0gdXBkYXRlIHNrLVx1MDAzZXNrX3N0YXRlXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zODEtICogQHNrOiBzb2NrZXQgcG9pbnRlclxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM4Ni0gKi9cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjM4Nzp2b2lkIGluZXRfc2tfc3RhdGVfc3RvcmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbmV3c3RhdGUpO1xuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzg4LVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmM9NzcyPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy03OTgtXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjc5OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3Bvd2VyL21haW4uYy04MDAtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgbilcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Mi1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTE1OD1zdGF0aWMgaW50IHNldF9zdHBfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtMTYzLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjE2NDpzdGF0aWMgc3NpemVfdCBzdHBfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZCxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy0xNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEzNTY9RVhQT1JUX1NZTUJPTChpbmV0X3NrX3NldF9zdGF0ZSk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTM1Ny1cbm5ldC9pcHY0L2FmX2luZXQuYzoxMzU4OnZvaWQgaW5ldF9za19zdGF0ZV9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXdzdGF0ZSlcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzU5LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMjE9aW50IGluZXRfY3NrX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzQwLVx0ICovXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzNDE6XHRpbmV0X3NrX3N0YXRlX3N0b3JlKHNrLCBUQ1BfTElTVEVOKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM0Mi1cdGVyciA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZ2V0X3BvcnQoc2ssIGluZXQtXHUwMDNlaW5ldF9udW0pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI5NjA9dm9pZCB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMwMjYtXHQgKi9cbm5ldC9pcHY0L3RjcC5jOjMwMjc6XHRpbmV0X3NrX3N0YXRlX3N0b3JlKHNrLCBzdGF0ZSk7XG5uZXQvaXB2NC90Y3AuYy0zMDI4LX1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDQtXHQgKiB1bmRlciB0aGUgbXNrIHNvY2tldCBsb2NrLiBGb3IgdGhlIG1vbWVudCwgdGhhdCB3aWxsIG5vdCBicmluZ1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkwNTpcdCAqIGFueXRoaW5nIG1vcmUgdGhhbiBvbmx5IGNhbGxpbmcgaW5ldF9za19zdGF0ZV9zdG9yZSgpLCBiZWNhdXNlIHRoZVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwNi1cdCAqIG9sZCBzdGF0dXMgaXMga25vd24gKFRDUF9DTE9TRSkuXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA3LVx0ICovXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTA4Olx0aW5ldF9za19zdGF0ZV9zdG9yZShuZXdzaywgVENQX0xJU1RFTik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA5LVx0bG9ja19zb2NrKHNzayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2OT12b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTg4LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE4OTpcdGluZXRfc2tfc3RhdGVfc3RvcmUoc2ssIHN0YXRlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxOTAtfVxuLS1cbm5ldC9yZmtpbGwvY29yZS5jPTgwOD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxubmV0L3Jma2lsbC9jb3JlLmM6ODIwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIHdpdGggdGhlIGBzdGF0ZV9zdG9yZWAgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB0aGluayBhYm91dCBEQVggS01FTSBob3RwbHVnLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGFuZCB0aGUgY2xlYW51cCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGhhbmRsZWQgZ3JhY2VmdWxseS4KCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYCBieSBkaXJlY3RseSBjaGVja2luZyBgZHJpdmVycy9kYXgva21lbS5jYC4gWWVzLCBpdCYjMzk7cyB0aGVyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQXJlIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIHN1ZmZpY2llbnQ/IEkga25vdyBgREVWX0RBWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZSwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIAoKSGFuZyBvbiwgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBkb2VzbiYjMzk7dCBxdWl0ZSBtYWtlIHNlbnNlLiBBY2NvcmRpbmcgdG8gdGhlIEtjb25maWcsIGBERVZfREFYX0tNRU1gIGRvZXMgZGVwZW5kIG9uIGBERVZfREFYYCBidXQgYWxzbyBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIElzIHRoZSBLY29uZmlnIGNvcnJlY3Q/IFRpbWUgdG8gZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYGRyaXZlcnMvZGF4L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWX0RBWF9LTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9LY29uZmlnPTY4PWNvbmZpZyBERVZfREFYX0ZTREVWXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0tNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgJiMzNDtpdCYjMzQ7IGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRkZXBlbmRzIG9uIERFVl9EQVggXHUwMDI2XHUwMDI2IEZTX0RBWFxuICA3MTpcdFx0ZGVmYXVsdCBERVZfREFYXG4gIDcyOlx0XG4gIDczOlx0Y29uZmlnIERFVl9EQVhfS01FTVxuICA3NDpcdFx0dHJpc3RhdGUgXCYjMzQ7S01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXCYjMzQ7XG4gIDc1Olx0XHRkZWZhdWx0IERFVl9EQVhcbiAgNzY6XHRcdGRlcGVuZHMgb24gREVWX0RBWFxuICA3NzpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyAjIGZvciBhZGRfbWVtb3J5KCkgYW5kIGZyaWVuZHNcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgU3VwcG9ydCBhY2Nlc3MgdG8gcGVyc2lzdGVudCwgb3Igb3RoZXIgcGVyZm9ybWFuY2VcbiAgODA6XHRcdCAgZGlmZmVyZW50aWF0ZWQgbWVtb3J5IGFzIGlmIGl0IHdlcmUgU3lzdGVtIFJBTS4gVGhpcyBhbGxvd3NcbiAgODE6XHRcdCAgZWFzaWVyIHVzZSBvZiBwZXJzaXN0ZW50IG1lbW9yeSBieSB1bm1vZGlmaWVkIGFwcGxpY2F0aW9ucywgb3JcbiAgODI6XHRcdCAgYWRkcyBjb3JlIGtlcm5lbCBtZW1vcnkgc2VydmljZXMgdG8gaGV0ZXJvZ2VuZW91cyBtZW1vcnkgdHlwZXNcbiAgODM6XHRcdCAgKEhNRU0pIG1hcmtlZCBcJiMzNDtyZXNlcnZlZFwmIzM0OyBieSBwbGF0Zm9ybSBmaXJtd2FyZS5cbiAgODQ6XHRcbiAgODU6XHRcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxuICA4NjpcdFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbiAgODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyB0aGUgREVWX0RBWF9LTUVNIERlcGVuZGVuY3kgQ2hhaW4qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgREVWX0RBWF9LTUVNYCB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGl0IGluaGVyZW50bHkgcmVsaWVzIG9uIGBERVZfREFYYCwgdGhhdCBtdWNoIGlzIGNsZWFyLCBhbmQgYWxzbyBgTUVNT1JZX0hPVFBMVUdgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIERBWC4gTm93LCBoZXJlJiMzOTtzIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBNRU1PUllfSE9UUkVNT1ZFYCBpc24mIzM5O3QgKnN0cmljdGx5KiBlc3NlbnRpYWwgZm9yIGp1c3QgZW5hYmxpbmcgYERFVl9EQVhfS01FTWAgaXRzZWxmLiBCdXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2l0aG91dCBpdCwgdGhlICpob3RyZW1vdmUqIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIFNvLCB0byBlbnN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBjaGVjayBpZiBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTE2Nz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTEtXG5kcml2ZXJzL2RheC9rbWVtLmM6MjEyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuZHJpdmVycy9kYXgva21lbS5jLTIxMy0vKipcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MjcyPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzYtfVxuZHJpdmVycy9kYXgva21lbS5jOjI3NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzgtXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTM5MT1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTAwLVxuZHJpdmVycy9kYXgva21lbS5jOjUwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDItLypcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9NTc2PXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTU5MC19XG5kcml2ZXJzL2RheC9rbWVtLmM6NTkxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuZHJpdmVycy9kYXgva21lbS5jLTU5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBWCBhbmQgTWVtb3J5IEhvdHBsdWcvSG90cmVtb3ZlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggbWVtb3J5IGhvdC1yZW1vdmFsLCBjb25maXJtZWQgYnkgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYC4gVGhlIGNvcmUgY29uZmlncyBpbnZvbHZlZCBhcmUgYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIG5lZWQgYERFVl9EQVhfUE1FTWAsIGBERVZfREFYX0hNRU1gLCBvciBldmVuIGBERVZfREFYX0NYTGAgZm9yIERBWCBkZXZpY2UgY3JlYXRpb24uIFRoZSB0ZXN0IHNjcmlwdCwgd2l0aCBpdHMgYG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZmAgY29tbWFuZCwgc3VnZ2VzdHMgYXQgbGVhc3QgYERFVl9EQVhfUE1FTWAgb3IgcG9zc2libHkgYE5EX0JUVGAgYXJlIGluIHBsYXkuIEhvd2V2ZXIsIHJlbWVtYmVyIHN5emthbGxlciBjYW4gZ2VuZXJhdGUgREFYIGRldmljZXMsIHBlcmhhcHMgYnkgc3lzZnMsIGFzc3VtaW5nIHRoZSB1bmRlcmx5aW5nIGRyaXZlcnMgYXJlIHByZXNlbnQuIFRvIGJlIHNhZmUgYW5kIGNvbXByZWhlbnNpdmUsIEkmIzM5O2xsIGluY2x1ZGUgYERFVl9EQVhfUE1FTWAgYW5kIGBERVZfREFYX0hNRU1gIGZvciBub3cuIFVsdGltYXRlbHksIGBERVZfREFYYCBhbmQgYERFVl9EQVhfS01FTWAgYXJlIHRoZSBlc3NlbnRpYWxzLCBhbG9uZyB3aXRoIHRoZSBob3RwbHVnL2hvdHJlbW92ZSBvcHRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTt2ZSBnb3QgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBpcyByZWFjaGFibGUuIEFuZCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlgLiBMaWtld2lzZSwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgaXMgcmVhY2hlZCB0aHJvdWdoIGBkYXhfa21lbV9kb19ob3RwbHVnYCBhbmQgYGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlIG5vdCBtaXNzZWQgYW55dGhpbmcsIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFRoZXJlIGFyZSBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCwgYG1ocF9vbmxpbmVfdHlwZV90b19zdHJgIGFuZCBgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2VgLiBJJiMzOTtsbCBmb2N1cyBvbiBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NDk9RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01MC1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1MTpjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSlcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Mi17XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU2LX1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1NzpFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OC1cbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zMzgtXHRlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6MzM5Olx0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuZHJpdmVycy9kYXgva21lbS5jLTM0MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MTI5PWV4dGVybiBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cik7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MTMwOmNvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVmbGVjdGluZyBvbiBSZWNlbnQgQWRkaXRpb25zIGFuZCBhIFBvdGVudGlhbCBBcmVhIGZvciBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBjb25maXJtZWQg4oCTIHdlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgZnVuY3Rpb24gaW50ZWdyYXRlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgZXhjZWxsZW50LCBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCBpcyBub3cgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0ZXAgZm9yd2FyZC4KCk5vdywgd2l0aCB0aG9zZSBmdW5kYW1lbnRhbCBwaWVjZXMgaW4gcGxhY2UsIEkgbmVlZCB0byBzaGlmdCBmb2N1cy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWxsIGFib3V0LiBUaGVyZSYjMzk7cyBhIGRlY2VudCBjaGFuY2UgaXQgaGFzIGEgcmVsYXRpb25zaGlwIHRvIHRoZSBwcmlvciBmdW5jdGlvbnMsIGluIHNvbWUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MzE9c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzUtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzY6XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNy1cdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oPTEwMj1pbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnkuaC0xMDQtLyoqXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oOjEwNTogKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTEwNi0gKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTE0LSAqL1xuaW5jbHVkZS9saW51eC9tZW1vcnkuaDoxMTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5ODQKCQkJCQkJCW91dHB1dDogMjQ1CgkJCQkJCQl0aG91Z2h0czogNDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBjb25maXJtZWQgdGhlIGluY2x1c2lvbiBvZiBgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2VgLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGhvdHBsdWcgaW1wbGVtZW50YXRpb24uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQmIzM5O3MgcmVsZXZhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlLiBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBtaHBfb25saW5lX3R5cGVfdG9fc3RyYCBhcmUgZ2xvYmFsLCBpbXBseWluZyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGFjcm9zcyB0aGUgc3lzdGVtLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIEFoLCBhbmQgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhlIGNvbmZpZyBpcyBleGFjdGx5IGBDT05GSUdfREVWX0RBWF9LTUVNYC4gWWVzLCBpdCBpcy4KClRoZSBsb2dpYyBzZWVtcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgc2V0dGluZyB1cCBhIGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBob3RwbHVnIHN0YXRlIGZvciBEQVgga21lbSBkZXZpY2VzLiBJdCYjMzk7cyBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSB0aGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHByb2Nlc3NlcyBmb3IgbWVtb3J5IHJhbmdlcywgdXNpbmcgdGhvc2UgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9pbml0X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSBvZiBEQVgga21lbSBkZXZpY2VzLiBJdCBhZGRzIGxvZ2ljIHRvIGhhbmRsZSBob3RwbHVnZ2luZyBhbmQgaG90cmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgaW5jbHVkaW5nIG5ldyBjb3JlIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9ucyBsaWtlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O29mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDttaHBfb25saW5lX3R5cGVfdG9fc3RyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjg6NTcuOTQ3ODQyMTAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NDMyNzcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwibWhwX29ubGluZV90eXBlX3RvX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyODo1Ny45NDc4NDk1NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mjk2MTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwNDoyODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXggYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XFxuQEAgLTE1MSwzICsxNTEsMjkgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdG1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpc1xcbiBcXHRcXHR0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC1cXG4gXFx0XFx0bWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJ3RydWUnIG9yICdmb3JjZScuXFxcIlxcbitcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcXG4rRGF0ZTpcXHRcXHRKdW5lLCAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0djYuMjFcXG4rQ29udGFjdDpcXHRudmRpbW1AbGlzdHMubGludXguZGV2XFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cXG4rXFx0XFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cXG4rXFx0XFx0T25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuXFxuK1xcbitcXHRcXHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXFxuK1xcdFxcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxcbitcXG4rXFx0XFx0ICBcXFwidW5wbHVnZ2VkXFxcIjogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcXG4rXFx0XFx0ICBcXFwib25saW5lXFxcIjogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbFxcbitcXHRcXHQgIFxcXCJvbmxpbmVfa2VybmVsXFxcIjogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTFxcbitcXHRcXHQgIFxcXCJvbmxpbmVfbW92YWJsZVxcXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXFxuK1xcbitcXHRcXHRcXFwib2ZmbGluZVxcXCIgKG1lbW9yeSBibG9ja3MgYXJlIHByZXNlbnQgYnV0IG9mZmxpbmUpIG1heSBhbHNvIGJlXFxuK1xcdFxcdHJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGVcXG4rXFx0XFx0YXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyBcXFwib2ZmbGluZVxcXCIuICBJdCBjYW5ub3QgYmUgd3JpdHRlbixcXG4rXFx0XFx0YXMgaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cXG4rXFxuK1xcdFxcdEEgZGV2aWNlIGNhbiBvbmx5IGJlIG9ubGluZWQgZnJvbSB0aGUgXFxcInVucGx1Z2dlZFxcXCIgc3RhdGUsIHNvIGFcXG4rXFx0XFx0ZGV2aWNlIG11c3QgYmUgcmV0dXJuZWQgdG8gXFxcInVucGx1Z2dlZFxcXCIgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkXFxuK1xcdFxcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbmluZGV4IGJjZmUyZDlmNGFkYmQ5Li41ZWVhZDMzNDZmMWUzMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG5AQCAtNDYsNiArNDYsMTUgQEAgaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpXFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcXG4rXFxuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxcbit7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIDAgfHwgb25saW5lX3R5cGUgXFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcXG4gXFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmMgYi9kcml2ZXJzL2RheC9idXMuY1xcbmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5jXFxuQEAgLTEsNiArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZW1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG5AQCAtMzk0LDYgKzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRcXHQuc2l6ZSA9IDAsXFxuIFxcdFxcdFxcdC5pZCA9IC0xLFxcbiBcXHRcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFxcdTAwMjZkYXRhKTtcXG4gXFxuQEAgLTE1MjcsNiArMTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpXFxuIFxcdGlkYV9pbml0KFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VpZGEpO1xcbiBcXG4gXFx0ZGV2X2RheC1cXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnk7XFxuK1xcdGRldl9kYXgtXFx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cXHUwMDNlb25saW5lX3R5cGU7XFxuIFxcbiBcXHRpbm9kZSA9IGRheF9pbm9kZShkYXhfZGV2KTtcXG4gXFx0ZGV2LVxcdTAwM2VkZXZ0ID0gaW5vZGUtXFx1MDAzZWlfcmRldjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxcbmluZGV4IDU5MDkxNzFhNDQyOGI3Li4zYmM3NmJjMGExNDU4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5oXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpZm5kZWYgX19EQVhfQlVTX0hfX1xcbiAjZGVmaW5lIF9fREFYX0JVU19IX19cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNywxMyBAQCBzdHJ1Y3QgZGF4X3JlZ2lvbjtcXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXFxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcXG4gXFxuKy8qXFxuKyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lXFxuKyAqIHBvbGljeSwgc28gdGhlIHN5c3RlbSBkZWZhdWx0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGttZW0gZHJpdmVyIGJpbmRzLFxcbisgKiAobm90IGF0IGRldmljZS1jcmVhdGlvbiB0aW1lLCB3aGljaCB3b3VsZCBmcmVlemUgYSBzdGFsZSBwb2xpY3kpLlxcbisgKi9cXG4rI2RlZmluZSBEQVhfT05MSU5FX0RFRkFVTFRcXHQoLTEpXFxuK1xcbiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsXFxuIFxcdFxcdHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG5AQCAtMjYsNiArMzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcXG4gXFx0cmVzb3VyY2Vfc2l6ZV90IHNpemU7XFxuIFxcdGludCBpZDtcXG4gXFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xcbitcXHRpbnQgb25saW5lX3R5cGU7XFx0LyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXFxuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXFxuKysrIGIvZHJpdmVycy9kYXgvY3hsLmNcXG5AQCAtMjcsNiArMjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmFuZ2VfbGVuKFxcdTAwMjZjeGxyX2RheC1cXHUwMDNlaHBhX3JhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSB0cnVlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiBcXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cXG4gc3RydWN0IGRheF9kZXZpY2U7XFxuQEAgLTc5LDYgKzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xcbiAgKiBAZGV2OiBkZXZpY2UgY29yZVxcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XFxuKyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXFxuKyAqXFx0XFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcXG4gICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkXFxuICAqL1xcbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcXG4gXFx0c3RydWN0IGRldmljZSBkZXY7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXFxuIFxcdGludCBucl9yYW5nZTtcXG4gXFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXFxuQEAgLTM3LDYgKzM3LDcgQEAgc3RhdGljIGludCBkYXhfaG1lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHQuaWQgPSAtMSxcXG4gXFx0XFx0LnNpemUgPSByZWdpb25faWRsZSA/IDAgOiByYW5nZV9sZW4oXFx1MDAyNm1yaS1cXHUwMDNlcmFuZ2UpLFxcbiBcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgva21lbS5jIGIvZHJpdmVycy9kYXgva21lbS5jXFxuaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjE5ZWZmZTBkYTNkY2VmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xcbkBAIC0zMyw5ICszMyw3IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXFxuIFxcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlcmFuZ2VzW2ldO1xcbiBcXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXFx1MDAyNmRheF9yYW5nZS1cXHUwMDNlcmFuZ2U7XFxuIFxcbi1cXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cXG4tXFx0ci1cXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xcbi1cXHRyLVxcdTAwM2VlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XFxuK1xcdCpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpO1xcbiBcXHRpZiAoci1cXHUwMDNlc3RhcnQgXFx1MDAzZT0gci1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHItXFx1MDAzZXN0YXJ0ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0O1xcbiBcXHRcXHRyLVxcdTAwM2VlbmQgPSByYW5nZS1cXHUwMDNlZW5kO1xcbkBAIC00NCw5ICs0MiwxNSBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcXHQoLTEpXFxuK1xcbiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7XFxuIFxcdGNvbnN0IGNoYXIgKnJlc19uYW1lO1xcbiBcXHRpbnQgbWdpZDtcXG4rXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0c3RydWN0IGRldl9kYXggKmRldl9kYXg7XFxuK1xcdGludCBzdGF0ZTtcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi9cXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcXG4gfTtcXG4gXFxuQEAgLTY1LDE1ICs2OSwzMzQgQEAgc3RhdGljIHZvaWQga21lbV9wdXRfbWVtb3J5X3R5cGVzKHZvaWQpXFxuIFxcdG10X3B1dF9tZW1vcnlfdHlwZXMoXFx1MDAyNmttZW1fbWVtb3J5X3R5cGVzKTtcXG4gfVxcbiBcXG4rLyogVHJ1ZSBmb3IgdGhlIG9ubGluZSBzdGF0ZXMgYSBrbWVtIGRheCBkZXZpY2UgY2FuIGhvbGQuICovXFxuK3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8XFxuK1xcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcXG4rXFx0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXhfa21lbV9kb19ob3RwbHVnIC0gaG90cGx1ZyBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqIEBvbmxpbmVfdHlwZTogdGhlIG9ubGluZSBwb2xpY3kgdG8gdXNlIGZvciB0aGUgbWVtb3J5IGJsb2Nrc1xcbisgKlxcbisgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlXFxuKyAqIHByb3ZpZGVkIG9ubGluZSBwb2xpY3kgKG9mZmxpbmUsIG9ubGluZSwgb25saW5lX21vdmFibGUsIG9ubGluZV9rZXJuZWwpLlxcbisgKlxcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxcbisgKi9cXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgb25saW5lX3R5cGUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0aW50IGksIHJjLCBhZGRlZCA9IDA7XFxuK1xcdG1ocF90IG1ocF9mbGFncztcXG4rXFxuK1xcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbitcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogaW5pdF9yZXNvdXJjZXMoKSBpcyBiZXN0LWVmZm9ydDogaWYgYSByZXNlcnZhdGlvbiBjb25mbGljdFxcbitcXHRcXHQgKiBvY2N1cnMgaXQga2VlcHMgdGhlIHJhbmdlIGJ1dCBsZWF2ZXMgcmVzW2ldPU5VTEwuIEZvciBob3RwbHVnXFxuK1xcdFxcdCAqIG9uIHByb2JlIHN5c3RlbXMsIHRoaXMgbWVhbnMga21lbSB3aWxsIHBhcnRpYWxseSBvbmxpbmUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGJlaGF2aW9yIG5vdCB0byBicmVhayB0aG9zZSBzeXN0ZW1zLlxcbitcXHRcXHQgKiBGb3IgdGhvc2Ugc3lzdGVtcyAtIGF0b21pY2l0eSBvbmx5IGFwcGxpZXMgdG8gdmFsaWQgcmFuZ2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xcbitcXHRcXHRpZiAoZGV2X2RheC1cXHUwMDNlbWVtbWFwX29uX21lbW9yeSlcXG4rXFx0XFx0XFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbitcXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmMgPSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS1cXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXFxuK1xcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4rXFx0XFx0XFx0XFx0b25saW5lX3R5cGUpO1xcbitcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogUmVsZWFzZSB0aGUgcmVzZXJ2YXRpb24gZm9yIHRoZSByYW5nZSB0aGF0IGZhaWxlZCB0b1xcbitcXHRcXHRcXHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcXG4rXFx0XFx0XFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNlcmVzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VyZXNbaV0gPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChhZGRlZClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHRhZGRlZCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gYWRkZWQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xcbisgKlxcbisgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxcbisgKlxcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxcbisgKi9cXG4rc3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuK1xcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4rXFxuK1xcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNraXAgcmFuZ2VzIGFscmVhZHkgYWRkZWQgKi9cXG4rXFx0XFx0aWYgKGRhdGEtXFx1MDAzZXJlc1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBSZWdpb24gaXMgcGVybWFuZW50bHkgcmVzZXJ2ZWQgaWYgaG90cmVtb3ZlIGZhaWxzLiAqL1xcbitcXHRcXHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbitcXHRcXHRpZiAoIXJlcykge1xcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJ3RcXG4rXFx0XFx0XFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKG1hcHBlZClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gcmVzO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxcbitcXHRcXHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcXG4rXFx0XFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcXG4rXFx0XFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVzLVxcdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcXG4rXFx0XFx0bWFwcGVkKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG1hcHBlZDtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuKy8qKlxcbisgKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXFxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcXG4rICpcXG4rICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxcbisgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxcbisgKiB0aGUgZGV2aWNlIGlzIHJldHVybmVkIHRvIGl0cyBwcmlvciBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJhbmdlICpyYW5nZXM7XFxuK1xcdGludCBpLCBucl9yYW5nZXMgPSAwLCByYztcXG4rXFxuK1xcdHJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmFuZ2VzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdC8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuK1xcbitcXHRcXHRpZiAoIWRhdGEtXFx1MDAzZXJlc1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmFuZ2VzW25yX3JhbmdlcysrXSA9IHJhbmdlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xcbitcXHRpZiAoIW5yX3Jhbmdlcykge1xcbitcXHRcXHRrZnJlZShyYW5nZXMpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7XFxuK1xcdGtmcmVlKHJhbmdlcyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHQvKiBSZWNvdmVyYWJsZTogdGhlIHJhbmdlcyByb2xsZWQgYmFjaywgbm90aGluZyBpcyBsZWFrZWQgeWV0LiAqL1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbitcXG4rLyoqXFxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXFxuK1xcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxcbitcXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTigoKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAoZGF0YS1cXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXFxuK1xcdFxcdCBcXFwiSG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXG4rXFx0LyogXFxcInVucGx1Z2dlZFxcXCIgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xcbitcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcXFwidW5wbHVnZ2VkXFxcIikpXFxuK1xcdFxcdHJldHVybiBEQVhfS01FTV9VTlBMVUdHRUQ7XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xcbitcXHQvKiBEaXNhbGxvdyBcXFwib2ZmbGluZVxcXCI6IGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi9cXG4rXFx0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcXG4rXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXFxuK1xcdFxcdHN0YXRlX3N0ciA9IFxcXCJ1bnBsdWdnZWRcXFwiO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHN0YXRlX3N0ciA/OiBcXFwidW5rbm93blxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcXG4rXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIG9ubGluZV90eXBlO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cXG4rXFx0aWYgKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0ZGF0YS1cXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbitcXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7XFxuIFxcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcXG4tXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbi1cXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcdGludCBpLCByYztcXG4gXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbiBcXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzMyw2OCArNDU2LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWdfbWdpZDtcXG4gXFx0ZGF0YS1cXHUwMDNlbWdpZCA9IHJjO1xcbitcXHRkYXRhLVxcdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XFxuK1xcdGRhdGEtXFx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xcbitcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4tXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbi1cXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4tXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRpZiAoIXJlcykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxcbi1cXHRcXHRcXHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAobWFwcGVkKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXFxuLVxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbi1cXHRcXHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xcbi1cXHRcXHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXMtXFx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4gXFxuLVxcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4tXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuLVxcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzb3VyY2VzO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbi1cXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbi1cXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xcbitcXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cXG4rXFx0b25saW5lX3R5cGUgPSBkZXZfZGF4LVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4rXFx0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcXG4rXFx0XFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4gXFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4tXFx0XFx0XFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XFxuLVxcdFxcdFxcdGtmcmVlKHJlcyk7XFxuLVxcdFxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdGlmIChtYXBwZWQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXBwZWQrKztcXG4tXFx0fVxcbitcXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuK1xcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2hvdHBsdWc7XFxuK1xcdGRhdGEtXFx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XFxuIFxcbi1cXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4rXFx0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc3RhdGUgc3lzZnMgZW50cnlcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVxdWVzdF9tZW06XFxuK2Vycl9ob3RwbHVnOlxcbitcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rZXJyX3Jlc291cmNlczpcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuIFxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbiBlcnJfcmVnX21naWQ6XFxuIFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG5AQCAtMjA2LDY1ICs0OTksODYgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbi1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbisvKlxcbisgKiBSZW1vdmUgdGhlIGRldmljZSdzIGFkZGVkIHJhbmdlcyB3aXRoIHJlbW92ZV9tZW1vcnkoKS5cXG4rICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmVcXG4rICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cXG4rICpcXG4rICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuIHtcXG4tXFx0aW50IGksIHN1Y2Nlc3MgPSAwO1xcbi1cXHRpbnQgbm9kZSA9IGRldl9kYXgtXFx1MDAzZXRhcmdldF9ub2RlO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlZGV2O1xcbi1cXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgaSwgcmMgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgaGF2ZSBvbmUgc2hvdCBmb3IgcmVtb3ZpbmcgbWVtb3J5LCBpZiBzb21lIG1lbW9yeSBibG9ja3Mgd2VyZSBub3RcXG4tXFx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXFxuLVxcdCAqIHRoZXJlIGlzIG5vIHdheSB0byBob3RyZW1vdmUgdGhpcyBtZW1vcnkgdW50aWwgcmVib290IGJlY2F1c2UgZGV2aWNlXFxuLVxcdCAqIHVuYmluZCB3aWxsIHN1Y2NlZWQgZXZlbiBpZiB3ZSByZXR1cm4gZmFpbHVyZS5cXG4tXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4tXFx0XFx0aW50IHJjO1xcbiBcXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldIHx8IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFxcdTAwMjZyYW5nZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogcmFuZ2Ugd2FzIG5ldmVyIGFkZGVkIGR1cmluZyBwcm9iZSAqL1xcbi1cXHRcXHRpZiAoIWRhdGEtXFx1MDAzZXJlc1tpXSkge1xcbi1cXHRcXHRcXHRzdWNjZXNzKys7XFxuK1xcdFxcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSkpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcdFxcdFxcdHJjID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4gXFxuLVxcdFxcdHJjID0gcmVtb3ZlX21lbW9yeShyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZSkpO1xcbi1cXHRcXHRpZiAocmMgPT0gMCkge1xcbi1cXHRcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4tXFx0XFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4tXFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4tXFx0XFx0XFx0c3VjY2VzcysrO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbitzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbit7XFxuK1xcdGludCBub2RlID0gZGV2X2RheC1cXHUwMDNldGFyZ2V0X25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcbitcXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHQvKlxcbitcXHQgKiBJZiBVTlBMVUdHRUQ6IHN0YXRlIGlzIGtub3duIGNsZWFuIGFuZCByZWJvb3QgY2FuIGNsZWFuIHVwLlxcbitcXHQgKlxcbitcXHQgKiBJZiBPTkxJTkVfKjogbWVtb3J5IGNhbm5vdCBiZSByZW1vdmVkIGhlcmU6IG9mZmxpbmluZyBkdXJpbmcgYW5cXG4rXFx0ICogdW5pbnRlcnJ1cHRpYmxlIHVuYmluZCBjYW4gZGVhZGxvY2suIExlYWsgdGhlIHJlc291cmNlcyB1bnRpbCByZWJvb3QuXFxuK1xcdCAqXFxuK1xcdCAqIElmIE9GRkxJTkU6IGJsb2NrcyBhcmUgYXR0ZW1wdGVkIHRvIHJlbW92ZSB3aXRoIHJlbW92ZV9tZW1vcnkoKSxcXG4rXFx0ICogd2hpY2ggbmV2ZXIgYXR0ZW1wdHMgb2ZmbGluaW5nLiBBIGJsb2NrIG9ubGluZWQgYmVoaW5kIG91ciBiYWNrXFxuK1xcdCAqIGZhaWxzIC1FQlVTWSBhbmQgaXMgbGVha2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVxcdTAwM2VzdGF0ZSkpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiSG90cGx1ZyByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fSBlbHNlIGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhkZXZfZGF4LCBkYXRhKSkge1xcbiBcXHRcXHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XFxuLVxcdFxcdGRldl9lcnIoZGV2LFxcbi1cXHRcXHRcXHRcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBjYW5ub3QgYmUgaG90cmVtb3ZlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3RcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN1Y2Nlc3MgXFx1MDAzZT0gZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2UpIHtcXG4tXFx0XFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlbWdpZCk7XFxuLVxcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG4tXFx0XFx0a2ZyZWUoZGF0YSk7XFxuLVxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cXG4tXFx0XFx0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcXG4tXFx0XFx0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxcbi1cXHRcXHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXFxuLVxcdFxcdCAqIHRpbGwgbmV4dCByZWJvb3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xcbi1cXHR9XFxuK1xcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbitcXHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVxcdTAwM2VtZ2lkKTtcXG4rXFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbitcXHRrZnJlZShkYXRhKTtcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuK1xcdC8qXFxuK1xcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxcbitcXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxcbitcXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXFxuK1xcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcXG4rXFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cXG4rXFx0ICovXFxuK1xcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXFx1MDAyNmRldl9hdHRyX3N0YXRlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXFxuIFxcdCAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAnMCcgdG8gLVxcdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jXFxuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kYXhfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdC5wZ21hcCA9IFxcdTAwMjZwZ21hcCxcXG4gXFx0XFx0LnNpemUgPSByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcXG4rXFx0XFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxcbmluZGV4IDQ2M2RjMDJmNmNmZjA1Li4xNzgzMjk5MDczZTQ3OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTl9TSVpFX0JJVFMpXFxuIFxcbkBAIC0xMDAsNiArMTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pO1xcbiB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKHZvaWQpO1xcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XFxuIFxcbisvKipcXG4rICogbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UgLSBhbGlnbiBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgdG8gbWVtb3J5IGJsb2Nrc1xcbisgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxcbisgKlxcbisgKiBBbGlnbnMgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgYW5kIHRoZSBlbmQgYWRkcmVzcyBkb3duIHRvIG1lbW9yeSBibG9ja1xcbisgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3RcXG4rICogb3BlcmF0ZSBvbiBtZW1vcnktYmxvY2sgYWxpZ25lZCByYW5nZXMuXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkXFxuKyAqIHJhbmdlIGlzIHZhbGlkIChhbGlnbmVkLnN0YXJ0IFxcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpXFxuK3tcXG4rXFx0c3RydWN0IHJhbmdlIGFsaWduZWQ7XFxuK1xcbitcXHRhbGlnbmVkLnN0YXJ0ID0gQUxJR04ocmFuZ2UtXFx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4rXFx0YWxpZ25lZC5lbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4rXFx0LyogTm8gd2hvbGUgYmxvY2sgZml0cyAoZS5nLiByYW5nZSBiZWxvdyB0aGUgZmlyc3QgYm91bmRhcnkpOiBlbXB0eS4gKi9cXG4rXFx0aWYgKGFsaWduZWQuZW5kIFxcdTAwM2M9IGFsaWduZWQuc3RhcnQpXFxuK1xcdFxcdGFsaWduZWQuc3RhcnQgPSBhbGlnbmVkLmVuZDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhbGlnbmVkLmVuZCAtPSAxO1xcbitcXG4rXFx0cmV0dXJuIGFsaWduZWQ7XFxuK31cXG4rXFxuIHN0cnVjdCBtZW1vcnlfbm90aWZ5IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcbmluZGV4IDdjOWQ2NjcyOWM2MDk1Li5kYjEwZDUwZjMwYWUxYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG5AQCAtMTI3LDYgKzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIGV4dGVybiB1NjQgbWF4X21lbV9zaXplO1xcbiBcXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xcbiBcXG4gLyogSWYgbW92YWJsZV9ub2RlIGJvb3Qgb3B0aW9uIHNwZWNpZmllZCAqL1xcbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcXG5AQCAtMjY3LDYgKzI2OCw4IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKTtcXG4gXFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuQEAgLTI4Myw2ICsyODYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcylcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbkBAIC0yOTQsNiArMzAzLDkgQEAgZXh0ZXJuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcXG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxcbiBcXHRcXHRcXHQgICAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG4raW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG5AQCAtMzE2LDYgKzMyOCw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcXG4gZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcXG4gdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovXFxuIFxcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTIzOSw2ICsyMzksNyBAQCBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpXFxuIFxcbiBcXHRyZXR1cm4gbWhwX2RlZmF1bHRfb25saW5lX3R5cGU7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKTtcXG4gXFxuIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcXG4ge1xcbkBAIC0xMzM3LDcgKzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXFxuIFxcbiBzdGF0aWMgaW50IG9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXFxuIHtcXG4tXFx0bWVtLVxcdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xcbitcXHRlbnVtIG1tb3AgKm9ubGluZV90eXBlID0gYXJnO1xcbitcXG4rXFx0bWVtLVxcdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcXG4gXFx0cmV0dXJuIGRldmljZV9vbmxpbmUoXFx1MDAyNm1lbS1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG5AQCAtMTQ5MSw3ICsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG4gICpcXG4gICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xcbiAgKi9cXG4taW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4rc3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcXG4rXFx0XFx0XFx0XFx0IGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWhwX3BhcmFtcyBwYXJhbXMgPSB7IC5wZ3Byb3QgPSBwZ3Byb3RfbWhwKFBBR0VfS0VSTkVMKSB9O1xcbiBcXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcXG5AQCAtMTU4MSw4ICsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4gXFx0XFx0bWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpO1xcbiBcXG4gXFx0Lyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqL1xcbi1cXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxcbi1cXHRcXHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xcbitcXHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxcbitcXHRcXHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFxcdTAwMjZvbmxpbmVfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgb25saW5lX21lbW9yeV9ibG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiBlcnJvcjpcXG5AQCAtMTU5OCw3ICsxNjAzLDEzIEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cXG4raW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xcbit9XFxuK1xcbisvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cXG4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuQEAgLTE2MjYsNyArMTYzNywxNSBAQCBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuIFxcbi0vKlxcbisvKipcXG4rICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXFxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4rICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXFxcIlN5c3RlbSBSQU0gKCREUklWRVIpXFxcIlxcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xcbisgKiBAb25saW5lX3R5cGU6IEF1dG8tT25saW5lIGJlaGF2aW9yIChvZmZsaW5lLCBvbmxpbmUsIGtlcm5lbCwgbW92YWJsZSlcXG4rICpcXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cXG4gICogUkFNLCBpbnN0ZWFkLCBpdCBpcyBkZXRlY3RlZCBhbmQgYWRkZWQgYnkgYSBkcml2ZXIgLSBkdXJpbmcgY29sZCBib290LFxcbkBAIC0xNjM0LDYgKzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4gICpcXG4gICogUmVhc29ucyB3aHkgdGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZW1tYXAgb2YgYVxcbiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOlxcbisgKlxcbiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmVcXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcXG4gICogLSBDb29yZGluYXRpb24gd2l0aCBhIGh5cGVydmlzb3IgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgbWVtb3J5XFxuQEAgLTE2NDYsOSArMTY2NiwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4gICpcXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XFxuICAqIFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbitcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuIFxcdGludCByYztcXG5AQCAtMTY1OCw2ICsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0ICAgIHJlc291cmNlX25hbWVbc3RybGVuKHJlc291cmNlX25hbWUpIC0gMV0gIT0gJyknKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4gXFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcXG5AQCAtMTY2Niw3ICsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XFxuK1xcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcXG4gXFxuQEAgLTE2NzQsNiArMTcwMCwzMCBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcXFwia21lbVxcXCIpO1xcbitcXG4rLyoqXFxuKyAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5XFxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4rICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXFxcIlN5c3RlbSBSQU0gKCREUklWRVIpXFxcIlxcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xcbisgKlxcbisgKiBBZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggdGhlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSB0eXBlIHNldCBieVxcbisgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxcbisgKlxcbisgKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbitcXHRcXHRcXHRtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcXG4gXFxuIC8qXFxuQEAgLTIzNzksNTggKzI0MjksOTUgQEAgc3RhdGljIGludCB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxcbiAgKi9cXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4ge1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdHN0cnVjdCByYW5nZSByYW5nZSA9IHtcXG4rXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuK1xcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK1xcbisvKipcXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcXG4rICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xcbisgKlxcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxcbisgKlxcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxcbisgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cXG4rICpcXG4rICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcXG4rICogYmVlbiByZW1vdmVkLlxcbisgKi9cXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwO1xcbiBcXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XFxuLVxcdGludCByYztcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbi1cXHRpZiAoIUlTX0FMSUdORUQoc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8XFxuLVxcdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcXG4rXFx0aWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgdTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0O1xcbitcXHRcXHRjb25zdCB1NjQgc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0bWJfY291bnQgKz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFdlJ2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhblxcbi1cXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXFxuLVxcdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXFxuK1xcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxcbitcXHQgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnRcXG4rXFx0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxcbiBcXHQgKi9cXG4gXFx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxcbiBcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIW9ubGluZV90eXBlcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdC8qXFxuLVxcdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxcbi1cXHQgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UnbGwgc2tpcCBhbGwgdW5wcm9jZXNzZWQgYmxvY2tzIGluXFxuLVxcdCAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS5cXG4tXFx0ICovXFxuIFxcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfY291bnQpO1xcbiBcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4rXFx0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cXG4gXFx0dG1wID0gb25saW5lX3R5cGVzO1xcbi1cXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0Llxcbi1cXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIXJjKSB7XFxuLVxcdFxcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlc1tpXSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XFxuIFxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsXFxuLVxcdCAqIChuYWNrZWQgYnkgYSBub3RpZmllciksIGl0IGJhcmVseSBldmVyIGhhcHBlbnMuXFxuLVxcdCAqL1xcbitcXHQvKiBJZiBhbnkgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbGwsIHJvbGxiYWNrIGFueSBjaGFuZ2VzIGFuZCBiYWlsICovXFxuIFxcdGlmIChyYykge1xcbiBcXHRcXHR0bXAgPSBvbmxpbmVfdHlwZXM7XFxuLVxcdFxcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCxcXG4tXFx0XFx0XFx0XFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKylcXG4rXFx0XFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pLCBcXHUwMDI2dG1wLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSAyOiBSZW1vdmUuIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgaG9sZGluZyB0aGUgaG90cGx1ZyBsb2NrICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKylcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKSkpO1xcbitcXG4rb3V0X3VubG9jazpcXG4gXFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuIFxcbiBcXHRrZnJlZShvbmxpbmVfdHlwZXMpO1xcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uNTUyODY4MmEzYTkxMjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxcbiBUQVJHRVRTICs9IGNwdWZyZXFcXG4gVEFSR0VUUyArPSBjcHUtaG90cGx1Z1xcbiBUQVJHRVRTICs9IGRhbW9uXFxuK1RBUkdFVFMgKz0gZGF4XFxuIFRBUkdFVFMgKz0gZGV2aWNlcy9lcnJvcl9sb2dzXFxuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxcbiBUQVJHRVRTICs9IGRtYWJ1Zi1oZWFwc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbithbGw6XFxuK1xcbitURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2hcXG4rXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGM5YWFlYjZjZWI0MWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xcbkBAIC0wLDAgKzEsNCBAQFxcbitDT05GSUdfREVWX0RBWD1tXFxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxcbitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jOGJiYWY2MTc4ZWQ5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaFxcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcXFwic3RhdGVcXFwiIHN5c2ZzIGF0dHJpYnV0ZTpcXG4rIyAgIC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZSAgLVxcdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9rZXJuZWwgfCBvbmxpbmVfbW92YWJsZVxcbisjXFxuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxcbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cXG4rI1xcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxcbisjICAgbWVtbWFwPTJHITRHXFxuKyNcXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcXG4rI1xcbisjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mXFxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxcbitcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXFxuK0RJUj1cXFwiJChkaXJuYW1lIFxcXCIkKHJlYWRsaW5rIC1mIFxcXCIkMFxcXCIpXFxcIilcXFwiXFxuKy4gXFxcIiRESVJcXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzXFxuK1xcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxcbitnZXRfc3RhdGUoKSB7IGNhdCBcXFwiJEhQXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgfVxcbisjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlXFxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXFxuK3NldF9zdGF0ZSgpIHsgZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiRIUFxcXCIgMlxcdTAwM2UvZGV2L251bGw7IH1cXG4rXFxuK2ZpbmRfa21lbV9kYXgoKSB7XFxuK1xcdGxvY2FsIGQgZHJ2XFxuK1xcdGZvciBkIGluIFxcXCIkREFYX0JBU0VcXFwiL2RheCo7IGRvXFxuK1xcdFxcdFsgLWUgXFxcIiRkL3N0YXRlXFxcIiBdIHx8IGNvbnRpbnVlXFxuK1xcdFxcdGRydj0kKHJlYWRsaW5rIFxcXCIkZC9kcml2ZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRcXHRbIFxcXCIkKGJhc2VuYW1lIFxcXCIke2RydjotfVxcXCIpXFxcIiA9IGttZW0gXSB8fCBjb250aW51ZVxcbitcXHRcXHRiYXNlbmFtZSBcXFwiJGRcXFwiXFxuK1xcdFxcdHJldHVybiAwXFxuK1xcdGRvbmVcXG4rXFx0cmV0dXJuIDFcXG4rfVxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4rXFxuK2lmIFsgXFxcIiRVSURcXFwiICE9IDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4rREFYPSQoZmluZF9rbWVtX2RheClcXG4raWYgWyAteiBcXFwiJERBWFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rSFA9JERBWF9CQVNFLyREQVgvc3RhdGVcXG4rT1JJRz0kKGdldF9zdGF0ZSlcXG4rXFxuKyMgQSBmYWlsdXJlIHRvIHJlYWNoIHRoZSBiYXNlbGluZSBpcyBlbnZpcm9ubWVudGFsIChtZW1vcnkgaW4gdXNlKSwgbm90IGFuXFxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gfHwgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkREFYOiBjYW5ub3QgcmVhY2ggJ3VucGx1Z2dlZCcgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVxcXCJcXG4rXFx0WyAtbiBcXFwiJE9SSUdcXFwiIF0gXFx1MDAyNlxcdTAwMjYgc2V0X3N0YXRlIFxcXCIkT1JJR1xcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXFxuK1xcbitEUlY9L3N5cy9idXMvZGF4L2RyaXZlcnMva21lbVxcbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXFxuK1xcbitrdGFwX3ByaW50X21zZyBcXFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVxcXCJcXG4ra3RhcF9zZXRfcGxhbiA4XFxuK1xcbisjIEEgcHVibGljIChOX01FTU9SWSkga21lbSBub2RlIG9ubGluZWQgaW50byBhIGtlcm5lbCB6b25lIChvbmxpbmUvb25saW5lX2tlcm5lbClcXG4rIyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZFxcbisjIHdlZGdlIHRoZSBkZXZpY2UgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdC4gIFNvIHRoaXMgdGVzdCBvbmx5IGV2ZXJcXG4rIyBzdWNjZXNzZnVsbHkgb25saW5lcyBvbmxpbmVfbW92YWJsZSwgdGhlIG9uZSBtb2RlIHRoYXQgaXMgcmVsaWFibHkgdW5wbHVnZ2FibGUuXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK210X29ubGluZT0kKG1lbXRvdGFsX2tiKVxcbitpZiBbIFxcXCIkcmNcXFwiID0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBvbmxpbmVfbW92YWJsZSBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdF9vbmxpbmVcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cXHUwMDNlICRtdF9vbmxpbmUga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuKyMgQSBkaWZmZXJlbnQgb25saW5lIHR5cGUgaXMgcmVqZWN0ZWQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyB1bnBsdWcuICBUaGUgd3JpdGVcXG4rIyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXFxuK3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kP1xcbitpZiBbIFxcXCIkcmNcXFwiICE9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IG9ubGluZV9rZXJuZWwgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWcgKG5vIGtlcm5lbC16b25lIG9ubGluZSlcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlLVxcdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IHVucGx1Z2dlZCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdFxcXCIgLWx0IFxcXCIkbXRfb25saW5lXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmVfbW92YWJsZTogTWVtVG90YWwgJG10X29ubGluZSAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9vbmxpbmUgLVxcdTAwM2UgJG10XFxcIlxcbitmaVxcbitcXG4rYmVmb3JlPSQoZ2V0X3N0YXRlKVxcbitzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgIT0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBcXFwiJGJlZm9yZVxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IGludmFsaWQgc3RhdGUgc3RyaW5nXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJpbnZhbGlkIHN0YXRlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuKyMgVGhlIG9ubGluZV9tb3ZhYmxlIC1cXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXFxuKyMgcmUtcmVzZXJ2ZSB0aGUgcGVyLXJhbmdlIHJlc291cmNlcywgc28gYSBsYXRlciB1bnBsdWcgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZVxcbisjIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgZWFjaCBpdGVyYXRpb24gcmVhbGx5IGFkZHMgYW5kIGZyZWVzIG1lbW9yeS5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxcbitjeWNsZV9vaz0xOyBmYWlsX2k9MDsgb249MDsgb2ZmPTBcXG4rZm9yIGkgaW4gMSAyIDM7IGRvXFxuK1xcdGlmICEgc2V0X3N0YXRlIG9ubGluZV9tb3ZhYmxlOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXFxuK1xcdG9uPSQobWVtdG90YWxfa2IpXFxuK1xcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxcbitcXHRvZmY9JChtZW10b3RhbF9rYilcXG4rXFx0aWYgWyBcXFwiJG9uXFxcIiAtbGUgXFxcIiRtdF91bnBsdWdnZWRcXFwiIF0gfHwgWyBcXFwiJG9mZlxcXCIgLWdlIFxcXCIkb25cXFwiIF07IHRoZW5cXG4rXFx0XFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xcbitcXHRmaVxcbitkb25lXFxuK2lmIFsgXFxcIiRjeWNsZV9va1xcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm9ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZS1hY3F1aXJlcyByZXNvdXJjZXMgKDN4OiBhZGRlZCBhbmQgZnJlZWQgZWFjaCB0aW1lKVxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXFxcIlxcbitmaVxcbitcXG4rIyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XFxuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK2lmIFsgLXcgXFxcIiRBT0JcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi9iaW5kXFxcIiBdOyB0aGVuXFxuK1xcdG9yaWdfYW9iPSQoY2F0IFxcXCIkQU9CXFxcIilcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gb2ZmbGluZSBcXHUwMDNlIFxcXCIkQU9CXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkREFYXFxcIiBcXHUwMDNlIFxcXCIkRFJWL2JpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHNsZWVwIDFcXG4rXFx0c3Q9JChnZXRfc3RhdGUpXFxuK1xcdGVjaG8gXFxcIiRvcmlnX2FvYlxcXCIgXFx1MDAzZSBcXFwiJEFPQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlc3RvcmUgc3lzdGVtIHBvbGljeVxcbitcXHRpZiBbIFxcXCIkc3RcXFwiID0gb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cXHUwMDNlIHN0YXRlPW9mZmxpbmVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcImJpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSlcXFwiXFxuK1xcdGZpXFxuK1xcdHNldF9zdGF0ZSB1bnBsdWdnZWQgMlxcdTAwM2UvZGV2L251bGxcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiYXV0b19vbmxpbmVfYmxvY2tzIG9yIGRyaXZlciBiaW5kL3VuYmluZCBub3Qgd3JpdGFibGVcXFwiXFxuK2ZpXFxuK1xcbitbIC1uIFxcXCIkT1JJR1xcXCIgXSBcXHUwMDI2XFx1MDAyNiBzZXRfc3RhdGUgXFxcIiRPUklHXFxcIlxcbitcXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xcbisjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XFxuKyMgd2l0aCBhIHNpbmdsZSBcXFwic3R1Y2sgb25saW5lXFxcIiB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXFxuKyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QgLSBhbmQgb25seSBpZiB3ZSBjYW4gcnVuIGl0LFxcbisjIGxlYXZpbmcgdGhlIHJlc3RvcmVkIHN0YXRlIGFib3ZlIHVudG91Y2hlZCBvdGhlcndpc2UuICBvbmxpbmVfbW92YWJsZSBvbmx5OlxcbisjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLlxcbitpZiBbIC13IFxcXCIkRFJWL3VuYmluZFxcXCIgXTsgdGhlblxcbitcXHRzZXRfc3RhdGUgdW5wbHVnZ2VkOyBzZXRfc3RhdGUgb25saW5lX21vdmFibGVcXG4rZmlcXG4raWYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZV9tb3ZhYmxlIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF07IHRoZW5cXG4rXFx0bXRfb249JChtZW10b3RhbF9rYilcXG4rXFx0ZG1lc2cgLUMgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXFxuK1xcdCMgVGhlIGxlYWtlZCBcXFwiU3lzdGVtIFJBTSAoa21lbSlcXFwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xcbitcXHQjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC5cXG4rXFx0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cXG4rXFx0Y2F0IC9wcm9jL2lvbWVtIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c3BsYXQ9JChkbWVzZyAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcXFwiS0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XFxcIilcXG4rXFx0aWYgWyBcXFwiJHNwbGF0XFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfYWZ0ZXJcXFwiIC1nZSBcXFwiJG10X29uXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCKVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwidW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9za2lwIFxcXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9OTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjg6NTguNDQxNTc1NDM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ0OTUzMzEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCIsXG4gICAgXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc1wiLFxuICAgIFwiX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkXCIsXG4gICAgXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjM3MTIyZTVhMjJkMzBkN2E1MGViYmYzZDRhZDJlYTRlMmI0ZTY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDQ6Mjg6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXggYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5AQCAtMTUxLDMgKzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXG4gXHRcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxuIFx0XHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAndHJ1ZScgb3IgJ2ZvcmNlJy5cIlxuK1xuK1doYXQ6XHRcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxuK0RhdGU6XHRcdEp1bmUsIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0djYuMjFcbitDb250YWN0Olx0bnZkaW1tQGxpc3RzLmxpbnV4LmRldlxuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cbitcdFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbitcdFx0T25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuXG4rXG4rXHRcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcbitcdFx0dGhlIHBlci1ibG9jayAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlIEFCSTo6XG4rXG4rXHRcdCAgXCJ1bnBsdWdnZWRcIjogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcbitcdFx0ICBcIm9ubGluZVwiOiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXG4rXHRcdCAgXCJvbmxpbmVfa2VybmVsXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9OT1JNQUxcbitcdFx0ICBcIm9ubGluZV9tb3ZhYmxlXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXG4rXG4rXHRcdFwib2ZmbGluZVwiIChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZVxuK1x0XHRyZXBvcnRlZCAtIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkZXZpY2UgaXMgYm91bmQgd2hpbGUgdGhlXG4rXHRcdGF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgXCJvZmZsaW5lXCIuICBJdCBjYW5ub3QgYmUgd3JpdHRlbixcbitcdFx0YXMgaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cbitcbitcdFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcInVucGx1Z2dlZFwiIHN0YXRlLCBzbyBhXG4rXHRcdGRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvIFwidW5wbHVnZ2VkXCIgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkXG4rXHRcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uNWVlYWQzMzQ2ZjFlMzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTQ2LDYgKzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKVxuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cik7XG4rXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXG4re1xuK1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyAwIHx8IG9ubGluZV90eXBlIFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIG9ubGluZV90eXBlX3RvX3N0cltvbmxpbmVfdHlwZV07XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xuIFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2J1cy5jIGIvZHJpdmVycy9kYXgvYnVzLmNcbmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXG4rKysgYi9kcml2ZXJzL2RheC9idXMuY1xuQEAgLTEsNiArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMjAxNy0yMDE4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG5AQCAtMzk0LDYgKzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdC5zaXplID0gMCxcbiBcdFx0XHQuaWQgPSAtMSxcbiBcdFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdFx0fTtcbiBcdFx0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSk7XG4gXG5AQCAtMTUyNyw2ICsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcbiBcdGlkYV9pbml0KFx1MDAyNmRldl9kYXgtXHUwMDNlaWRhKTtcbiBcbiBcdGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcbitcdGRldl9kYXgtXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVx1MDAzZW9ubGluZV90eXBlO1xuIFxuIFx0aW5vZGUgPSBkYXhfaW5vZGUoZGF4X2Rldik7XG4gXHRkZXYtXHUwMDNlZGV2dCA9IGlub2RlLVx1MDAzZWlfcmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXG5pbmRleCA1OTA5MTcxYTQ0MjhiNy4uM2JjNzZiYzBhMTQ1ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNpZm5kZWYgX19EQVhfQlVTX0hfX1xuICNkZWZpbmUgX19EQVhfQlVTX0hfX1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5AQCAtMTYsNiArMTcsMTMgQEAgc3RydWN0IGRheF9yZWdpb247XG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxuIFxuKy8qXG4rICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcbisgKiBwb2xpY3ksIHNvIHRoZSBzeXN0ZW0gZGVmYXVsdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBrbWVtIGRyaXZlciBiaW5kcyxcbisgKiAobm90IGF0IGRldmljZS1jcmVhdGlvbiB0aW1lLCB3aGljaCB3b3VsZCBmcmVlemUgYSBzdGFsZSBwb2xpY3kpLlxuKyAqL1xuKyNkZWZpbmUgREFYX09OTElORV9ERUZBVUxUXHQoLTEpXG4rXG4gc3RydWN0IGRheF9yZWdpb24gKmFsbG9jX2RheF9yZWdpb24oc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgcmVnaW9uX2lkLFxuIFx0XHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgdGFyZ2V0X25vZGUsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyk7XG5AQCAtMjYsNiArMzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcbiBcdHJlc291cmNlX3NpemVfdCBzaXplO1xuIFx0aW50IGlkO1xuIFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xuK1x0aW50IG9ubGluZV90eXBlO1x0LyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi9cbiB9O1xuIFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmNcbmluZGV4IDNhYjM5Yjc3ODQzZDVlLi4xYTdlYzYyMTIyMTM0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXG4rKysgYi9kcml2ZXJzL2RheC9jeGwuY1xuQEAgLTI3LDYgKzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4rKysgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiArODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbisgKiBAb25saW5lX3R5cGU6IE1NT1BfKiBvbmxpbmUgdHlwZSBmb3IgbWVtb3J5IGhvdHBsdWcsIG9yIERBWF9PTkxJTkVfREVGQVVMVFxuKyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGludCBvbmxpbmVfdHlwZTtcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXG4gXHRpbnQgbnJfcmFuZ2U7XG4gXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqcmFuZ2VzO1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuaW5kZXggYWYyMWY2NmJmODcyYzYuLjJkZTNiYzkyNTE3MjliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbisrKyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG5AQCAtMzcsNiArMzcsNyBAQCBzdGF0aWMgaW50IGRheF9obWVtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJlZ2lvbl9pZGxlID8gMCA6IHJhbmdlX2xlbihcdTAwMjZtcmktXHUwMDNlcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4xOWVmZmUwZGEzZGNlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuKysrIGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSArMzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKmRheF9yYW5nZSA9IFx1MDAyNmRldl9kYXgtXHUwMDNlcmFuZ2VzW2ldO1xuIFx0c3RydWN0IHJhbmdlICpyYW5nZSA9IFx1MDAyNmRheF9yYW5nZS1cdTAwM2VyYW5nZTtcbiBcbi1cdC8qIG1lbW9yeS1ibG9jayBhbGlnbiB0aGUgaG90cGx1ZyByYW5nZSAqL1xuLVx0ci1cdTAwM2VzdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbi1cdHItXHUwMDNlZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XG4rXHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICs0MiwxNSBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VEXHQoLTEpXG4rXG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbitcdGludCBudW1hX25vZGU7XG4rXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheDtcbitcdGludCBzdGF0ZTtcbitcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovXG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlc1tdO1xuIH07XG4gXG5AQCAtNjUsMTUgKzY5LDMzNCBAQCBzdGF0aWMgdm9pZCBrbWVtX3B1dF9tZW1vcnlfdHlwZXModm9pZClcbiBcdG10X3B1dF9tZW1vcnlfdHlwZXMoXHUwMDI2a21lbV9tZW1vcnlfdHlwZXMpO1xuIH1cbiBcbisvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbitzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuK3tcbitcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuK1x0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX0tFUk5FTCB8fFxuK1x0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7XG4rfVxuK1xuKy8qKlxuKyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4rICpcbisgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlXG4rICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXG4rXHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdGludCBpLCByYywgYWRkZWQgPSAwO1xuK1x0bWhwX3QgbWhwX2ZsYWdzO1xuK1xuK1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBpbml0X3Jlc291cmNlcygpIGlzIGJlc3QtZWZmb3J0OiBpZiBhIHJlc2VydmF0aW9uIGNvbmZsaWN0XG4rXHRcdCAqIG9jY3VycyBpdCBrZWVwcyB0aGUgcmFuZ2UgYnV0IGxlYXZlcyByZXNbaV09TlVMTC4gRm9yIGhvdHBsdWdcbitcdFx0ICogb24gcHJvYmUgc3lzdGVtcywgdGhpcyBtZWFucyBrbWVtIHdpbGwgcGFydGlhbGx5IG9ubGluZS5cbitcdFx0ICpcbitcdFx0ICogV2UgaGF2ZSB0byBrZWVwIHRoaXMgYmVoYXZpb3Igbm90IHRvIGJyZWFrIHRob3NlIHN5c3RlbXMuXG4rXHRcdCAqIEZvciB0aG9zZSBzeXN0ZW1zIC0gYXRvbWljaXR5IG9ubHkgYXBwbGllcyB0byB2YWxpZCByYW5nZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4rXHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4rXHRcdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMnZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4rXHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuK1x0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4rXHRcdFx0XHRvbmxpbmVfdHlwZSk7XG4rXG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCIsXG4rXHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBSZWxlYXNlIHRoZSByZXNlcnZhdGlvbiBmb3IgdGhlIHJhbmdlIHRoYXQgZmFpbGVkIHRvXG4rXHRcdFx0ICogYWRkIHNvIGEgbGF0ZXIgaG90cmVtb3ZlIGRvZXMgbm90IHRyeSB0byByZW1vdmUgbWVtb3J5XG4rXHRcdFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNlcmVzW2ldKSB7XG4rXHRcdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoYWRkZWQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0YWRkZWQrKztcbitcdH1cbitcbitcdHJldHVybiBhZGRlZDtcbit9XG4rXG4rLyoqXG4rICogZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMgLSBjcmVhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGRheCBrbWVtXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICpcbisgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxuKyAqXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cbisgKi9cbitzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0ICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXHRpbnQgaSwgcmMsIG1hcHBlZCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4rXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbitcbitcdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2tpcCByYW5nZXMgYWxyZWFkeSBhZGRlZCAqL1xuK1x0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4rXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbitcdFx0XHRcdFx0IGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuK1x0XHRpZiAoIXJlcykge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwiLFxuK1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XG4rXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChtYXBwZWQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHR9XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gcmVzO1xuK1x0XHQvKlxuK1x0XHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxuK1x0XHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcbitcdFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcbitcdFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0cmVzLVx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xuK1x0XHRtYXBwZWQrKztcbitcdH1cbitcdHJldHVybiBtYXBwZWQ7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuKy8qKlxuKyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKlxuKyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb25cbisgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxuKyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLlxuKyAqXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xuK1x0aW50IGksIG5yX3JhbmdlcyA9IDAsIHJjO1xuK1xuK1x0cmFuZ2VzID0ga21hbGxvY19hcnJheShkZXZfZGF4LVx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYW5nZXMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0LyogQ29sbGVjdCB0aGUgcmFuZ2VzIHRoYXQgd2VyZSBhY3R1YWxseSBhZGRlZCBkdXJpbmcgcHJvYmUuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyYW5nZXNbbnJfcmFuZ2VzKytdID0gcmFuZ2U7XG4rXHR9XG4rXG4rXHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xuK1x0aWYgKCFucl9yYW5nZXMpIHtcbitcdFx0a2ZyZWUocmFuZ2VzKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcbitcdGtmcmVlKHJhbmdlcyk7XG4rXHRpZiAocmMpIHtcbitcdFx0LyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiaG90cmVtb3ZlIGZhaWxlZCwgZGV2aWNlIGxlZnQgb25saW5lOiAlZFxcblwiLCByYyk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdC8qIEFsbCByYW5nZXMgcmVtb3ZlZDsgcmVsZWFzZSB0aGUgcmVzZXJ2ZWQgcmVzb3VyY2VzLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4rXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4re1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG4rXG4rLyoqXG4rICogZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMgLSByZW1vdmUgdGhlIGRheCBtZW1vcnkgcmVzb3VyY2VzXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICpcbisgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBkZXZpY2UgdW5iaW5kIG9jY3VycyBiZWZvcmUgbWVtb3J5IGlzIGhvdHJlbW92ZWQsIHdlIGNhbiBuZXZlclxuK1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4rXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxuK1x0ICpcbitcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbitcdCAqL1xuK1x0aWYgKFdBUk4oKChkYXRhLVx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4rXHRcdCBcIkhvdHBsdWcgbWVtb3J5IHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Zilcbit7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4rXG4rXHQvKiBcInVucGx1Z2dlZFwiIGlzIGttZW0tc3BlY2lmaWMgLSB0aGUgcmVzdCBtYXAgdG8gTU1PUF8gKi9cbitcdGlmIChzeXNmc19zdHJlcShidWYsIFwidW5wbHVnZ2VkXCIpKVxuK1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1xuK1x0b25saW5lX3R5cGUgPSBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoYnVmKTtcbitcdC8qIERpc2FsbG93IFwib2ZmbGluZVwiOiBpdCdzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4rXHRpZiAob25saW5lX3R5cGUgPT0gTU1PUF9PRkZMSU5FKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiBvbmxpbmVfdHlwZTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcbitcbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0c3RhdGVfc3RyID0gXCJ1bnBsdWdnZWRcIjtcbitcdGVsc2VcbitcdFx0c3RhdGVfc3RyID0gbWhwX29ubGluZV90eXBlX3RvX3N0cihkYXRhLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBzdGF0ZV9zdHIgPzogXCJ1bmtub3duXCIpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gdG9fZGV2X2RheChkZXYpO1xuK1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBvbmxpbmVfdHlwZTtcbitcdGludCByYztcbitcbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdG9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTtcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgREFYX0tNRU1fVU5QTFVHR0VEKVxuK1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXG4rXHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcbitcdFx0cmV0dXJuIGxlbjtcbitcbitcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcbitcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4rXHRcdHJldHVybiBsZW47XG4rXHR9XG4rXG4rXHQvKiBPbmxpbmluZyBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgdW5wbHVnZ2VkIHN0YXRlLiAqL1xuK1x0aWYgKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0LyogUmUtYWNxdWlyZSByZXNvdXJjZXMgaWYgcHJldmlvdXNseSB1bnBsdWdnZWQsIG90aGVyd2lzZSBuby1vcCAqL1xuK1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0ZGF0YS1cdTAwM2VzdGF0ZSA9IG9ubGluZV90eXBlO1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rc3RhdGljIERFVklDRV9BVFRSX1JXKHN0YXRlKTtcbitcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbitcdGludCBpLCByYztcbiBcdGludCBudW1hX25vZGU7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4gXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcbiBcbiBcdC8qXG5AQCAtMTMzLDY4ICs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4rXHRkYXRhLVx1MDAzZW51bWFfbm9kZSA9IG51bWFfbm9kZTtcbitcdGRhdGEtXHUwMDNlZGV2X2RheCA9IGRldl9kYXg7XG4rXHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCIsXG4tXHRcdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbitcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuIFxuLVx0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4tXHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4tXHRcdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuK1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzb3VyY2VzO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMnZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4tXHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS1cdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcbi1cdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzKTtcbitcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuK1x0b25saW5lX3R5cGUgPSBkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlO1xuK1x0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcbitcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cIixcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XG4tXHRcdFx0a2ZyZWUocmVzKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0aWYgKG1hcHBlZClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xuLVx0XHR9XG4tXHRcdG1hcHBlZCsrO1xuLVx0fVxuK1x0LyogQWx3YXlzIGNyZWF0ZSBibG9ja3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGV2ZW4gaWYgb2ZmbGluZSAqL1xuK1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfaG90cGx1ZztcbitcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuK1x0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4rXHRpZiAocmMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJmYWlsZWQgdG8gY3JlYXRlIHN0YXRlIHN5c2ZzIGVudHJ5XFxuXCIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX3JlcXVlc3RfbWVtOlxuK2Vycl9ob3RwbHVnOlxuK1x0ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rZXJyX3Jlc291cmNlczpcbitcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDYsNjUgKzQ5OSw4NiBAQCBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4tc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbisvKlxuKyAqIFJlbW92ZSB0aGUgZGV2aWNlJ3MgYWRkZWQgcmFuZ2VzIHdpdGggcmVtb3ZlX21lbW9yeSgpLlxuKyAqIFVubGlrZSB0aGUgc3lzZnMgdW5wbHVnIHBhdGggaXQgbmV2ZXIgb2ZmbGluZXMgYW5kIGZhaWxzIGlmIHRoZSBibG9ja3MgYXJlXG4rICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cbisgKlxuKyAqIFJldHVybnMgMCBvbmx5IGlmIGV2ZXJ5IGFkZGVkIHJhbmdlIHdhcyByZW1vdmVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4ge1xuLVx0aW50IGksIHN1Y2Nlc3MgPSAwO1xuLVx0aW50IG5vZGUgPSBkZXZfZGF4LVx1MDAzZXRhcmdldF9ub2RlO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IGksIHJjID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIG9uZSBzaG90IGZvciByZW1vdmluZyBtZW1vcnksIGlmIHNvbWUgbWVtb3J5IGJsb2NrcyB3ZXJlIG5vdFxuLVx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXG4tXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxuLVx0ICogdW5iaW5kIHdpbGwgc3VjY2VlZCBldmVuIGlmIHdlIHJldHVybiBmYWlsdXJlLlxuLVx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbiBcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuLVx0XHRpbnQgcmM7XG4gXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0gfHwgZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzKys7XG4rXHRcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKSkge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXG5cIixcbitcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0XHRyYyA9IC1FQlVTWTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbitcdHJldHVybiByYztcbit9XG4gXG4tXHRcdHJjID0gcmVtb3ZlX21lbW9yeShyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSk7XG4tXHRcdGlmIChyYyA9PSAwKSB7XG4tXHRcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4tXHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuLVx0XHRcdHN1Y2Nlc3MrKztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuK3N0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4re1xuK1x0aW50IG5vZGUgPSBkZXZfZGF4LVx1MDAzZXRhcmdldF9ub2RlO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1x0LypcbitcdCAqIElmIFVOUExVR0dFRDogc3RhdGUgaXMga25vd24gY2xlYW4gYW5kIHJlYm9vdCBjYW4gY2xlYW4gdXAuXG4rXHQgKlxuK1x0ICogSWYgT05MSU5FXyo6IG1lbW9yeSBjYW5ub3QgYmUgcmVtb3ZlZCBoZXJlOiBvZmZsaW5pbmcgZHVyaW5nIGFuXG4rXHQgKiB1bmludGVycnVwdGlibGUgdW5iaW5kIGNhbiBkZWFkbG9jay4gTGVhayB0aGUgcmVzb3VyY2VzIHVudGlsIHJlYm9vdC5cbitcdCAqXG4rXHQgKiBJZiBPRkZMSU5FOiBibG9ja3MgYXJlIGF0dGVtcHRlZCB0byByZW1vdmUgd2l0aCByZW1vdmVfbWVtb3J5KCksXG4rXHQgKiB3aGljaCBuZXZlciBhdHRlbXB0cyBvZmZsaW5pbmcuIEEgYmxvY2sgb25saW5lZCBiZWhpbmQgb3VyIGJhY2tcbitcdCAqIGZhaWxzIC1FQlVTWSBhbmQgaXMgbGVha2VkLlxuK1x0ICovXG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKSB7XG4rXHRcdGRldl93YXJuKGRldiwgXCJIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwiKTtcbitcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuK1x0XHRyZXR1cm47XG4rXHR9IGVsc2UgaWYgKGRhdGEtXHUwMDNlc3RhdGUgPT0gTU1PUF9PRkZMSU5FIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBkYXhfa21lbV9yZW1vdmVfcmFuZ2VzKGRldl9kYXgsIGRhdGEpKSB7XG4gXHRcdGFueV9ob3RyZW1vdmVfZmFpbGVkID0gdHJ1ZTtcbi1cdFx0ZGV2X2VycihkZXYsXG4tXHRcdFx0XCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxcblwiLFxuLVx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdGRldl93YXJuKGRldiwgXCJVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwiKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlKSB7XG4tXHRcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4tXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuLVx0XHRrZnJlZShkYXRhKTtcbi1cdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4tXHRcdC8qXG4tXHRcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxuLVx0XHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuLVx0XHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4tXHRcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcbi1cdFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cbi1cdFx0ICovXG4tXHRcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XG4tXHR9XG4rXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4rXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbitcdGtmcmVlKGRhdGEpO1xuK1x0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4rXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuK1x0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxuK1x0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuK1x0ICogdGlsbCBuZXh0IHJlYm9vdC5cbitcdCAqL1xuK1x0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1xuK1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1xuIFx0LypcbiBcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXG4gXHQgKiBkZXZpY2UtZGF4IHJhbmdlIGFuZCByZXR1cm4gJzAnIHRvIC1cdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcbmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xuKysrIGIvZHJpdmVycy9kYXgvcG1lbS5jXG5AQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGF4X3BtZW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQucGdtYXAgPSBcdTAwMjZwZ21hcCxcbiBcdFx0LnNpemUgPSByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbmluZGV4IDQ2M2RjMDJmNmNmZjA1Li4xNzgzMjk5MDczZTQ3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUlOX01FTU9SWV9CTE9DS19TSVpFICAgICAoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcbiBcbkBAIC0xMDAsNiArMTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pO1xuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXModm9pZCk7XG4gaW50IHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIFxuKy8qKlxuKyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcbisgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxuKyAqXG4rICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2tcbisgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3RcbisgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cbisgKlxuKyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkXG4rICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXHUwMDNjIGFsaWduZWQuZW5kKSBiZWZvcmUgdXNpbmcgaXQuXG4rICovXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcbitcbitcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4rXHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4rXHQvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqL1xuK1x0aWYgKGFsaWduZWQuZW5kIFx1MDAzYz0gYWxpZ25lZC5zdGFydClcbitcdFx0YWxpZ25lZC5zdGFydCA9IGFsaWduZWQuZW5kO1xuK1x0ZWxzZVxuK1x0XHRhbGlnbmVkLmVuZCAtPSAxO1xuK1xuK1x0cmV0dXJuIGFsaWduZWQ7XG4rfVxuK1xuIHN0cnVjdCBtZW1vcnlfbm90aWZ5IHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbmluZGV4IDdjOWQ2NjcyOWM2MDk1Li5kYjEwZDUwZjMwYWUxYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG5AQCAtMTI3LDYgKzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbitjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7XG4gXG4gLyogSWYgbW92YWJsZV9ub2RlIGJvb3Qgb3B0aW9uIHNwZWNpZmllZCAqL1xuIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkO1xuQEAgLTI2Nyw2ICsyNjgsOCBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKTtcbiBcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5AQCAtMjgzLDYgKzI4NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkge31cbitcbitzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbitcdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcylcbit7XG4rXHRyZXR1cm4gLUVCVVNZO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5AQCAtMjk0LDYgKzMwMyw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG4gXHRcdFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XG4raW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuK1x0XHRcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKTtcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbiBcdFx0XHRcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcbkBAIC0zMTYsNiArMzI4LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLFxuIGV4dGVybiBpbnQgYXJjaF9jcmVhdGVfbGluZWFyX21hcHBpbmcoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgYXJjaF9yZW1vdmVfbGluZWFyX21hcHBpbmcodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZCkgeyByZXR1cm4gTU1PUF9PRkZMSU5FOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTIzOSw2ICsyMzksNyBAQCBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpXG4gXG4gXHRyZXR1cm4gbWhwX2RlZmF1bHRfb25saW5lX3R5cGU7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XG4gXG4gdm9pZCBtaHBfc2V0X2RlZmF1bHRfb25saW5lX3R5cGUoZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbkBAIC0xMzM3LDcgKzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXG4gXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxuIHtcbi1cdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xuK1x0ZW51bSBtbW9wICpvbmxpbmVfdHlwZSA9IGFyZztcbitcbitcdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcbiBcdHJldHVybiBkZXZpY2Vfb25saW5lKFx1MDAyNm1lbS1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC0xNDkxLDcgKzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuICAqXG4gICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xuICAqL1xuLWludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4rc3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0XHRcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcbiBcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xuQEAgLTE1ODEsOCArMTU4NSw5IEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4gXHRcdG1lcmdlX3N5c3RlbV9yYW1fcmVzb3VyY2UocmVzKTtcbiBcbiBcdC8qIG9ubGluZSBwYWdlcyBpZiByZXF1ZXN0ZWQgKi9cbi1cdGlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpXG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7XG4rXHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxuK1x0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNm9ubGluZV90eXBlLFxuK1x0XHRcdFx0ICAgb25saW5lX21lbW9yeV9ibG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIGVycm9yOlxuQEAgLTE1OTgsNyArMTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuK2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxuK1x0XHRcdFx0ICAgICBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4rfVxuK1xuKy8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuQEAgLTE2MjYsNyArMTYzNywxNSBAQCBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuIFxuLS8qXG4rLyoqXG4rICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG4rICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuKyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCJcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuKyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKVxuKyAqXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcbiAgKiBtZW1vcnkgaXMgbm90IGV4cG9zZWQgdmlhIHRoZSByYXcgZmlybXdhcmUtcHJvdmlkZWQgbWVtbWFwIGFzIHN5c3RlbVxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcbkBAIC0xNjM0LDYgKzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiAgKlxuICAqIFJlYXNvbnMgd2h5IHRoaXMgbWVtb3J5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgdGhlIGluaXRpYWwgbWVtbWFwIG9mIGFcbiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOlxuKyAqXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcbiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnlcbkBAIC0xNjQ2LDkgKzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBUaGUgcmVzb3VyY2VfbmFtZSAodmlzaWJsZSB2aWEgL3Byb2MvaW9tZW0pIGhhcyB0byBoYXZlIHRoZSBmb3JtYXRcbiAgKiBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4tXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuK1x0XHRlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4gXHRpbnQgcmM7XG5AQCAtMTY1OCw2ICsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICcpJylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4gXHRyZXMgPSByZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2Uoc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUpO1xuQEAgLTE2NjYsNyArMTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbitcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcbiBcbkBAIC0xNjc0LDYgKzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCJrbWVtXCIpO1xuK1xuKy8qKlxuKyAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5XG4rICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuKyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCJcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuKyAqXG4rICogQWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIHRoZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgdHlwZSBzZXQgYnlcbisgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxuKyAqXG4rICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuK1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbit7XG4rXHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG4rXHRcdFx0bWhwX2ZsYWdzLFxuK1x0XHRcdG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XG4gXG4gLypcbkBAIC0yMzc5LDU4ICsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiAgKi9cbiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdHN0cnVjdCByYW5nZSByYW5nZSA9IHtcbitcdFx0LnN0YXJ0ID0gc3RhcnQsXG4rXHRcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxuK1x0fTtcbitcbitcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK1xuKy8qKlxuKyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbisgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzXG4rICpcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcbisgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuXG4rICpcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxuKyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC5cbisgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuXG4rICpcbisgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcbisgKiBiZWVuIHJlbW92ZWQuXG4rICovXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwO1xuIFx0dWludDhfdCAqb25saW5lX3R5cGVzLCAqdG1wO1xuLVx0aW50IHJjO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0aWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHRjb25zdCB1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4rXHRcdGNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4rXG4rXHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbitcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRtYl9jb3VudCArPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdH1cbitcbiBcdC8qXG4tXHQgKiBXZSdsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4rXHQgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcyxcbitcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuK1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4gXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJ2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4gXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbiBcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbitcdC8qIFBoYXNlIDE6IG9mZmxpbmUgZXZlcnkgYmxvY2sgaW4gZXZlcnkgcmFuZ2UuICovXG4gXHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LlxuLVx0ICogVGhpcyBjYW5ub3QgZmFpbCBhcyBpdCBjYW5ub3QgZ2V0IG9ubGluZWQgaW4gdGhlIG1lYW50aW1lLlxuLVx0ICovXG4tXHRpZiAoIXJjKSB7XG4tXHRcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcbitcdFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSxcbitcdFx0XHRcdFx0XHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuIFx0XHRpZiAocmMpXG4tXHRcdFx0cHJfZXJyKFwiJXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZFwiLCBfX2Z1bmNfXywgcmMpO1xuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsXG4tXHQgKiAobmFja2VkIGJ5IGEgbm90aWZpZXIpLCBpdCBiYXJlbHkgZXZlciBoYXBwZW5zLlxuLVx0ICovXG4rXHQvKiBJZiBhbnkgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbGwsIHJvbGxiYWNrIGFueSBjaGFuZ2VzIGFuZCBiYWlsICovXG4gXHRpZiAocmMpIHtcbiBcdFx0dG1wID0gb25saW5lX3R5cGVzO1xuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNnRtcCxcbi1cdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKylcbitcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuK1x0XHRcdFx0XHQgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSwgXHUwMDI2dG1wLFxuK1x0XHRcdFx0XHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuK1xuK1x0LyogUGhhc2UgMjogUmVtb3ZlLiBUaGlzIHNob3VsZCBuZXZlciBmYWlsIGhvbGRpbmcgdGhlIGhvdHBsdWcgbG9jayAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspXG4rXHRcdFdBUk5fT05fT05DRSh0cnlfcmVtb3ZlX21lbW9yeShyYW5nZXNbaV0uc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSkpO1xuK1xuK291dF91bmxvY2s6XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uNTUyODY4MmEzYTkxMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxuIFRBUkdFVFMgKz0gY3B1ZnJlcVxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICs9IGRhbW9uXG4rVEFSR0VUUyArPSBkYXhcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxuIFRBUkdFVFMgKz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbithbGw6XG4rXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXG4rXG4raW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCArMSw0IEBAXG4rQ09ORklHX0RFVl9EQVg9bVxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxuK0NPTkZJR19NRU1PUllfSE9UUExVRz15XG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhiYmFmNjE3OGVkOWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDE5MCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcInN0YXRlXCIgc3lzZnMgYXR0cmlidXRlOlxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9rZXJuZWwgfCBvbmxpbmVfbW92YWJsZVxuKyNcbisjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cbisjXG4rIyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbisjICAgbWVtbWFwPTJHITRHXG4rI1xuKyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4rI1xuKyMgICBuZGN0bCBjcmVhdGUtbmFtZXNwYWNlIC1tIGRldmRheCAtZSBuYW1lc3BhY2UwLjAgLWZcbisjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxuK1xuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rLiBcIiRESVJcIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rXG4rREFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbitcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxuK2dldF9zdGF0ZSgpIHsgY2F0IFwiJEhQXCIgMlx1MDAzZS9kZXYvbnVsbDsgfVxuKyMgc2V0X3N0YXRlIFNUQVRFIC0tIHdyaXRlIGEgc3RhdGUgdG8gdGhlIHN0YXRlIGF0dHJpYnV0ZTsgcmV0dXJucyB0aGVcbisjIHdyaXRlJ3MgZXhpdCBzdGF0dXMgKDAgPSBhY2NlcHRlZCBieSB0aGUga2VybmVsKVxuK3NldF9zdGF0ZSgpIHsgZWNobyBcIiQxXCIgXHUwMDNlIFwiJEhQXCIgMlx1MDAzZS9kZXYvbnVsbDsgfVxuK1xuK2ZpbmRfa21lbV9kYXgoKSB7XG4rXHRsb2NhbCBkIGRydlxuK1x0Zm9yIGQgaW4gXCIkREFYX0JBU0VcIi9kYXgqOyBkb1xuK1x0XHRbIC1lIFwiJGQvc3RhdGVcIiBdIHx8IGNvbnRpbnVlXG4rXHRcdGRydj0kKHJlYWRsaW5rIFwiJGQvZHJpdmVyXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdFx0WyBcIiQoYmFzZW5hbWUgXCIke2RydjotfVwiKVwiID0ga21lbSBdIHx8IGNvbnRpbnVlXG4rXHRcdGJhc2VuYW1lIFwiJGRcIlxuK1x0XHRyZXR1cm4gMFxuK1x0ZG9uZVxuK1x0cmV0dXJuIDFcbit9XG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbitcbitpZiBbIFwiJFVJRFwiICE9IDAgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm11c3QgYmUgcnVuIGFzIHJvb3RcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4rREFYPSQoZmluZF9rbWVtX2RheClcbitpZiBbIC16IFwiJERBWFwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rZmlcbitIUD0kREFYX0JBU0UvJERBWC9zdGF0ZVxuK09SSUc9JChnZXRfc3RhdGUpXG4rXG4rIyBBIGZhaWx1cmUgdG8gcmVhY2ggdGhlIGJhc2VsaW5lIGlzIGVudmlyb25tZW50YWwgKG1lbW9yeSBpbiB1c2UpLCBub3QgYW5cbisjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIHx8IFsgXCIkKGdldF9zdGF0ZSlcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIiREQVg6IGNhbm5vdCByZWFjaCAndW5wbHVnZ2VkJyBiYXNlbGluZSAobWVtb3J5IGluIHVzZT8pXCJcbitcdFsgLW4gXCIkT1JJR1wiIF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcIiRPUklHXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuK1xuK0RSVj0vc3lzL2J1cy9kYXgvZHJpdmVycy9rbWVtXG4rQU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuK1xuK2t0YXBfcHJpbnRfbXNnIFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwiXG4ra3RhcF9zZXRfcGxhbiA4XG4rXG4rIyBBIHB1YmxpYyAoTl9NRU1PUlkpIGttZW0gbm9kZSBvbmxpbmVkIGludG8gYSBrZXJuZWwgem9uZSAob25saW5lL29ubGluZV9rZXJuZWwpXG4rIyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZFxuKyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlclxuKyMgc3VjY2Vzc2Z1bGx5IG9ubGluZXMgb25saW5lX21vdmFibGUsIHRoZSBvbmUgbW9kZSB0aGF0IGlzIHJlbGlhYmx5IHVucGx1Z2dhYmxlLlxuK1xuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbittdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgXCIkbXRfb25saW5lXCIgLWd0IFwiJG10X3VucGx1Z2dlZFwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmVfbW92YWJsZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZVwiXG4rZmlcbitcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnRcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbisjIEEgZGlmZmVyZW50IG9ubGluZSB0eXBlIGlzIHJlamVjdGVkIHdpdGhvdXQgYW4gaW50ZXJ2ZW5pbmcgdW5wbHVnLiAgVGhlIHdyaXRlXG4rIyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XG4raWYgWyBcIiRyY1wiICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3Qgb25saW5lX2tlcm5lbCB3aXRob3V0IGludGVydmVuaW5nIHVucGx1ZyAobm8ga2VybmVsLXpvbmUgb25saW5lKVwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmVfbW92YWJsZS1cdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK210PSQobWVtdG90YWxfa2IpXG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSB1bnBsdWdnZWQgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1sdCBcIiRtdF9vbmxpbmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiBNZW1Ub3RhbCAkbXRfb25saW5lIC1cdTAwM2UgJG10IGtCXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9vbmxpbmUgLVx1MDAzZSAkbXRcIlxuK2ZpXG4rXG4rYmVmb3JlPSQoZ2V0X3N0YXRlKVxuK3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBcIiRiZWZvcmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInJlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZ1wiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJpbnZhbGlkIHN0YXRlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbisjIFRoZSBvbmxpbmVfbW92YWJsZSAtXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXG4rIyByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyBhIGxhdGVyIHVucGx1ZyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlXG4rIyBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGVhY2ggaXRlcmF0aW9uIHJlYWxseSBhZGRzIGFuZCBmcmVlcyBtZW1vcnkuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxuK2N5Y2xlX29rPTE7IGZhaWxfaT0wOyBvbj0wOyBvZmY9MFxuK2ZvciBpIGluIDEgMiAzOyBkb1xuK1x0aWYgISBzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbitcdG9uPSQobWVtdG90YWxfa2IpXG4rXHRpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbitcdG9mZj0kKG1lbXRvdGFsX2tiKVxuK1x0aWYgWyBcIiRvblwiIC1sZSBcIiRtdF91bnBsdWdnZWRcIiBdIHx8IFsgXCIkb2ZmXCIgLWdlIFwiJG9uXCIgXTsgdGhlblxuK1x0XHRjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrXG4rXHRmaVxuK2RvbmVcbitpZiBbIFwiJGN5Y2xlX29rXCIgPSAxIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm9ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZWdyZXNzZWQgYXQgaXRlcmF0aW9uICRmYWlsX2kgKG9uPSRvbiBvZmY9JG9mZiBiYXNlbGluZT0kbXRfdW5wbHVnZ2VkKVwiXG4rZmlcbitcbisjIGNoYW5nZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgcG9saWN5IHdoaWxlIHRoZSBkZXZpY2UgaXMgdW5ib3VuZCwgYW5kIHNob3dcbisjIHRoZSBuZXcgc3lzdGVtIGRlZmF1bHQgcG9saWN5IGlzIHV0aWxpemVkIGFjcm9zcyBiaW5kaW5ncy5cbitzZXRfc3RhdGUgdW5wbHVnZ2VkXG4raWYgWyAtdyBcIiRBT0JcIiBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi91bmJpbmRcIiBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi9iaW5kXCIgXTsgdGhlblxuK1x0b3JpZ19hb2I9JChjYXQgXCIkQU9CXCIpXG4rXHRlY2hvIFwiJERBWFwiIFx1MDAzZSBcIiREUlYvdW5iaW5kXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBvZmZsaW5lIFx1MDAzZSBcIiRBT0JcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIFwiJERBWFwiIFx1MDAzZSBcIiREUlYvYmluZFwiIDJcdTAwM2UvZGV2L251bGxcbitcdHNsZWVwIDFcbitcdHN0PSQoZ2V0X3N0YXRlKVxuK1x0ZWNobyBcIiRvcmlnX2FvYlwiIFx1MDAzZSBcIiRBT0JcIiAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5XG4rXHRpZiBbIFwiJHN0XCIgPSBvZmZsaW5lIF07IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cdTAwM2Ugc3RhdGU9b2ZmbGluZVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiYmluZC10aW1lIHBvbGljeSBub3QgaG9ub3JlZDogc3RhdGU9JHN0IChleHBlY3RlZCBvZmZsaW5lKVwiXG4rXHRmaVxuK1x0c2V0X3N0YXRlIHVucGx1Z2dlZCAyXHUwMDNlL2Rldi9udWxsXG4rZWxzZVxuK1x0a3RhcF90ZXN0X3NraXAgXCJhdXRvX29ubGluZV9ibG9ja3Mgb3IgZHJpdmVyIGJpbmQvdW5iaW5kIG5vdCB3cml0YWJsZVwiXG4rZmlcbitcbitbIC1uIFwiJE9SSUdcIiBdIFx1MDAyNlx1MDAyNiBzZXRfc3RhdGUgXCIkT1JJR1wiXG4rXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xuKyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXRcbisjIHdpdGggYSBzaW5nbGUgXCJzdHVjayBvbmxpbmVcIiB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXG4rIyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsXG4rIyBsZWF2aW5nIHRoZSByZXN0b3JlZCBzdGF0ZSBhYm92ZSB1bnRvdWNoZWQgb3RoZXJ3aXNlLiAgb25saW5lX21vdmFibGUgb25seTpcbisjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLlxuK2lmIFsgLXcgXCIkRFJWL3VuYmluZFwiIF07IHRoZW5cbitcdHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZVxuK2ZpXG4raWYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyAtdyBcIiREUlYvdW5iaW5kXCIgXTsgdGhlblxuK1x0bXRfb249JChtZW10b3RhbF9rYilcbitcdGRtZXNnIC1DIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi91bmJpbmRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRtdF9hZnRlcj0kKG1lbXRvdGFsX2tiKVxuK1x0IyBUaGUgbGVha2VkIFwiU3lzdGVtIFJBTSAoa21lbSlcIiByZWdpb25zIHN0YXkgaW4gdGhlIGlvbWVtIHRyZWU7IHJlYWRpbmdcbitcdCMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLlxuK1x0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cbitcdGNhdCAvcHJvYy9pb21lbSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4rXHRzcGxhdD0kKGRtZXNnIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1jaUUgXCJLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3RcIilcbitcdGlmIFsgXCIkc3BsYXRcIiA9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdF9hZnRlclwiIC1nZSBcIiRtdF9vblwiIF07IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVx1MDAzZSAkbXRfYWZ0ZXIga0IpXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCJ1bmJpbmQgd2hpbGUgb25saW5lIHJlZ3Jlc3NlZDogc3BsYXQ9JHNwbGF0IE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQlwiXG4rXHRmaVxuK2Vsc2VcbitcdGt0YXBfdGVzdF9za2lwIFwiY291bGQgbm90IG9ubGluZSBkZXZpY2UgZm9yIHVuYmluZC13aGlsZS1vbmxpbmUgdGVzdFwiXG4rZmlcbitcbitrdGFwX2ZpbmlzaGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcbkBAIC0wLDAgKzEgQEBcbit0aW1lb3V0PTkwXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyODo1OC40NDE1Nzc2NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzYwNDgwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEhvdHBsdWcgUGF0Y2ggZm9yIERBWCBLbWVtIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGhvdHBsdWcgYW5kIERBWCBrbWVtIGRyaXZlcnMuIFRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYCwgZm9yIERBWCBrbWVtIGRldmljZXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgc3lzZnMgYXR0cmlidXRlcyBhcmUgb2Z0ZW4gZW50cnkgcG9pbnRzIGZvciBzeXprYWxsZXIuIFRoZXJlJ3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zLiBJIHNlZSBpdCBhbHNvIGFkZHMgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCB0byBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYW5kIHR3ZWFrcyBgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgdG8gYWNjZXB0IGBvbmxpbmVfdHlwZWAuIE15IGluaXRpYWwgdGhvdWdodCBpczogKklzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBDYW4gc3l6a2FsbGVyIHJlYWNoIGl0PypcblxuTXkgZmlyc3Qgc3RlcCBpcyBmaWd1cmluZyBvdXQgaG93IHN5emthbGxlciBjYW4gYWNjZXNzIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZSBjcnVjaWFsIGJpdCBoZXJlIGlzIHRoZSBzeXNmcyBhdHRyaWJ1dGUsIGBzdGF0ZWAuIFN5emthbGxlciBuZWVkcyB0byBrbm93IHRoZSBwYXRoOiBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYC4gIFRoZSBjb3JlIGRyaXZlciwgYWNjb3JkaW5nIHRvIHRoZSBwYXRjaCwgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gU28gdGhlIHF1ZXN0aW9uIGlzLCAqZG9lcyBzeXprYWxsZXIgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZCB0byBldmVuICpzZWUqIHRoaXM/KlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19ERVZfREFYX0tNRU1gLCBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgYW5kIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAgYXJlIGFsbCBlbmFibGVkIGluIHN5emthbGxlci5cblxuTm93LCBsZXQncyBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgc3lzZnMgYXR0cmlidXRlLiBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYHN0YXRlX3N0b3JlYCBhbmQgYHN0YXRlX3Nob3dgIC0gdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgdmFsdWUsIHJlc3BlY3RpdmVseS4gQWxzbywgSSdsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBkYXhfa21lbV9kb19ob3RwbHVnYCBhbmQgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgc2luY2UgdGhvc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgaG90cGx1Zy9ob3RyZW1vdmUgbG9naWMgd2lsbCBiZSBoYXBwZW5pbmcuIEkga25vdyB0aGUgcGF0Y2ggd2lsbCBiZSBtYWtpbmcgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBkcml2ZXIgY29kZS5cblxuT2theSwgSSdsbCBkaWcgaW50byBgZHJpdmVycy9kYXgva21lbS5jYCBhbmQgc3RhcnQgd2l0aCBgc3RhdGVfc3RvcmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjA2LjIwMjA2MTIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2MzI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTMyNz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDMtXFxuZHJpdmVycy9kYXgva21lbS5jOjM0NDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjA2LjI2MjcyOTc5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA2MzE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvZGF4L2ttZW0uY2AgZmlsZSwgZnJvbSBhIGtlcm5lbCBkcml2ZXIgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gZHJpdmVycy9kYXgva21lbS5jKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gTXkgZm9jdXMgaXMgcGlucG9pbnRpbmcgYW55IGFkZGl0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlLCBhcyB0aGVzZSB3aWxsIGxpa2VseSBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBldm9sdXRpb24gb2YgdGhlIERBWCAoRGlyZWN0IEFjY2VzcykgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSBjb2RlIHRoYXQgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gcGVyc2lzdGVudCBtZW1vcnkgb3Igb3RoZXIgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgdG8gZXhpc3RpbmcgYWxnb3JpdGhtcywgb3IgZXZlbiBvcHRpbWl6YXRpb25zIG1hZGUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHkgd2l0aGluIHRoZSBEQVggc3Vic3lzdGVtLiBJJ2xsIGJlIGNoZWNraW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBtZXRob2RzLCBlc3BlY2lhbGx5IHRob3NlIGNvbmNlcm5pbmcgZGlyZWN0IGFjY2VzcyB0byBtZW1vcnkuIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9yIG90aGVyIG1lbW9yeS1tYXBwaW5nIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBkcml2ZXIgcmVzaWRlcywgYW5kIHRoZSBjaGFuZ2VzIGhlcmUgd2lsbCBwYWludCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBEQVggbGF5ZXIgaXMgZXZvbHZpbmcgdG8gdXRpbGl6ZSBwZXJzaXN0ZW50IG1lbW9yeSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTowOS45NTMzNjU1NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNTU2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKmRheF9rbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTI5PXN0YXRpYyBib29sIGFueV9ob3RyZW1vdmVfZmFpbGVkO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMC1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzE6c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzIte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTY2PXN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTcyLS8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzo3MzpzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbmRyaXZlcnMvZGF4L2ttZW0uYy03NC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjkxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTE2Ni0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6MTY3OnN0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTE2OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMjMtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjIyNDpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzEtI2Vsc2VcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjcyOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI4NS0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6Mjg2OnN0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yODctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTMxMS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzEyOnN0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMTMte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTM4OT1zdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zOTAtXFxuZHJpdmVycy9kYXgva21lbS5jOjM5MTpzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzkyLXtcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDgtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjUwOTpzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTUxMC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTUzMi1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTMzOnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuZHJpdmVycy9kYXgva21lbS5jLTUzNC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc1LSNlbHNlXFxuZHJpdmVycy9kYXgva21lbS5jOjU3NjpzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01Nzcte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU5Mi1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTkzOnN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgZGV2aWNlX2RheF9rbWVtX2RyaXZlciA9IHtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTk0LVxcdC5wcm9iZSA9IGRldl9kYXhfa21lbV9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01OTgtXFxuZHJpdmVycy9kYXgva21lbS5jOjU5OTpzdGF0aWMgaW50IF9faW5pdCBkYXhfa21lbV9pbml0KHZvaWQpXFxuZHJpdmVycy9kYXgva21lbS5jLTYwMC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNjE5LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo2MjA6c3RhdGljIHZvaWQgX19leGl0IGRheF9rbWVtX2V4aXQodm9pZClcXG5kcml2ZXJzL2RheC9rbWVtLmMtNjIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTAuMjQzOTMxMTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NDAzNzQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTWVtb3J5IEhvdHBsdWcgYW5kIERBWCBrbWVtIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50cm9kdWNpbmcgc29tZSBuZXcgZmVhdHVyZXMgdG8gdGhlIGtlcm5lbDsgbWFpbmx5IGZvY3VzZWQgYXJvdW5kIG1lbW9yeSBob3RwbHVnIGFuZCB0aGUgREFYIGttZW0gZHJpdmVyLiBJIGNhbiBzZWUgdGhhdCBpdCdzIGFkZGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIG9mIGNvdXJzZSwgdGhlIGNyaXRpY2FsIGhvdHBsdWcgYW5kIGhvdHJlbW92ZSBsb2dpYy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgYHN0YXRlX3N0b3JlYCwgYHN0YXRlX3Nob3dgLCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGFuZCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLiBBbmQgb2YgY291cnNlLCB0aGUgY2VudHJhbCBob3RwbHVnIGZ1bmN0aW9uLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgaXMgY3J1Y2lhbCBoZXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmFuZ2VzIGFyZSBhY3R1YWxseSBvZmZsaW5lJ2QgYW5kIHJlbW92ZWQsIGZvciB3aGljaCB0aGUgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTQuNDg3OTcyMzEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzc0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz0yNDMwPWludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzYtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM3OlxcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcXHUwMDI2cmFuZ2UsIDEpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzOC19XFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDM5PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDQxLS8qKlxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ0MjogKiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyAtIG9mZmxpbmUgYW5kIHJlbW92ZSBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDQzLSAqIEByYW5nZXM6IGFycmF5IG9mIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzIHRvIG9mZmxpbmUgYW5kIHJlbW92ZVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU3LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ1ODppbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjEtfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjUyMjpFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNTIzLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOToxNC41NDczNTQyMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzM1MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyB0aGUgZHluYW1pYyBhZGRpdGlvbiBvZiBtZW1vcnkuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgY29yZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gbWVtb3J5IGhvdHBsdWcsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgZHJpdmVycyBhbmQsIGltcG9ydGFudGx5LCBhIG1hbmFnZWQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBvcmNoZXN0cmF0ZXMgdGhlIGFkZGl0aW9uIGZyb20gYSBoaWdoLWxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXItbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgbG9ja3MgaW52b2x2ZWQuIFdlIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgZGV2aWNlIGRyaXZlcnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWVtb3J5IGhvdHBsdWcgcHJvY2VzcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lhbCBoYW5kbGluZyBtZWNoYW5pc21zLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIG5ldyBtZW1vcnkgcmVnaW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtJ3MgcGh5c2ljYWwgYWRkcmVzcyBtYXAsIHBhZ2UgdGFibGVzIGFyZSB1cGRhdGVkIChvciBjcmVhdGVkIGlmIGl0J3MgYSBjb21wbGV0ZWx5IG5ldyBub2RlKSwgYW5kIGFueSBuZWNlc3NhcnkgZHJpdmVyLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIG5vdGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTguMTY2MDk0MjA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY2MDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTE2Mzg9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDAtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjQxOiAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi0gKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjcyOmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzMtXFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzAyLX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDM6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFxcXCJrbWVtXFxcIik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzE1LSAqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzE2OiAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTctICpcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTcyMD1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzIyLXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MjM6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyNC1cXHRcXHRcXHRtaHBfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjE4LjIyNTc2MjQwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE4NTg2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEQVgga21lbSBhbmQgTWVtb3J5IEhvdHBsdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgZmFpcmx5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGhvdHBsdWcgYW5kIHRoZSBEQVgga21lbSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugd2UncmUgZ2V0dGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIGNydWNpYWxseSwgdGhlIGhvdHBsdWcvaG90cmVtb3ZlIGxvZ2ljIGZvciBEQVgga21lbSBkZXZpY2VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24gYXJlIGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGFzIHdlbGwgYXMgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXkgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxhY2UuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVl9EQVhfS01FTWAsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCBhcmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5LiBPYnZpb3VzbHksIGBDT05GSUdfREVWX0RBWF9LTUVNYCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgc28gdGhhdCdzIGEgZ2l2ZW4uIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBqdWRnaW5nIGJ5IHRoZSBwcmVzZW5jZSBvZiBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAgZm9yIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIG9idmlvdXNseS4gV2Ugd2lsbCBuZWVkIGBDT05GSUdfREVWX0RBWGAgYXMgd2VsbC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL2RheC9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IG5hbWVzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxOTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MjMuNTQ0MzU0NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjY3NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGF4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctNy1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjg6Y29uZmlnIERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIkRldmljZSBEQVg6IGRpcmVjdCBhY2Nlc3MgbWFwcGluZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTE4LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlBNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjMwOmNvbmZpZyBERVZfREFYX0hNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJITUVNIERBWDogZGlyZWN0IGFjY2VzcyB0byAnc3BlY2lmaWMgcHVycG9zZScgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy00OS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjUwOmNvbmZpZyBERVZfREFYX0NYTFxcbmRyaXZlcnMvZGF4L0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIkNYTCBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gQ1hMIFJBTSByZWdpb25zXFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy02My1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjY0OmNvbmZpZyBERVZfREFYX0hNRU1fREVWSUNFU1xcbmRyaXZlcnMvZGF4L0tjb25maWctNjUtXFx0ZGVwZW5kcyBvbiBERVZfREFYX0hNRU0gXFx1MDAyNlxcdTAwMjYgREFYXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6Njg6Y29uZmlnIERFVl9EQVhfRlNERVZcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MjMuNjA0NjI4Njg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzYyMDI5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gUmlnaHQgbm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIGZ1bmN0aW9uYWxpdGllcyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIEkgd2lsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgbW0vS2NvbmZpZ2AgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCwgdG8gc3RhcnQgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjI2Ljc0MDgzNTExOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxODM1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOToyNi44MDEwMzYwODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1Mjg2NTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk1lbW9yeSBIb3RyZW1vdmUgLSBDb25zaWRlcmF0aW9ucyBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgdmFyaW91cyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzIHByb3Blcmx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgbW9kZXJuIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUuLi4gdGhlIGNvcmUgaXNzdWUgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbW92YWwgb2YgbWVtb3J5IGZyb20gYSBydW5uaW5nIHN5c3RlbS4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIGRlYWxsb2NhdGlvbjsgaXQncyBhIGR5bmFtaWMgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSByZXNvdXJjZSBhdmFpbGFibGUuXG5cbkZpcnN0IG9mZiwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiB3ZSdyZSBhdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBhIGJhcmUtbWV0YWwgc2V0dXAsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIGNvbnRleHQsIHJpZ2h0PyBUaGUgdmlydHVhbGl6YXRpb24gbGF5ZXIgYWRkcyBhbm90aGVyIGxheWVyIG9mIGluZGlyZWN0aW9uLCBhbmQgaXRzIGltcGxpY2F0aW9ucyBvbiBob3QtcmVtb3ZlIGJlaGF2aW91ciBjYW4gYmUgbm9uLXRyaXZpYWwsIGVzcGVjaWFsbHkgd2l0aCB0ZWNobmlxdWVzIGxpa2UgYmFsbG9vbmluZywgb3IgbWVtb3J5IG92ZXJjb21taXRtZW50LiBXaGF0IGFyZSB0aGUgaHlwZXJ2aXNvcuKAmXMgZ3VhcmFudGVlcyBhcm91bmQgdHJhbnNwYXJlbnQgbWVtb3J5IHJlbW92YWwsIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbj9cblxuVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiB0aGUgT1MgaXRzZWxmLiBIb3cgd2VsbCBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBob3QtcmVtb3ZlIGV2ZW50PyBEb2VzIGl0IHByb3Blcmx5IHRyYWNrIGFuZCBmcmVlIHBhZ2VzLCBhbmQgZG9lcyBpdCBkbyBzbyBpbiBhIGNvbnNpc3RlbnQgYW5kIHNhZmUgbWFubmVyPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW55IGluY29uc2lzdGVuY2llcyBpbiB0aGUgcGFnZSB0YWJsZSBtYXBwaW5ncywgYW5kIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uLiBXZSdyZSBhc3N1bWluZyB0aGUga2VybmVsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCB0aGlzLCBidXQgY29uZmlndXJhdGlvbiBjYW4gdmFyeSB3aWRlbHkuIElmIHdlIGFyZSBpbiBhIHN5c3RlbSB3aXRoIG1hbnkgTlVNQSBub2Rlcywgd2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3QgdG8gdGhlIGxvY2FsaXR5IG9mIG1lbW9yeSBvcGVyYXRpb25zLlxuXG5MZXQncyBub3QgZm9yZ2V0IHRoZSBhcHBsaWNhdGlvbnMgcnVubmluZy4gSG93IGFyZSB0aGV5IGluZm9ybWVkIChpZiBhdCBhbGwpIG9mIHRoZSBzaHJpbmtpbmcgbWVtb3J5IHNwYWNlPyBJZiB3ZSdyZSByZW1vdmluZyBtZW1vcnkgdGhhdCdzIGFjdGl2ZWx5IGluIHVzZSwgb3IgY29udGFpbmluZyBkYXRhLCB0aGVuIHdlJ3JlIGluIHRyb3VibGUuIEhvdyBkbyB3ZSBlbnN1cmUgYXBwbGljYXRpb25zIGFyZW4ndCBhY2Nlc3Npbmcgb3IgZXhwZWN0aW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFib3V0IHRvIGJlIHVubWFwcGVkPyBBcmUgdGhleSB1dGlsaXppbmcgc2hhcmVkIG1lbW9yeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgaGFuZGxlIGl0PyBXaGF0IGFib3V0IG1lbW9yeS1tYXBwZWQgZmlsZXMgYW5kIGNhY2hlcz8gRGF0YSBsb3NzIGlzIHRoZSB1bHRpbWF0ZSBjb25jZXJuLiBUaGluayBvZiB0aGUgdHJhbnNhY3Rpb25hbCBhcHBsaWNhdGlvbnMsIGZvciBleGFtcGxlLiBXZSBuZWVkIGF0b21pY2l0eSBoZXJlLlxuXG5UaGlua2luZyBvZiB0aGlzLCB3aGF0IGFyZSB0aGUgYmVzdCBwcmFjdGljZXMgZm9yIGd1YXJhbnRlZWluZyBhIHNhZmUgbWVtb3J5IGhvdC1yZW1vdmU/IFdoYXQgYXJlIHRoZSBtZWNoYW5pc21zIGF2YWlsYWJsZT8gRG8gd2UgbmVlZCB0byBpbnRyb2R1Y2UgZXhwbGljaXQgbWVtb3J5IGRyYWluaW5nIHByb2NlZHVyZXM/IFdoYXTigJlzIHRoZSBpbXBsaWNhdGlvbiBmb3IgdGhlIHJlbGlhYmlsaXR5IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IGFib3V0IGl0cyBwZXJmb3JtYW5jZT8gSXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBoaXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBob3QtcmVtb3ZlIHByb2NlZHVyZSBpdHNlbGY/IEhvdyBhcmUgd2UgYWNjb3VudGluZyBmb3IgbG9jayBjb250ZW50aW9uP1xuXG5BbmQgZmluYWxseSwgZGlhZ25vc3RpY3MuIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaG90LXJlbW92ZSBwcm9jZXNzIOKAkyBhIGtlcm5lbCBwYW5pYywgYSBjb3JydXB0ZWQgYXBwbGljYXRpb24sIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBmYWlsdXJlIOKAkyBob3cgZG8gd2UgZGVidWcgaXQ/IFdoYXQga2luZCBvZiBsb2dnaW5nIGFuZCB0cmFjaW5nIGlzIGF2YWlsYWJsZT8gV2hhdCB0b29scyBhcmUgd2UgZ29pbmcgdG8gdXNlIHRvIGV4YW1pbmUgdGhpcyBiZWhhdmlvcj9cblxuU28sIHllYWguLi4gYE1FTU9SWV9IT1RSRU1PVkVgLiBJdCdzIG5vdCBhIHNpbXBsZSBzd2l0Y2g7IGl04oCZcyBhIHdob2xlIGVjb3N5c3RlbSBvZiBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgYSByaWdvcm91cyBhbmQgc3lzdGVtYXRpYyBhcHByb2FjaCB0byBhZGRyZXNzIHRoaXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTozMS42NTM5MDY3MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODM5Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01ODk9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy01OTAtXFxubW0vS2NvbmZpZzo1OTE6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG5tbS9LY29uZmlnLTU5Mi1cXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjMxLjcxNzc1NTA1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIyNjk0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFRhcmdldHMqKlxuXG5Pa2F5LCB5ZXMsIEkgc2VlIHRoZSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcy4gRnJvbSB0aGUgbG9vayBvZiBpdCwgd2UncmUgaW50ZXJlc3RlZCBpbjogYHN0YXRlX3N0b3JlYCwgYHN0YXRlX3Nob3dgLCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuXG5cbkFoYSwgd2FpdCBhIG1pbnV0ZS4gSSByZW1lbWJlciB0aGF0IGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBsb2NhdGVkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gU28gdGhhdCdzIHRoZSBzY29wZSBoZXJlLiBTbyBsZXQncyByZWZpbmUgdGhpcyBhbmQganVzdCB3b3JrIHdpdGggdGhvc2Ugc3BlY2lmaWMgaW5zdGFuY2VzIGluIHRoZSBkYXgga21lbSBkcml2ZXI6IGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLlxuXG5Ib3dldmVyLCBiZWZvcmUgd2UgcHJvY2VlZCB0b28gZmFyLCB0aG9zZSBuYW1lcyBgc3RhdGVfc3RvcmVgIGFuZCBgc3RhdGVfc2hvd2AgYXJlIHF1aXRlIGdlbmVyaWMuIFN5emthbGxlciBjb3VsZCBlYXNpbHkgcGljayB1cCBvbiBzaW1pbGFyIG5hbWVzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHVuaXF1ZSBpbiB0aGUgY29kZSBiYXNlLiBXZSBjYW4ndCBiZSB0b28gY2FyZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MzYuNzQwNDUzNTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY0ODMzMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jPTQyPXN0YXRpYyBzc2l6ZV90IGVlaF9wZV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTUtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfc3lzZnMuYzo1NjpzdGF0aWMgc3NpemVfdCBlZWhfcGVfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmM9MjYzPXN0YXRpYyBpbnQgYWdlbnRfdGhyZWFkX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jLTI3NS1cXHRcXHQgKiB0byBhdm9pZCBtaXhpbmcgdGhlIHR3byB3aXRoIHN1Y2ggYSBjb25maWd1cmF0aW9uIChvclxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmM6Mjc2OlxcdFxcdCAqIGVsc2UgZml4IGl0IGJ5IGFkZGluZyBhIG11dGV4IHRvIHN0YXRlX3N0b3JlIHRoYXQgd2UgY2FuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYy0yNzctXFx0XFx0ICogc3luY2hyb25pemUgd2l0aCkuXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9Mzk0PXN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vZmZsaW5lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDMtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQwNDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDUtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYz00MTM9c3RhdGljIHNzaXplX3QgY3B1aWRsZV9zdGF0ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDI2LVxcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jOjQyNzpzdGF0aWMgc3NpemVfdCBjcHVpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQyOC1cXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3RhdGVfc3lzZnNfb3BzID0ge1xcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQ0Ni1cXHQuc2hvdyA9IGNwdWlkbGVfc3RhdGVfc2hvdyxcXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0NDc6XFx0LnN0b3JlID0gY3B1aWRsZV9zdGF0ZV9zdG9yZSxcXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYy00NDgtfTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jPTE5PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMwLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jOjMxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmMtMzItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM0My1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzQ0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9kYXgva21lbS5jLTM0NS1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmM9MjIxOT1zdGF0aWMgdm9pZCBleGVjbGlzdHNfY2FwdHVyZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0MS1cXHQvKiBQdWJsaXNoIHRoZSBlcnJvciBzdGF0ZSwgYW5kIGFubm91bmNlIGl0IHRvIHRoZSB3b3JsZCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmM6MjI0MjpcXHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGNhcC1cXHUwMDNlZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0My1cXHRpOTE1X2dwdV9jb3JlZHVtcF9wdXQoY2FwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyMTQ9aTkxNV9ncHVfY29yZWR1bXAoc3RydWN0IGludGVsX2d0ICpndCwgaW50ZWxfZW5naW5lX21hc2tfdCBlbmdpbmVfbWFzaywgdTMyIGR1bXBfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jLTIyMjgtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYzoyMjI5OnZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgaTkxNV9ncHVfY29yZWR1bXAgKmVycm9yKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyNjA9dm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGludGVsX2d0ICpndCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjI3MC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jOjIyNzE6XFx0aTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShlcnJvcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjcyLVxcdGk5MTVfZ3B1X2NvcmVkdW1wX3B1dChlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oPTMwMz12b2lkIGk5MTVfdm1hX2NhcHR1cmVfZmluaXNoKHN0cnVjdCBpbnRlbF9ndF9jb3JlZHVtcCAqZ3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oLTMwNS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjMwNjp2b2lkIGk5MTVfZXJyb3Jfc3RhdGVfc3RvcmUoc3RydWN0IGk5MTVfZ3B1X2NvcmVkdW1wICplcnJvcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zMDctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oPTM5MT1zdGF0aWMgaW5saW5lIHZvaWRcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjM5MjppOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zOTMte1xcbi0tXFxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00MC1cXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYz01MTM9c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dyZXlidXMvaW50ZXJmYWNlLmMtNTIzLVxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYzo1MjQ6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYy01MjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYz0zND1zdGF0aWMgc3NpemVfdCBwb3dlcl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ1LVxcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jOjQ2OnN0YXRpYyBzc2l6ZV90IHBvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9od21vbi9lbWMxNDAzLmMtNDctXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jPTkzNz1zdGF0aWMgc3NpemVfdCBzZXFfY3Vycl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYy05NjEtXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jOjk2MjpzdGF0aWMgc3NpemVfdCBzZXFfY3Vycl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM9MTQxND1zdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmMtMTQyNS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM6MTQyNjpzdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtNHgtc3lzZnMuYy0xNDI3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jPTM1OT1zdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9pMmMvbXV4ZXMvaTJjLW11eC1wY2E5NTR4LmMtMzY5LVxcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jOjM3MDpzdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2kyYy9tdXhlcy9pMmMtbXV4LXBjYTk1NHguYy0zNzEtXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYz0yNzI9c3RhdGljIGVudW0gaWlvX2V2ZW50X2luZm8gaWlvX2V2X2F0dHJfaW5mbyhzdHJ1Y3QgaWlvX2Rldl9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtMjc2LVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jOjI3NzpzdGF0aWMgc3NpemVfdCBpaW9fZXZfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTI3OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM9Mzg1PXN0YXRpYyBpbnQgaWlvX2RldmljZV9hZGRfZXZlbnQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldixcXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxNi1cXHRcXHRcXHRzaG93ID0gaWlvX2V2X3N0YXRlX3Nob3c7XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM6NDE3OlxcdFxcdFxcdHN0b3JlID0gaWlvX2V2X3N0YXRlX3N0b3JlO1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxOC1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYz0xMTk9c3RhdGljIHNzaXplX3QgdHJhbnNpZW50X3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMjktXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYzoxMzA6c3RhdGljIHNzaXplX3QgdHJhbnNpZW50X3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTEzMS1cXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM9MTUxPXN0YXRpYyBERVZJQ0VfQVRUUihkdXJhdGlvbiwgMDY0NCwgdHJhbnNpZW50X2R1cmF0aW9uX3Nob3csXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xNTItXFx0XFx0ICAgdHJhbnNpZW50X2R1cmF0aW9uX3N0b3JlKTtcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jOjE1MzpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA2NDQsIHRyYW5zaWVudF9zdGF0ZV9zaG93LCB0cmFuc2llbnRfc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmMtMTU0LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTMwNzk9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL21kL21kLmM6MzA4MDpzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zMDgxLXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zMjQ4PXN0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSByZGV2X3N0YXRlID1cXG5kcml2ZXJzL21kL21kLmM6MzI0OTpfX0FUVFJfUFJFQUxMT0Moc3RhdGUsIFNfSVJVR098U19JV1VTUiwgc3RhdGVfc2hvdywgc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbWQvbWQuYy0zMjUwLVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM3MzU9cmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTM3NTEtXFxuZHJpdmVycy9tZC9tZC5jOjM3NTI6XFx0aWYgKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSkge1xcbmRyaXZlcnMvbWQvbWQuYy0zNzUzLVxcdFxcdGlmIChjbWRfbWF0Y2gocGFnZSwgXFxcInJlbW92ZVxcXCIpKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQ2NDc9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL21kL21kLmM6NDY0ODphcnJheV9zdGF0ZV9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9tZC9tZC5jLTQ2NDkte1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQ3Nzg9c3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9hcnJheV9zdGF0ZSA9XFxuZHJpdmVycy9tZC9tZC5jOjQ3Nzk6X19BVFRSX1BSRUFMTE9DKGFycmF5X3N0YXRlLCBTX0lSVUdPfFNfSVdVU1IsIGFycmF5X3N0YXRlX3Nob3csIGFycmF5X3N0YXRlX3N0b3JlKTtcXG5kcml2ZXJzL21kL21kLmMtNDc4MC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz02MTEzPW1kX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjEyNS1cXG5kcml2ZXJzL21kL21kLmM6NjEyNjpcXHRpZiAoZW50cnktXFx1MDAzZXN0b3JlID09IGFycmF5X3N0YXRlX3N0b3JlIFxcdTAwMjZcXHUwMDI2IGNtZF9tYXRjaChwYWdlLCBcXFwiY2xlYXJcXFwiKSlcXG5kcml2ZXJzL21kL21kLmMtNjEyNy1cXHRcXHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtvYmosIGF0dHIpO1xcbi0tXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jPTU2OD1zdGF0aWMgaXJxcmV0dXJuX3QgYmgxNzcwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYyOC1cXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM6NjI5OnN0YXRpYyBzc2l6ZV90IGJoMTc3MF9wb3dlcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYzMC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYz0xMTM2PXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGJoMTc3MF9wb3dlcl9zdGF0ZV9zaG93LFxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzoxMTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBiaDE3NzBfcG93ZXJfc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYy0xMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmM9MTU9c3RhdGljIHNzaXplX3QgYnRfY29leF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jOjMwOnN0YXRpYyBzc2l6ZV90IGJ0X2NvZXhfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jLTMxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTE4ODE9c3RhdGljIHNzaXplX3QgbnZtZXRfYW5hX2dyb3VwX2FuYV9zdGF0ZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzoxODk2OnN0YXRpYyBzc2l6ZV90IG52bWV0X2FuYV9ncm91cF9hbmFfc3RhdGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk3LVxcdFxcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA0Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA1NS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNTY6c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNTctXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jPTExMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2JkX3JnYl9tb2RlX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYy0xMTE3LS8qIFRVRiBMYXB0b3AgS2V5Ym9hcmQgUkdCIFN0YXRlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYzoxMTE4OnN0YXRpYyBzc2l6ZV90IGtiZF9yZ2Jfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMtMTExOS1cXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktYmFzZS5jPTI5NT1zdGF0aWMgc3NpemVfdCBsaWdodGluZ19jb250cm9sX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMDgtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYzozMDk6c3RhdGljIHNzaXplX3QgbGlnaHRpbmdfY29udHJvbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jPTU1OT1zdGF0aWMgc3NpemVfdCBmbl9sb2NrX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jLTU3MS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9odWF3ZWktd21pLmM6NTcyOnN0YXRpYyBzc2l6ZV90IGZuX2xvY2tfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2h1YXdlaS13bWkuYy01NzMtXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jPTEzNzM9c3RhdGljIHNzaXplX3Qgd2xzd19lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzctXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxMzc4OnN0YXRpYyBzc2l6ZV90IHdsc3dfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzktXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTM5Nj1zdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDAwLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTQwMTpzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTQxNj1zdGF0aWMgc3NpemVfdCB3d2FuX2VtdWxzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jOjE0MjE6c3RhdGljIHNzaXplX3Qgd3dhbl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMi1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xNDM2PXN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTE0NDAtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDQxOnN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQ0Mi1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYz00Mj1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTUyLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jOjUzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmMtNTQtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jPTE3OD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE4OC0vKiBDaGFuZ2UgcmVtb3RlIHByb2Nlc3NvciBzdGF0ZSB2aWEgc3lzZnMgKi9cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jOjE4OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2Nfc3lzZnMuYy0xOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODA0PXN0YXRpYyBzc2l6ZV90IGRhc2RfcmVzZXJ2YXRpb25fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODI0LVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjE4MjU6c3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMTgyNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODQ3PXN0YXRpYyBERVZJQ0VfQVRUUihsYXN0X2tub3duX3Jlc2VydmF0aW9uX3N0YXRlLCAwNjQ0LFxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjE4NDg6XFx0XFx0ICAgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93LCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODQ5LVxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTMzMD1scGZjX29hc19zdXBwb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMTM0MS0vKipcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzoxMzQyOiAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnRcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0xMzQzLSAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0Llxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTM1Mz1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjEzNTQ6bHBmY19saW5rX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMTM1NS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTMxMjA9c3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdyxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozMTIxOlxcdFxcdGxwZmNfbGlua19zdGF0ZV9zdG9yZSk7XFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzEyMi1zdGF0aWMgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQwNj1scGZjX29hc19sdW5fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzQxNS0vKipcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDE2OiAqIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSAtIFN0b3JlIHRoZSBzdGF0ZSAoZW5hYmxlZCBvciBkaXNhYmxlZClcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zNDE3LSAqXFx0XFx0XFx0ICAgIG9mIHdoZXRoZXIgbHVucyB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWRcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTM0Mjk9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDMwOmxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MzEtXFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQ1Mj1zdGF0aWMgREVWSUNFX0FUVFIobHBmY194bGFuZV9sdW5fc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjM0NTM6XFx0XFx0ICAgbHBmY19vYXNfbHVuX3N0YXRlX3Nob3csIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSk7XFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzQ1NC1cXG4tLVxcbmRyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jPTMzNDQ9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYzozMzQ1OmZ3X2NyYXNoX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmNkZXYsXFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMtMzM0Ni1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXlyYi5jPTE3NjA9c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvc2NzaS9teXJiLmMtMTgwNC1cXG5kcml2ZXJzL3Njc2kvbXlyYi5jOjE4MDU6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zY3NpL215cmIuYy0xODA2LVxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvc2NzaS9teXJzLmM9OTM0PXN0YXRpYyBzc2l6ZV90IHJhaWRfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk2OC1cXG5kcml2ZXJzL3Njc2kvbXlycy5jOjk2OTpzdGF0aWMgc3NpemVfdCByYWlkX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk3MC1cXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jPTI0ND12b2lkIGFwYl9jdHJsX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjQ4LVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jLTI1MC1cXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM9MjgxPWFyY2hlX3BsYXRmb3JtX3Bvd2Vyb2ZmX3NlcShzdHJ1Y3QgYXJjaGVfcGxhdGZvcm1fZHJ2ZGF0YSAqYXJjaGVfcGRhdGEpXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jOjMwNjpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYy0zMDctXFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jPTI5NjA9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3RnX3B0X2dwX2FsdWFfYWNjZXNzX3N0YXRlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYy0yOTY2LVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmM6Mjk2NzpzdGF0aWMgc3NpemVfdCB0YXJnZXRfdGdfcHRfZ3BfYWx1YV9hY2Nlc3Nfc3RhdGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMtMjk2OC1cXHRcXHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jPTUzMT1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmM6NTMyOmN1cl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmMtNTMzLVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0zNjY9c3RhdGljIERFVklDRV9BVFRSKGN1cnJlbnRfdnR5LFxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0zNjgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzozNjk6c3RhdGljIHNzaXplX3QgaHZjc192dGVybV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0zNzAtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz00MTk9c3RhdGljIERFVklDRV9BVFRSKHZ0ZXJtX3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUixcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjQyMDpcXHRcXHRodmNzX3Z0ZXJtX3N0YXRlX3Nob3csIGh2Y3NfdnRlcm1fc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtNDIxLVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMzA1PXN0YXRpYyBEUklWRVJfQVRUUl9STyhpcnFfaGFuZGxlcnMpO1xcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtMTMwNi1cXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEzMDc6c3RhdGljIHNzaXplX3QgaXJxX2hhbmRsZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydixcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEzMDgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzY0PWludCBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zNjktICpcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozNzA6ICogUGFpcmVkIHdpdGggaW5ldF9za19zdGF0ZV9zdG9yZSgpLiBVc2VkIGluIHBsYWNlcyB3ZSBkb24ndCBob2xkIHNvY2tldCBsb2NrOlxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3MS0gKiB0Y3BfZGlhZ19nZXRfaW5mbygpLCB0Y3BfZ2V0X2luZm8oKSwgdGNwX3BvbGwoKSwgZ2V0X3RjcDRfc29jaygpIC4uLlxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzczPXN0YXRpYyBpbmxpbmUgaW50IGluZXRfc2tfc3RhdGVfbG9hZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zNzktLyoqXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6MzgwOiAqIGluZXRfc2tfc3RhdGVfc3RvcmUgLSB1cGRhdGUgc2stXFx1MDAzZXNrX3N0YXRlXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzgxLSAqIEBzazogc29ja2V0IHBvaW50ZXJcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM4Ni0gKi9cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozODc6dm9pZCBpbmV0X3NrX3N0YXRlX3N0b3JlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ld3N0YXRlKTtcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zODgtXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mj1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxua2VybmVsL3Bvd2VyL21haW4uYy03OTgtXFxua2VybmVsL3Bvd2VyL21haW4uYzo3OTk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMC1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTAtXFxubW0vZGFtb24vc3lzZnMuYzoyMzkxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTE1OD1zdGF0aWMgaW50IHNldF9zdHBfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy0xNjMtXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjE2NDpzdGF0aWMgc3NpemVfdCBzdHBfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZCxcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtMTY1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTEzNTY9RVhQT1JUX1NZTUJPTChpbmV0X3NrX3NldF9zdGF0ZSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTEzNTctXFxubmV0L2lwdjQvYWZfaW5ldC5jOjEzNTg6dm9pZCBpbmV0X3NrX3N0YXRlX3N0b3JlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ld3N0YXRlKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzU5LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTMyMT1pbnQgaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM0MC1cXHQgKi9cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzNDE6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgVENQX0xJU1RFTik7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzQyLVxcdGVyciA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VnZXRfcG9ydChzaywgaW5ldC1cXHUwMDNlaW5ldF9udW0pO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9Mjk2MD12b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMDI2LVxcdCAqL1xcbm5ldC9pcHY0L3RjcC5jOjMwMjc6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgc3RhdGUpO1xcbm5ldC9pcHY0L3RjcC5jLTMwMjgtfVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDQtXFx0ICogdW5kZXIgdGhlIG1zayBzb2NrZXQgbG9jay4gRm9yIHRoZSBtb21lbnQsIHRoYXQgd2lsbCBub3QgYnJpbmdcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTA1OlxcdCAqIGFueXRoaW5nIG1vcmUgdGhhbiBvbmx5IGNhbGxpbmcgaW5ldF9za19zdGF0ZV9zdG9yZSgpLCBiZWNhdXNlIHRoZVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDYtXFx0ICogb2xkIHN0YXR1cyBpcyBrbm93biAoVENQX0NMT1NFKS5cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA3LVxcdCAqL1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo5MDg6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShuZXdzaywgVENQX0xJU1RFTik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwOS1cXHRsb2NrX3NvY2soc3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxNjk9dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTg4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxODk6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgc3RhdGUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxOTAtfVxcbi0tXFxubmV0L3Jma2lsbC9jb3JlLmM9ODA4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9yZmtpbGwvY29yZS5jLTgxOS1cXG5uZXQvcmZraWxsL2NvcmUuYzo4MjA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjM4LjkwNTI5NzcyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA0MDA1ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIHBhdHRlcm4gaGVyZSB3aXRoIHRoZSBgc3RhdGVfc3RvcmVgIGFuZCBpdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBEQVggS01FTSBob3RwbHVnLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYW5kIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbGwgaGFuZGxlZCBncmFjZWZ1bGx5LlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYCBieSBkaXJlY3RseSBjaGVja2luZyBgZHJpdmVycy9kYXgva21lbS5jYC4gWWVzLCBpdCdzIHRoZXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQXJlIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIHN1ZmZpY2llbnQ/IEkga25vdyBgREVWX0RBWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZSwgc28gbGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLiBcblxuSGFuZyBvbiwgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBkb2Vzbid0IHF1aXRlIG1ha2Ugc2Vuc2UuIEFjY29yZGluZyB0byB0aGUgS2NvbmZpZywgYERFVl9EQVhfS01FTWAgZG9lcyBkZXBlbmQgb24gYERFVl9EQVhgIGJ1dCBhbHNvIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gSXMgdGhlIEtjb25maWcgY29ycmVjdD8gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjQ0LjIwOTMwNzg5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2ODg5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVl9EQVhfS01FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L0tjb25maWc9Njg9Y29uZmlnIERFVl9EQVhfRlNERVZcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzItXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3Mzpjb25maWcgREVWX0RBWF9LTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiS01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTo0NC4yNzEwMDQ2NDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTk1OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcy4gV2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgXCJpdFwiIGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5P1xuXG5cbiIsIklucHV0VG9rZW5zIjozNTkyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6NDguNjAwOTY3NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuICA3MTpcXHRcXHRkZWZhdWx0IERFVl9EQVhcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIERFVl9EQVhfS01FTVxcbiAgNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG4gIDc1OlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxcbiAgODA6XFx0XFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xcbiAgODE6XFx0XFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxcbiAgODI6XFx0XFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xcbiAgODM6XFx0XFx0ICAoSE1FTSkgbWFya2VkIFxcXCJyZXNlcnZlZFxcXCIgYnkgcGxhdGZvcm0gZmlybXdhcmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxcbiAgODY6XFx0XFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiAgODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjQ4LjYwMTA1OTE2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIyNzY4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgREVWX0RBWF9LTUVNIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYERFVl9EQVhfS01FTWAgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpdCBpbmhlcmVudGx5IHJlbGllcyBvbiBgREVWX0RBWGAsIHRoYXQgbXVjaCBpcyBjbGVhciwgYW5kIGFsc28gYE1FTU9SWV9IT1RQTFVHYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiBEQVguIE5vdywgaGVyZSdzIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBNRU1PUllfSE9UUkVNT1ZFYCBpc24ndCAqc3RyaWN0bHkqIGVzc2VudGlhbCBmb3IganVzdCBlbmFibGluZyBgREVWX0RBWF9LTUVNYCBpdHNlbGYuIEJ1dCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3aXRob3V0IGl0LCB0aGUgKmhvdHJlbW92ZSogZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4gU28sIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIGNoZWNrIGlmIGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSByZXNpZGVzLCBzbyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6NTIuNzIzODMwMDk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE4NjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTE2Nz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTIxMS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MjEyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTMtLyoqXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MjcyPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI3Ni19XFxuZHJpdmVycy9kYXgva21lbS5jOjI3NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc4LVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTM5MT1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjUwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTAyLS8qXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9NTc2PXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTkwLX1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTkxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYy01OTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjUyLjc4MzAyNDU0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU3Mzk4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggYW5kIE1lbW9yeSBIb3RwbHVnL0hvdHJlbW92ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgaG90LXJlbW92YWwsIGNvbmZpcm1lZCBieSBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBUaGUgY29yZSBjb25maWdzIGludm9sdmVkIGFyZSBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgbmVlZCBgREVWX0RBWF9QTUVNYCwgYERFVl9EQVhfSE1FTWAsIG9yIGV2ZW4gYERFVl9EQVhfQ1hMYCBmb3IgREFYIGRldmljZSBjcmVhdGlvbi4gVGhlIHRlc3Qgc2NyaXB0LCB3aXRoIGl0cyBgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mYCBjb21tYW5kLCBzdWdnZXN0cyBhdCBsZWFzdCBgREVWX0RBWF9QTUVNYCBvciBwb3NzaWJseSBgTkRfQlRUYCBhcmUgaW4gcGxheS4gSG93ZXZlciwgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBEQVggZGV2aWNlcywgcGVyaGFwcyBieSBzeXNmcywgYXNzdW1pbmcgdGhlIHVuZGVybHlpbmcgZHJpdmVycyBhcmUgcHJlc2VudC4gVG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgSSdsbCBpbmNsdWRlIGBERVZfREFYX1BNRU1gIGFuZCBgREVWX0RBWF9ITUVNYCBmb3Igbm93LiBVbHRpbWF0ZWx5LCBgREVWX0RBWGAgYW5kIGBERVZfREFYX0tNRU1gIGFyZSB0aGUgZXNzZW50aWFscywgYWxvbmcgd2l0aCB0aGUgaG90cGx1Zy9ob3RyZW1vdmUgb3B0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ3ZlIGdvdCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGlzIHJlYWNoYWJsZS4gQW5kLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5YC4gTGlrZXdpc2UsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBgZGF4X2ttZW1fZG9faG90cGx1Z2AgYW5kIGBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlIG5vdCBtaXNzZWQgYW55dGhpbmcsIEknbGwgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlcmUgYXJlIGBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHJgLCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYW5kIGBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZWAuIEknbGwgZm9jdXMgb24gYG1ocF9vbmxpbmVfdHlwZV90b19zdHJgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDk4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjAwLjQ0MDQyNTU5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzU5MDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NDk9RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTAtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjUxOmNvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Mi17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTYtfVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1NzpFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTgtXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTMzOC1cXHRlbHNlXFxuZHJpdmVycy9kYXgva21lbS5jOjMzOTpcXHRcXHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXFx1MDAzZXN0YXRlKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTEyOT1leHRlcm4gaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoxMzA6Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjAyLjU1ODAyNjM3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0OTY5NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZWZsZWN0aW5nIG9uIFJlY2VudCBBZGRpdGlvbnMgYW5kIGEgUG90ZW50aWFsIEFyZWEgZm9yIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSd2ZSBnb3QgdGhlIG5ldyBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgZnVuY3Rpb24gaW50ZWdyYXRlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgZXhjZWxsZW50LCBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCBpcyBub3cgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RlcCBmb3J3YXJkLlxuXG5Ob3csIHdpdGggdGhvc2UgZnVuZGFtZW50YWwgcGllY2VzIGluIHBsYWNlLCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWxsIGFib3V0LiBUaGVyZSdzIGEgZGVjZW50IGNoYW5jZSBpdCBoYXMgYSByZWxhdGlvbnNoaXAgdG8gdGhlIHByaW9yIGZ1bmN0aW9ucywgaW4gc29tZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6MzA6MDUuNjEyOTk4NDUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxMTUzNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9MzE9c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzY6XFx0KnIgPSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShyYW5nZSk7XFxuZHJpdmVycy9kYXgva21lbS5jLTM3LVxcdGlmIChyLVxcdTAwM2VzdGFydCBcXHUwMDNlPSByLVxcdTAwM2VlbmQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5Lmg9MTAyPWludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTA0LS8qKlxcbmluY2x1ZGUvbGludXgvbWVtb3J5Lmg6MTA1OiAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTEwNi0gKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnkuaC0xMTQtICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnkuaDoxMTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjA3LjUwNDE1ODQ5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE0NzUzOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UndmUgY29uZmlybWVkIHRoZSBpbmNsdXNpb24gb2YgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBob3RwbHVnIGltcGxlbWVudGF0aW9uLiBJJ3ZlIGlkZW50aWZpZWQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2UgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgIGFyZSBhbGwgc3RhdGljLiBUaGF0J3MgcmVsZXZhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlLiBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBtaHBfb25saW5lX3R5cGVfdG9fc3RyYCBhcmUgZ2xvYmFsLCBpbXBseWluZyB0aGV5J3JlIGFjY2Vzc2libGUgYWNyb3NzIHRoZSBzeXN0ZW0uXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBBaCwgYW5kIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgaXMgZXhhY3RseSBgQ09ORklHX0RFVl9EQVhfS01FTWAuIFllcywgaXQgaXMuXG5cblRoZSBsb2dpYyBzZWVtcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgc2V0dGluZyB1cCBhIGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBob3RwbHVnIHN0YXRlIGZvciBEQVgga21lbSBkZXZpY2VzLiBJdCdzIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGNvZGUgdG8gaGFuZGxlIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2Vzc2VzIGZvciBtZW1vcnkgcmFuZ2VzLCB1c2luZyB0aG9zZSBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQncyBhbGwgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIE9rYXksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5ODQsIk91dHB1dFRva2VucyI6MjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjE1LjgxODkxNjczOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTg2OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCIsXG4gICAgXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc1wiLFxuICAgIFwiX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkXCIsXG4gICAgXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwibWhwX29ubGluZV90eXBlX3RvX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsk6g2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 04:16:53 +0000 UTC FinishedAt: 2026-07-01 04:30:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "ef315e77-1437-483f-bad9-cf29c3edcd11" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dax_kmem_do_hotplug", "dax_kmem_do_hotremove", "dax_kmem_init_resources", "dax_kmem_cleanup_resources", "dax_kmem_parse_state", "offline_and_remove_memory_ranges", "__add_memory_driver_managed", "mhp_online_type_to_str" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9pbml0X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSBvZiBEQVgga21lbSBkZXZpY2VzLiBJdCBhZGRzIGxvZ2ljIHRvIGhhbmRsZSBob3RwbHVnZ2luZyBhbmQgaG90cmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgaW5jbHVkaW5nIG5ldyBjb3JlIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9ucyBsaWtlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA0OjI4OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuaW5kZXggYjM0MjY2YmZhZTQ5YWUuLjJkY2FkMWU5ZGFkMGQ4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbkBAIC0xNTEsMyAmIzQzOzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXG4gXHRcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxuIFx0XHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAmIzM5O3RydWUmIzM5OyBvciAmIzM5O2ZvcmNlJiMzOTsuXCYjMzQ7XG4mIzQzO1xuJiM0MztXaGF0Olx0XHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcbiYjNDM7RGF0ZTpcdFx0SnVuZSwgMjAyNlxuJiM0MztLZXJuZWxWZXJzaW9uOlx0djYuMjFcbiYjNDM7Q29udGFjdDpcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cbiYjNDM7XHRcdEFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuXG4mIzQzO1x0XHRPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy5cbiYjNDM7XG4mIzQzO1x0XHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXG4mIzQzO1x0XHR0aGUgcGVyLWJsb2NrIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGUgQUJJOjpcbiYjNDM7XG4mIzQzO1x0XHQgIFwmIzM0O3VucGx1Z2dlZFwmIzM0OzogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lXCYjMzQ7OiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXG4mIzQzO1x0XHQgIFwmIzM0O29ubGluZV9rZXJuZWxcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9OT1JNQUxcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lX21vdmFibGVcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXG4mIzQzO1xuJiM0MztcdFx0XCYjMzQ7b2ZmbGluZVwmIzM0OyAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcbiYjNDM7XHRcdHJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGVcbiYjNDM7XHRcdGF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgXCYjMzQ7b2ZmbGluZVwmIzM0Oy4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLFxuJiM0MztcdFx0YXMgaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuXG4mIzQzO1xuJiM0MztcdFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgc3RhdGUsIHNvIGFcbiYjNDM7XHRcdGRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvIFwmIzM0O3VucGx1Z2dlZFwmIzM0OyBiZWZvcmUgaXQgY2FuIGJlIG9ubGluZWRcbiYjNDM7XHRcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uNWVlYWQzMzQ2ZjFlMzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyAwIHx8IG9ubGluZV90eXBlIFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbiBcbiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldilcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXG5pbmRleCBkOGFlYTVmZTBhZjJjNS4uOGQ4M2I1NTc3YThlYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG5AQCAtMzk0LDYgJiM0MzszOTUsNyBAQCBzdGF0aWMgc3NpemVfdCBjcmVhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQuc2l6ZSA9IDAsXG4gXHRcdFx0LmlkID0gLTEsXG4gXHRcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IF9fZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbiBcbkBAIC0xNTI3LDYgJiM0MzsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcbiBcdGlkYV9pbml0KFx1MDAyNmRldl9kYXgtXHUwMDNlaWRhKTtcbiBcbiBcdGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcbiYjNDM7XHRkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cdTAwM2VvbmxpbmVfdHlwZTtcbiBcbiBcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xuIFx0ZGV2LVx1MDAzZWRldnQgPSBpbm9kZS1cdTAwM2VpX3JkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLjNiYzc2YmMwYTE0NTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvYnVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2lmbmRlZiBfX0RBWF9CVVNfSF9fXG4gI2RlZmluZSBfX0RBWF9CVVNfSF9fXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5AQCAtMTYsNiAmIzQzOzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKVxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcbiBcbiYjNDM7LypcbiYjNDM7ICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcbiYjNDM7ICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXG4mIzQzOyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFx0KC0xKVxuJiM0MztcbiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsXG4gXHRcdHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLFxuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcbkBAIC0yNiw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcbiBcdHJlc291cmNlX3NpemVfdCBzaXplO1xuIFx0aW50IGlkO1xuIFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXG4gfTtcbiBcbiBzdHJ1Y3QgZGV2X2RheCAqZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXG5pbmRleCAzYWIzOWI3Nzg0M2Q1ZS4uMWE3ZWM2MjEyMjEzNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9jeGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvY3hsLmNcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmFuZ2VfbGVuKFx1MDAyNmN4bHJfZGF4LVx1MDAzZWhwYV9yYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gdHJ1ZSxcbiYjNDM7XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cbiBzdHJ1Y3QgZGF4X2RldmljZTtcbkBAIC03OSw2ICYjNDM7ODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbiYjNDM7ICogQG9ubGluZV90eXBlOiBNTU9QXyogb25saW5lIHR5cGUgZm9yIG1lbW9yeSBob3RwbHVnLCBvciBEQVhfT05MSU5FX0RFRkFVTFRcbiYjNDM7ICpcdFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcbiAgKiBAbnJfcmFuZ2U6IHNpemUgb2YgQHJhbmdlc1xuICAqIEByYW5nZXM6IHJhbmdlIHR1cGxlcyBvZiBtZW1vcnkgdXNlZFxuICAqL1xuQEAgLTk1LDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XHQvKiBlbnVtIG1tb3AsIG9yIERBWF9PTkxJTkVfREVGQVVMVCBzZW50aW5lbCAqL1xuIFx0aW50IG5yX3JhbmdlO1xuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4xOWVmZmUwZGEzZGNlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZXJhbmdlc1tpXTtcbiBcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcdTAwMjZkYXhfcmFuZ2UtXHUwMDNlcmFuZ2U7XG4gXG4tXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cbi1cdHItXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4tXHRyLVx1MDAzZWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbiYjNDM7XG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbiYjNDM7XHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuJiM0MztcdGludCBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucyAqL1xuIFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcbiB9O1xuIFxuQEAgLTY1LDE1ICYjNDM7NjksMzM0IEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuJiM0MztcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcbiYjNDM7XHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgYWRkZWQgPSAwO1xuJiM0MztcdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogaW5pdF9yZXNvdXJjZXMoKSBpcyBiZXN0LWVmZm9ydDogaWYgYSByZXNlcnZhdGlvbiBjb25mbGljdFxuJiM0MztcdFx0ICogb2NjdXJzIGl0IGtlZXBzIHRoZSByYW5nZSBidXQgbGVhdmVzIHJlc1tpXT1OVUxMLiBGb3IgaG90cGx1Z1xuJiM0MztcdFx0ICogb24gcHJvYmUgc3lzdGVtcywgdGhpcyBtZWFucyBrbWVtIHdpbGwgcGFydGlhbGx5IG9ubGluZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBXZSBoYXZlIHRvIGtlZXAgdGhpcyBiZWhhdmlvciBub3QgdG8gYnJlYWsgdGhvc2Ugc3lzdGVtcy5cbiYjNDM7XHRcdCAqIEZvciB0aG9zZSBzeXN0ZW1zIC0gYXRvbWljaXR5IG9ubHkgYXBwbGllcyB0byB2YWxpZCByYW5nZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcbiYjNDM7XHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4mIzQzO1x0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbiYjNDM7XHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4mIzQzO1x0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0b25saW5lX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBSZWxlYXNlIHRoZSByZXNlcnZhdGlvbiBmb3IgdGhlIHJhbmdlIHRoYXQgZmFpbGVkIHRvXG4mIzQzO1x0XHRcdCAqIGFkZCBzbyBhIGxhdGVyIGhvdHJlbW92ZSBkb2VzIG5vdCB0cnkgdG8gcmVtb3ZlIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSkge1xuJiM0MztcdFx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4mIzQzO1x0XHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoYWRkZWQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFkZGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZGRlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbVxuJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4mIzQzOyAqXG4mIzQzOyAqIEluaXRpYWxpemVzIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgREFYXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNraXAgcmFuZ2VzIGFscmVhZHkgYWRkZWQgKi9cbiYjNDM7XHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cbiYjNDM7XHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbiYjNDM7XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXJlc19uYW1lKTtcbiYjNDM7XHRcdGlmICghcmVzKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4mIzQzO1x0XHRcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChtYXBwZWQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxuJiM0MztcdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4mIzQzO1x0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuJiM0MztcdFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4mIzQzO1x0XHRtYXBwZWQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWFwcGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBPZmZsaW5lcyBhbmQgcmVtb3ZlcyBldmVyeSBjdXJyZW50bHktYWRkZWQgcmFuZ2UgaW4gdGhlIGRldl9kYXggcmVnaW9uXG4mIzQzOyAqIGF0b21pY2FsbHk6IGVpdGhlciBhbGwgcmFuZ2VzIGFyZSBvZmZsaW5lZCBhbmQgcmVtb3ZlZCwgb3Igbm9uZSBhcmUgYW5kXG4mIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJhbmdlICpyYW5nZXM7XG4mIzQzO1x0aW50IGksIG5yX3JhbmdlcyA9IDAsIHJjO1xuJiM0MztcbiYjNDM7XHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0LyogQ29sbGVjdCB0aGUgcmFuZ2VzIHRoYXQgd2VyZSBhY3R1YWxseSBhZGRlZCBkdXJpbmcgcHJvYmUuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmFuZ2VzW25yX3JhbmdlcyYjNDM7JiM0MztdID0gcmFuZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xuJiM0MztcdGlmICghbnJfcmFuZ2VzKSB7XG4mIzQzO1x0XHRrZnJlZShyYW5nZXMpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcbiYjNDM7XHRrZnJlZShyYW5nZXMpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0LyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtob3RyZW1vdmUgZmFpbGVkLCBkZXZpY2UgbGVmdCBvbmxpbmU6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXNcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXG4mIzQzO1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4mIzQzO1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTigoKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4mIzQzO1x0XHQgXCYjMzQ7SG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9ubGluZV90eXBlO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xuJiM0MztcdGlmIChzeXNmc19zdHJlcShidWYsIFwmIzM0O3VucGx1Z2dlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xuJiM0MztcdC8qIERpc2FsbG93IFwmIzM0O29mZmxpbmVcJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4mIzQzO1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbiYjNDM7XHRcdHN0YXRlX3N0ciA9IFwmIzM0O3VucGx1Z2dlZFwmIzM0OztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBzdGF0ZV9zdHIgPzogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IG9ubGluZV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkge1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4mIzQzO1x0XHRyZXR1cm4gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xuJiM0MztcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcbiBcdGludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFO1xuIFxuIFx0LypcbkBAIC0xMzMsNjggJiM0Mzs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4mIzQzO1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4mIzQzO1x0ZGF0YS1cdTAwM2VkZXZfZGF4ID0gZGV2X2RheDtcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbi1cdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbi1cdFx0ICovXG4tXHRcdHJjID0gYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xuJiM0MztcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuJiM0MztcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKVxuJiM0MztcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UocmVzKTtcbi1cdFx0XHRrZnJlZShyZXMpO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0bWFwcGVkJiM0MzsmIzQzOztcbi1cdH1cbiYjNDM7XHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ob3RwbHVnO1xuJiM0MztcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuJiM0MztcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVxdWVzdF9tZW06XG4mIzQzO2Vycl9ob3RwbHVnOlxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztlcnJfcmVzb3VyY2VzOlxuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDYsNjUgJiM0Mzs0OTksODYgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4mIzQzOy8qXG4mIzQzOyAqIFJlbW92ZSB0aGUgZGV2aWNlJiMzOTtzIGFkZGVkIHJhbmdlcyB3aXRoIHJlbW92ZV9tZW1vcnkoKS5cbiYjNDM7ICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmVcbiYjNDM7ICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4tXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbi1cdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1x0aW50IGksIHJjID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIG9uZSBzaG90IGZvciByZW1vdmluZyBtZW1vcnksIGlmIHNvbWUgbWVtb3J5IGJsb2NrcyB3ZXJlIG5vdFxuLVx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXG4tXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxuLVx0ICogdW5iaW5kIHdpbGwgc3VjY2VlZCBldmVuIGlmIHdlIHJldHVybiBmYWlsdXJlLlxuLVx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXHRcdGludCByYztcbiBcbi1cdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4tXHRcdGlmIChyYylcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0gfHwgZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKSkge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4mIzQzO1x0XHRcdHJjID0gLUVCVVNZO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiBcbi1cdFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKTtcbi1cdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0c3VjY2VzcyYjNDM7JiM0Mzs7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiYjNDM7c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiYjNDM7e1xuJiM0MztcdGludCBub2RlID0gZGV2X2RheC1cdTAwM2V0YXJnZXRfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBVTlBMVUdHRUQ6IHN0YXRlIGlzIGtub3duIGNsZWFuIGFuZCByZWJvb3QgY2FuIGNsZWFuIHVwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgT05MSU5FXyo6IG1lbW9yeSBjYW5ub3QgYmUgcmVtb3ZlZCBoZXJlOiBvZmZsaW5pbmcgZHVyaW5nIGFuXG4mIzQzO1x0ICogdW5pbnRlcnJ1cHRpYmxlIHVuYmluZCBjYW4gZGVhZGxvY2suIExlYWsgdGhlIHJlc291cmNlcyB1bnRpbCByZWJvb3QuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBPRkZMSU5FOiBibG9ja3MgYXJlIGF0dGVtcHRlZCB0byByZW1vdmUgd2l0aCByZW1vdmVfbWVtb3J5KCksXG4mIzQzO1x0ICogd2hpY2ggbmV2ZXIgYXR0ZW1wdHMgb2ZmbGluaW5nLiBBIGJsb2NrIG9ubGluZWQgYmVoaW5kIG91ciBiYWNrXG4mIzQzO1x0ICogZmFpbHMgLUVCVVNZIGFuZCBpcyBsZWFrZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoZGV2X2RheCwgZGF0YSkpIHtcbiBcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuLVx0XHRkZXZfZXJyKGRldixcbi1cdFx0XHRcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxcblwmIzM0Oyxcbi1cdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAoc3VjY2VzcyBcdTAwM2U9IGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UpIHtcbi1cdFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbi1cdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGtmcmVlKGRhdGEpO1xuLVx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbi1cdFx0Lypcbi1cdFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4tXHRcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4tXHRcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbi1cdFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuLVx0XHQgKiB0aWxsIG5leHQgcmVib290LlxuLVx0XHQgKi9cbi1cdFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbi1cdH1cbiYjNDM7XHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVx1MDAzZW1naWQpO1xuJiM0MztcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuJiM0MztcdGtmcmVlKGRhdGEpO1xuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4mIzQzO1x0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcbiYjNDM7XHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4mIzQzO1x0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuJiM0MztcdCAqIHRpbGwgbmV4dCByZWJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZVxuIFx0ICogZGV2aWNlLWRheCByYW5nZSBhbmQgcmV0dXJuICYjMzk7MCYjMzk7IHRvIC1cdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcbmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvcG1lbS5jXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0LnBnbWFwID0gXHUwMDI2cGdtYXAsXG4gXHRcdC5zaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbiBcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbiYjNDM7XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjE3ODMyOTkwNzNlNDc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAgICAgKDFVTCBcdTAwM2NcdTAwM2MgU0VDVElPTl9TSVpFX0JJVFMpXG4gXG5AQCAtMTAwLDYgJiM0MzsxMDEsMzIgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XG4gdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTtcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXG4mIzQzOyAqXG4mIzQzOyAqIEFsaWducyB0aGUgc3RhcnQgYWRkcmVzcyB1cCBhbmQgdGhlIGVuZCBhZGRyZXNzIGRvd24gdG8gbWVtb3J5IGJsb2NrXG4mIzQzOyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxuJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcbiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXHUwMDNjIGFsaWduZWQuZW5kKSBiZWZvcmUgdXNpbmcgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCByYW5nZSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhbmdlIGFsaWduZWQ7XG4mIzQzO1xuJiM0MztcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4mIzQzO1x0YWxpZ25lZC5lbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWVuZCAmIzQzOyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbiYjNDM7XHQvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqL1xuJiM0MztcdGlmIChhbGlnbmVkLmVuZCBcdTAwM2M9IGFsaWduZWQuc3RhcnQpXG4mIzQzO1x0XHRhbGlnbmVkLnN0YXJ0ID0gYWxpZ25lZC5lbmQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YWxpZ25lZC5lbmQgLT0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsaWduZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLmRiMTBkNTBmMzBhZTFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xuIFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcbkBAIC0yNjcsNiAmIzQzOzI2OCw4IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcyk7XG4gXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fVxuQEAgLTI4Myw2ICYjNDM7Mjg2LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbkBAIC0yOTQsNiAmIzQzOzMwMyw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG4gXHRcdFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XG4mIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdFx0XHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKTtcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbiBcdFx0XHRcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcbkBAIC0zMTYsNiAmIzQzOzMyOCw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcbiBleHRlcm4gaW50IGFyY2hfY3JlYXRlX2xpbmVhcl9tYXBwaW5nKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIGFyY2hfcmVtb3ZlX2xpbmVhcl9tYXBwaW5nKHU2NCBzdGFydCwgdTY0IHNpemUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZCkgeyByZXR1cm4gTU1PUF9PRkZMSU5FOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxuIFxuIFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKTtcbiBcbiB2b2lkIG1ocF9zZXRfZGVmYXVsdF9vbmxpbmVfdHlwZShlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXG4gXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxuIHtcbi1cdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xuJiM0MztcdGVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7XG4mIzQzO1xuJiM0MztcdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcbiBcdHJldHVybiBkZXZpY2Vfb25saW5lKFx1MDAyNm1lbS1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC0xNDkxLDcgJiM0MzsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbiAgKlxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcbiBcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xuQEAgLTE1ODEsOCAmIzQzOzE1ODUsOSBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0XHRtZXJnZV9zeXN0ZW1fcmFtX3Jlc291cmNlKHJlcyk7XG4gXG4gXHQvKiBvbmxpbmUgcGFnZXMgaWYgcmVxdWVzdGVkICovXG4tXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdGlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpXG4mIzQzO1x0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNm9ubGluZV90eXBlLFxuJiM0MztcdFx0XHRcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbiBlcnJvcjpcbkBAIC0xNTk4LDcgJiM0MzsxNjAzLDEzIEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXG4mIzQzO2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiBcbi0vKlxuJiM0MzsvKipcbiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG4mIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbiYjNDM7ICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcbiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCYjMzQ7U3lzdGVtIFJBTSAoJERSSVZFUilcJiMzNDtcbiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbiYjNDM7ICogQG9ubGluZV90eXBlOiBBdXRvLU9ubGluZSBiZWhhdmlvciAob2ZmbGluZSwgb25saW5lLCBrZXJuZWwsIG1vdmFibGUpXG4mIzQzOyAqXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcbiAgKiBtZW1vcnkgaXMgbm90IGV4cG9zZWQgdmlhIHRoZSByYXcgZmlybXdhcmUtcHJvdmlkZWQgbWVtbWFwIGFzIHN5c3RlbVxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcbkBAIC0xNjM0LDYgJiM0MzsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcbiYjNDM7ICpcbiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmVcbiAgKiAgIHVzZWQgKGUuZy4sIHVzZSBwZXJzaXN0ZW50IG1lbW9yeSBhcyBzeXN0ZW0gUkFNKVxuICAqIC0gQ29vcmRpbmF0aW9uIHdpdGggYSBoeXBlcnZpc29yIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIG1lbW9yeVxuQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBUaGUgcmVzb3VyY2VfbmFtZSAodmlzaWJsZSB2aWEgL3Byb2MvaW9tZW0pIGhhcyB0byBoYXZlIHRoZSBmb3JtYXRcbiAgKiBcJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKVwmIzM0Oy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLVx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuJiM0MztcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0aW50IHJjO1xuQEAgLTE2NTgsNiAmIzQzOzE2ODEsOSBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0ICAgIHJlc291cmNlX25hbWVbc3RybGVuKHJlc291cmNlX25hbWUpIC0gMV0gIT0gJiMzOTspJiMzOTspXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlIFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuIFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcbkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmMgPSBhZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MpO1xuJiM0MztcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcbiBcbkBAIC0xNjc0LDYgJiM0MzsxNzAwLDMwIEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcdHJldHVybiByYztcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcJiMzNDtrbWVtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxuJiM0MzsgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4mIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbiYjNDM7ICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFwmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpXCYjMzQ7XG4mIzQzOyAqIEBtaHBfZmxhZ3M6IE1lbW9yeSBob3RwbHVnIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5XG4mIzQzOyAqIGJ1aWxkIGNvbmZpZyBvciBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcbiYjNDM7XHRcdFx0bWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcbiBcbiAvKlxuQEAgLTIzNzksNTggJiM0MzsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiAgKi9cbiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbiYjNDM7XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7XG4mIzQzO1x0XHQuc3RhcnQgPSBzdGFydCxcbiYjNDM7XHRcdC5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoXHUwMDI2cmFuZ2UsIDEpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbiYjNDM7ICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXG4mIzQzOyAqIEBucl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIEByYW5nZXNcbiYjNDM7ICpcbiYjNDM7ICogT2ZmbGluZSBhbmQgcmVtb3ZlIHNldmVyYWwgbWVtb3J5IHJhbmdlcyBhcyBvbmUgb3BlcmF0aW9uLCBzZXJpYWxpemVkXG4mIzQzOyAqIGFnYWluc3Qgb3RoZXIgaG90cGx1ZyBvcGVyYXRpb25zIGJ5IGEgc2luZ2xlIGxvY2tfZGV2aWNlX2hvdHBsdWcoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBvZmZsaW5lcyBhbGwgcmFuZ2VzIGJlZm9yZSByZW1vdmluZyBhbnkgb2YgdGhlbS4gIElmIG9mZmxpbmluZyBhbnlcbiYjNDM7ICogcmFuZ2UgZmFpbHMsIHRoZSBlbnRpcmUgcHJvY2VzcyBpcyByZXZlcnRlZCBhbmQgbm90aGluZyBpcyByZW1vdmVkLlxuJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggcmFuZ2UgbXVzdCBiZSBtZW1vcnktYmxvY2sgYWxpZ25lZCBpbiBzdGFydCBhbmQgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS4gIE9uIGZhaWx1cmUgbm8gcmFuZ2UgaGFzXG4mIzQzOyAqIGJlZW4gcmVtb3ZlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gMDtcbiBcdHVpbnQ4X3QgKm9ubGluZV90eXBlcywgKnRtcDtcbi1cdGludCByYztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpbnQgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuJiM0MztcdGlmICghcmFuZ2VzIHx8ICFucl9yYW5nZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHU2NCBzdGFydCA9IHJhbmdlc1tpXS5zdGFydDtcbiYjNDM7XHRcdGNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuJiM0MztcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdG1iX2NvdW50ICYjNDM7PSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Lypcbi1cdCAqIFdlJiMzOTtsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4mIzQzO1x0ICogUmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBldmVyeSBtZW1vcnkgYmxvY2sgYWNyb3NzIGFsbCByYW5nZXMsXG4mIzQzO1x0ICogc28gd2UgY2FuIHJldmVydCBpZiBvZmZsaW5pbmcgYSBsYXRlciBibG9jayBmYWlscy4gIEFsbCBlbnRyaWVzIHN0YXJ0XG4mIzQzO1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4gXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJiMzOTtsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW5cbi1cdCAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS5cbi1cdCAqL1xuIFx0bWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7XG4gXG4gXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4mIzQzO1x0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cbiBcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSW4gY2FzZSB3ZSBzdWNjZWVkZWQgdG8gb2ZmbGluZSBhbGwgbWVtb3J5LCByZW1vdmUgaXQuXG4tXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXG4tXHQgKi9cbi1cdGlmICghcmMpIHtcbi1cdFx0cmMgPSB0cnlfcmVtb3ZlX21lbW9yeShzdGFydCwgc2l6ZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiBcdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuJiM0MztcdC8qIElmIGFueSBmYWlsdXJlIG9jY3VycmVkIGF0IGFsbCwgcm9sbGJhY2sgYW55IGNoYW5nZXMgYW5kIGJhaWwgKi9cbiBcdGlmIChyYykge1xuIFx0XHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLFxuLVx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSAyOiBSZW1vdmUuIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgaG9sZGluZyB0aGUgaG90cGx1ZyBsb2NrICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0cnlfcmVtb3ZlX21lbW9yeShyYW5nZXNbaV0uc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSkpKTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjU1Mjg2ODJhM2E5MTIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZVxuIFRBUkdFVFMgJiM0Mzs9IGNwdWZyZXFcbiBUQVJHRVRTICYjNDM7PSBjcHUtaG90cGx1Z1xuIFRBUkdFVFMgJiM0Mzs9IGRhbW9uXG4mIzQzO1RBUkdFVFMgJiM0Mzs9IGRheFxuIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmVcbiBUQVJHRVRTICYjNDM7PSBkbWFidWYtaGVhcHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVhNGYzZDczYTViYWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO2FsbDpcbiYjNDM7XG4mIzQzO1RFU1RfUFJPR1MgOj0gZGF4LWttZW0taG90cGx1Zy5zaFxuJiM0MztcbiYjNDM7aW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsNCBAQFxuJiM0MztDT05GSUdfREVWX0RBWD1tXG4mIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jOGJiYWY2MTc4ZWQ5Y1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbkBAIC0wLDAgJiM0MzsxLDE5MCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gXCYjMzQ7c3RhdGVcJiMzNDsgc3lzZnMgYXR0cmlidXRlOlxuJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtXHUwMDNlICB1bnBsdWdnZWQgfCBvbmxpbmUgfCBvbmxpbmVfa2VybmVsIHwgb25saW5lX21vdmFibGVcbiYjNDM7I1xuJiM0MzsjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuXG4mIzQzOyNcbiYjNDM7IyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbiYjNDM7IyAgIG1lbW1hcD0yRyE0R1xuJiM0MzsjXG4mIzQzOyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4mIzQzOyNcbiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuJiM0MzsjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4mIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0MztESVI9XCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWYgXCYjMzQ7JDBcJiMzNDspXCYjMzQ7KVwmIzM0O1xuJiM0MzsuIFwmIzM0OyRESVJcJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7REFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbiYjNDM7XG4mIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH1cbiYjNDM7Z2V0X3N0YXRlKCkgeyBjYXQgXCYjMzQ7JEhQXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IH1cbiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuJiM0MzsjIHdyaXRlJiMzOTtzIGV4aXQgc3RhdHVzICgwID0gYWNjZXB0ZWQgYnkgdGhlIGtlcm5lbClcbiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskSFBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgfVxuJiM0MztcbiYjNDM7ZmluZF9rbWVtX2RheCgpIHtcbiYjNDM7XHRsb2NhbCBkIGRydlxuJiM0MztcdGZvciBkIGluIFwmIzM0OyREQVhfQkFTRVwmIzM0Oy9kYXgqOyBkb1xuJiM0MztcdFx0WyAtZSBcJiMzNDskZC9zdGF0ZVwmIzM0OyBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0XHRkcnY9JChyZWFkbGluayBcJiMzNDskZC9kcml2ZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRcdFsgXCYjMzQ7JChiYXNlbmFtZSBcJiMzNDske2RydjotfVwmIzM0OylcJiMzNDsgPSBrbWVtIF0gfHwgY29udGludWVcbiYjNDM7XHRcdGJhc2VuYW1lIFwmIzM0OyRkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMFxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskVUlEXCYjMzQ7ICE9IDAgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7REFYPSQoZmluZF9rbWVtX2RheClcbiYjNDM7aWYgWyAteiBcJiMzNDskREFYXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4mIzQzO09SSUc9JChnZXRfc3RhdGUpXG4mIzQzO1xuJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSB8fCBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVwmIzM0O1xuJiM0MztcdFsgLW4gXCYjMzQ7JE9SSUdcJiMzNDsgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwmIzM0OyRPUklHXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuJiM0MztcbiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9tc2cgXCYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwmIzM0O1xuJiM0MztrdGFwX3NldF9wbGFuIDhcbiYjNDM7XG4mIzQzOyMgQSBwdWJsaWMgKE5fTUVNT1JZKSBrbWVtIG5vZGUgb25saW5lZCBpbnRvIGEga2VybmVsIHpvbmUgKG9ubGluZS9vbmxpbmVfa2VybmVsKVxuJiM0MzsjIGNvbGxlY3RzIHVubW92YWJsZSBhbGxvY2F0aW9ucyBhbmQgY2FuIHRoZW4gbmV2ZXIgYmUgb2ZmbGluZWQsIHdoaWNoIHdvdWxkXG4mIzQzOyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlclxuJiM0MzsjIHN1Y2Nlc3NmdWxseSBvbmxpbmVzIG9ubGluZV9tb3ZhYmxlLCB0aGUgb25lIG1vZGUgdGhhdCBpcyByZWxpYWJseSB1bnBsdWdnYWJsZS5cbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbiYjNDM7bXRfb25saW5lPSQobWVtdG90YWxfa2IpXG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X29ubGluZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnRcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgQSBkaWZmZXJlbnQgb25saW5lIHR5cGUgaXMgcmVqZWN0ZWQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyB1bnBsdWcuICBUaGUgd3JpdGVcbiYjNDM7IyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXG4mIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kP1xuJiM0MztpZiBbIFwmIzM0OyRyY1wmIzM0OyAhPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3JlamVjdCBvbmxpbmVfa2VybmVsIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnIChubyBrZXJuZWwtem9uZSBvbmxpbmUpXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmVfbW92YWJsZS1cdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfb25saW5lXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDt1bnBsdWcgZnJvbSBvbmxpbmVfbW92YWJsZTogTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdCBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKVxuJiM0MztzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBcJiMzNDskYmVmb3JlXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFRoZSBvbmxpbmVfbW92YWJsZSAtXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXG4mIzQzOyMgcmUtcmVzZXJ2ZSB0aGUgcGVyLXJhbmdlIHJlc291cmNlcywgc28gYSBsYXRlciB1bnBsdWcgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZVxuJiM0MzsjIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgZWFjaCBpdGVyYXRpb24gcmVhbGx5IGFkZHMgYW5kIGZyZWVzIG1lbW9yeS5cbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZFxuJiM0MztjeWNsZV9vaz0xOyBmYWlsX2k9MDsgb249MDsgb2ZmPTBcbiYjNDM7Zm9yIGkgaW4gMSAyIDM7IGRvXG4mIzQzO1x0aWYgISBzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbiYjNDM7XHRvbj0kKG1lbXRvdGFsX2tiKVxuJiM0MztcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuJiM0MztcdG9mZj0kKG1lbXRvdGFsX2tiKVxuJiM0MztcdGlmIFsgXCYjMzQ7JG9uXCYjMzQ7IC1sZSBcJiMzNDskbXRfdW5wbHVnZ2VkXCYjMzQ7IF0gfHwgWyBcJiMzNDskb2ZmXCYjMzQ7IC1nZSBcJiMzNDskb25cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xuJiM0MztcdGZpXG4mIzQzO2RvbmVcbiYjNDM7aWYgWyBcJiMzNDskY3ljbGVfb2tcJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtvbmxpbmVfbW92YWJsZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogYWRkZWQgYW5kIGZyZWVkIGVhY2ggdGltZSlcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZWdyZXNzZWQgYXQgaXRlcmF0aW9uICRmYWlsX2kgKG9uPSRvbiBvZmY9JG9mZiBiYXNlbGluZT0kbXRfdW5wbHVnZ2VkKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XG4mIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkXG4mIzQzO2lmIFsgLXcgXCYjMzQ7JEFPQlwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIC13IFwmIzM0OyREUlYvdW5iaW5kXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi9iaW5kXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRvcmlnX2FvYj0kKGNhdCBcJiMzNDskQU9CXCYjMzQ7KVxuJiM0MztcdGVjaG8gXCYjMzQ7JERBWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGVjaG8gb2ZmbGluZSBcdTAwM2UgXCYjMzQ7JEFPQlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL2JpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XHRzdD0kKGdldF9zdGF0ZSlcbiYjNDM7XHRlY2hvIFwmIzM0OyRvcmlnX2FvYlwmIzM0OyBcdTAwM2UgXCYjMzQ7JEFPQlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5XG4mIzQzO1x0aWYgWyBcJiMzNDskc3RcJiMzNDsgPSBvZmZsaW5lIF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZSBwb2xpY3kgcmVzb2x2ZWQgYXQgYmluZDogYXV0b19vbmxpbmVfYmxvY2tzPW9mZmxpbmUgLVx1MDAzZSBzdGF0ZT1vZmZsaW5lXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7YmluZC10aW1lIHBvbGljeSBub3QgaG9ub3JlZDogc3RhdGU9JHN0IChleHBlY3RlZCBvZmZsaW5lKVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0c2V0X3N0YXRlIHVucGx1Z2dlZCAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDthdXRvX29ubGluZV9ibG9ja3Mgb3IgZHJpdmVyIGJpbmQvdW5iaW5kIG5vdCB3cml0YWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7WyAtbiBcJiMzNDskT1JJR1wmIzM0OyBdIFx1MDAyNlx1MDAyNiBzZXRfc3RhdGUgXCYjMzQ7JE9SSUdcJiMzNDtcbiYjNDM7XG4mIzQzOyMgREVTVFJVQ1RJVkU6IHVuYmluZGluZyB0aGUgZHJpdmVyIHdoaWxlIG1lbW9yeSBpcyBvbmxpbmUgY2F1c2VzIHRoZSByZXNvdXJjZXNcbiYjNDM7IyB0byBsZWFrIC0gYnV0IHRoZSB1bmJpbmQgc2hvdWxkIG5vdCBkZWFkbG9jay4gIEluc3RlYWQgdGhlIGRyaXZlciBsZWFrcyBpdFxuJiM0MzsjIHdpdGggYSBzaW5nbGUgXCYjMzQ7c3R1Y2sgb25saW5lXCYjMzQ7IHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGVcbiYjNDM7IyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsXG4mIzQzOyMgbGVhdmluZyB0aGUgcmVzdG9yZWQgc3RhdGUgYWJvdmUgdW50b3VjaGVkIG90aGVyd2lzZS4gIG9ubGluZV9tb3ZhYmxlIG9ubHk6XG4mIzQzOyMgdGhpcyB0ZXN0IG5ldmVyIG9ubGluZXMgYSBwdWJsaWMgbm9kZSBpbnRvIGEga2VybmVsIHpvbmUuXG4mIzQzO2lmIFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZVxuJiM0MztmaVxuJiM0MztpZiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdG10X29uPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0ZG1lc2cgLUMgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGVjaG8gXCYjMzQ7JERBWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0IyBUaGUgbGVha2VkIFwmIzM0O1N5c3RlbSBSQU0gKGttZW0pXCYjMzQ7IHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xuJiM0MztcdCMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLlxuJiM0MztcdCMgV2FsayAvcHJvYy9pb21lbSB0byBwcm92b2tlIHRoYXQgdXNlLWFmdGVyLWZyZWUgKGNhdWdodCBieSBLQVNBTikuXG4mIzQzO1x0Y2F0IC9wcm9jL2lvbWVtIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRzcGxhdD0kKGRtZXNnIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1jaUUgXCYjMzQ7S0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XCYjMzQ7KVxuJiM0MztcdGlmIFsgXCYjMzQ7JHNwbGF0XCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRtdF9hZnRlclwmIzM0OyAtZ2UgXCYjMzQ7JG10X29uXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmU6IG1lbW9yeSBsZWZ0IG9ubGluZSwgbm8gVUFGL29vcHMgKE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQilcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDt1bmJpbmQgd2hpbGUgb25saW5lIHJlZ3Jlc3NlZDogc3BsYXQ9JHNwbGF0IE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQlwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDtjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztrdGFwX2ZpbmlzaGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzO3RpbWVvdXQ9OTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZfREFYJiMzNDssCiAgICAmIzM0O0RFVl9EQVhfS01FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cGx1ZyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9kb19ob3RyZW1vdmUmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fcGFyc2Vfc3RhdGUmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OywKICAgICYjMzQ7X19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O21ocF9vbmxpbmVfdHlwZV90b19zdHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA0OjI4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4CmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheApAQCAtMTUxLDMgJiM0MzsxNTEsMjkgQEAgRGVzY3JpcHRpb246CiAJCW1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpcwogCQl0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC0KIAkJbWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJiMzOTt0cnVlJiMzOTsgb3IgJiMzOTtmb3JjZSYjMzk7LiYjMzQ7CiYjNDM7CiYjNDM7V2hhdDoJCS9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZQomIzQzO0RhdGU6CQlKdW5lLCAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJdjYuMjEKJiM0MztDb250YWN0OgludmRpbW1AbGlzdHMubGludXguZGV2CiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KJiM0MzsJCUFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuCiYjNDM7CQlPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy4KJiM0MzsKJiM0MzsJCVJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3IKJiM0MzsJCXRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OgomIzQzOwomIzQzOwkJICAmIzM0O3VucGx1Z2dlZCYjMzQ7OiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudAomIzQzOwkJICAmIzM0O29ubGluZSYjMzQ7OiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsCiYjNDM7CQkgICYjMzQ7b25saW5lX2tlcm5lbCYjMzQ7OiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMCiYjNDM7CQkgICYjMzQ7b25saW5lX21vdmFibGUmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEUKJiM0MzsKJiM0MzsJCSYjMzQ7b2ZmbGluZSYjMzQ7IChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZQomIzQzOwkJcmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZQomIzQzOwkJYXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyAmIzM0O29mZmxpbmUmIzM0Oy4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLAomIzQzOwkJYXMgaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuCiYjNDM7CiYjNDM7CQlBIGRldmljZSBjYW4gb25seSBiZSBvbmxpbmVkIGZyb20gdGhlICYjMzQ7dW5wbHVnZ2VkJiMzNDsgc3RhdGUsIHNvIGEKJiM0MzsJCWRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvICYjMzQ7dW5wbHVnZ2VkJiMzNDsgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkCiYjNDM7CQlpbnRvIGEgZGlmZmVyZW50IHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGJjZmUyZDlmNGFkYmQ5Li41ZWVhZDMzNDZmMWUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtNDYsNiAmIzQzOzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKQogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpOwomIzQzOwomIzQzO2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKQomIzQzO3sKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgMCB8fCBvbmxpbmVfdHlwZSAmZ3Q7PSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX3RvX3N0cik7CiAKICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jCmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvYnVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKQEAgLTM5NCw2ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkuc2l6ZSA9IDAsCiAJCQkuaWQgPSAtMSwKIAkJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkJLm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULAogCQl9OwogCQlzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IF9fZGV2bV9jcmVhdGVfZGV2X2RheCgmYW1wO2RhdGEpOwogCkBAIC0xNTI3LDYgJiM0MzsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSkKIAlpZGFfaW5pdCgmYW1wO2Rldl9kYXgtJmd0O2lkYSk7CiAKIAlkZXZfZGF4LSZndDttZW1tYXBfb25fbWVtb3J5ID0gZGF0YS0mZ3Q7bWVtbWFwX29uX21lbW9yeTsKJiM0MzsJZGV2X2RheC0mZ3Q7b25saW5lX3R5cGUgPSBkYXRhLSZndDtvbmxpbmVfdHlwZTsKIAogCWlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpOwogCWRldi0mZ3Q7ZGV2dCA9IGlub2RlLSZndDtpX3JkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oCmluZGV4IDU5MDkxNzFhNDQyOGI3Li4zYmM3NmJjMGExNDU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvYnVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2lmbmRlZiBfX0RBWF9CVVNfSF9fCiAjZGVmaW5lIF9fREFYX0JVU19IX18KICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5nZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwpAQCAtMTYsNiAmIzQzOzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uOwogI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApCiAjZGVmaW5lIElPUkVTT1VSQ0VfREFYX0tNRU0gQklUKDEpCiAKJiM0MzsvKgomIzQzOyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lCiYjNDM7ICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsCiYjNDM7ICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVAkoLTEpCiYjNDM7CiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsCiAJCXN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKQEAgLTI2LDYgJiM0MzszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEgewogCXJlc291cmNlX3NpemVfdCBzaXplOwogCWludCBpZDsKIAlib29sIG1lbW1hcF9vbl9tZW1vcnk7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsJLyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi8KIH07CiAKIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvY3hsLmMgYi9kcml2ZXJzL2RheC9jeGwuYwppbmRleCAzYWIzOWI3Nzg0M2Q1ZS4uMWE3ZWM2MjEyMjEzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2N4bC5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLmlkID0gLTEsCiAJCS5zaXplID0gcmFuZ2VfbGVuKCZhbXA7Y3hscl9kYXgtJmd0O2hwYV9yYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gdHJ1ZSwKJiM0MzsJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAl9OwogCiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKaW5kZXggODFlNGFmNDllMzljMTAuLjkwMmU5MjJkYzRlNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKIAogLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi8KIHN0cnVjdCBkYXhfZGV2aWNlOwpAQCAtNzksNiAmIzQzOzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2UgewogICogQGRldjogZGV2aWNlIGNvcmUKICAqIEBwZ21hcDogcGdtYXAgZm9yIG1lbW1hcCBzZXR1cCAvIGxpZmV0aW1lIChkcml2ZXIgb3duZWQpCiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5CiYjNDM7ICogQG9ubGluZV90eXBlOiBNTU9QXyogb25saW5lIHR5cGUgZm9yIG1lbW9yeSBob3RwbHVnLCBvciBEQVhfT05MSU5FX0RFRkFVTFQKJiM0MzsgKgkJIHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHMKICAqIEBucl9yYW5nZTogc2l6ZSBvZiBAcmFuZ2VzCiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWQKICAqLwpAQCAtOTUsNiAmIzQzOzk4LDcgQEAgc3RydWN0IGRldl9kYXggewogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7CiAJYm9vbCBtZW1tYXBfb25fbWVtb3J5OwomIzQzOwlpbnQgb25saW5lX3R5cGU7CS8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovCiAJaW50IG5yX3JhbmdlOwogCXN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uYwppbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdGF0aWMgaW50IGRheF9obWVtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCS5pZCA9IC0xLAogCQkuc2l6ZSA9IHJlZ2lvbl9pZGxlID8gMCA6IHJhbmdlX2xlbigmYW1wO21yaS0mZ3Q7cmFuZ2UpLAogCQkubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLAomIzQzOwkJLm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULAogCX07CiAKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoJmFtcDtkYXRhKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmMKaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjE5ZWZmZTBkYTNkY2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jCkBAIC0zMyw5ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKQogCXN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSAmYW1wO2Rldl9kYXgtJmd0O3Jhbmdlc1tpXTsKIAlzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gJmFtcDtkYXhfcmFuZ2UtJmd0O3JhbmdlOwogCi0JLyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovCi0Jci0mZ3Q7c3RhcnQgPSBBTElHTihyYW5nZS0mZ3Q7c3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpOwotCXItJmd0O2VuZCA9IEFMSUdOX0RPV04ocmFuZ2UtJmd0O2VuZCAmIzQzOyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7CiYjNDM7CSpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpOwogCWlmIChyLSZndDtzdGFydCAmZ3Q7PSByLSZndDtlbmQpIHsKIAkJci0mZ3Q7c3RhcnQgPSByYW5nZS0mZ3Q7c3RhcnQ7CiAJCXItJmd0O2VuZCA9IHJhbmdlLSZndDtlbmQ7CkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VECSgtMSkKJiM0MzsKIHN0cnVjdCBkYXhfa21lbV9kYXRhIHsKIAljb25zdCBjaGFyICpyZXNfbmFtZTsKIAlpbnQgbWdpZDsKJiM0MzsJaW50IG51bWFfbm9kZTsKJiM0MzsJc3RydWN0IGRldl9kYXggKmRldl9kYXg7CiYjNDM7CWludCBzdGF0ZTsKJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi8KIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlc1tdOwogfTsKIApAQCAtNjUsMTUgJiM0Mzs2OSwzMzQgQEAgc3RhdGljIHZvaWQga21lbV9wdXRfbWVtb3J5X3R5cGVzKHZvaWQpCiAJbXRfcHV0X21lbW9yeV90eXBlcygmYW1wO2ttZW1fbWVtb3J5X3R5cGVzKTsKIH0KIAomIzQzOy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqLwomIzQzO3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RhdGUgPT0gTU1PUF9PTkxJTkUgfHwKJiM0MzsJICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX0tFUk5FTCB8fAomIzQzOwkgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3MKJiM0MzsgKgomIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGUKJiM0MzsgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSwKJiM0MzsJCQkgICAgICAgaW50IG9ubGluZV90eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CWludCBpLCByYywgYWRkZWQgPSAwOwomIzQzOwltaHBfdCBtaHBfZmxhZ3M7CiYjNDM7CiYjNDM7CWlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSAmZ3Q7IE1NT1BfT05MSU5FX01PVkFCTEUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHJhbmdlIHJhbmdlOwomIzQzOwomIzQzOwkJcmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBpbml0X3Jlc291cmNlcygpIGlzIGJlc3QtZWZmb3J0OiBpZiBhIHJlc2VydmF0aW9uIGNvbmZsaWN0CiYjNDM7CQkgKiBvY2N1cnMgaXQga2VlcHMgdGhlIHJhbmdlIGJ1dCBsZWF2ZXMgcmVzW2ldPU5VTEwuIEZvciBob3RwbHVnCiYjNDM7CQkgKiBvbiBwcm9iZSBzeXN0ZW1zLCB0aGlzIG1lYW5zIGttZW0gd2lsbCBwYXJ0aWFsbHkgb25saW5lLgomIzQzOwkJICoKJiM0MzsJCSAqIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGJlaGF2aW9yIG5vdCB0byBicmVhayB0aG9zZSBzeXN0ZW1zLgomIzQzOwkJICogRm9yIHRob3NlIHN5c3RlbXMgLSBhdG9taWNpdHkgb25seSBhcHBsaWVzIHRvIHZhbGlkIHJhbmdlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7CiYjNDM7CQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKJiM0MzsJCQltaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXQKJiM0MzsJCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAomIzQzOwkJCQlyYW5nZV9sZW4oJmFtcDtyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLAomIzQzOwkJCQlvbmxpbmVfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJCSBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG8KJiM0MzsJCQkgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnkKJiM0MzsJCQkgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKSB7CiYjNDM7CQkJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoYWRkZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYWRkZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbQomIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZQomIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZwomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVgKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJaW50IGksIHJjLCBtYXBwZWQgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovCiYjNDM7CQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KJiM0MzsJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLAomIzQzOwkJCQkJIGRhdGEtJmd0O3Jlc19uYW1lKTsKJiM0MzsJCWlmICghcmVzKSB7CiYjNDM7CQkJZGV2X3dhcm4oZGV2LCAmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dAomIzQzOwkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobWFwcGVkKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCiYjNDM7CQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKJiM0MzsJCSAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzCiYjNDM7CQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcy0mZ3Q7ZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07CiYjNDM7CQltYXBwZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXBwZWQ7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb24KJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZAomIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CXN0cnVjdCByYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC0mZ3Q7bnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFuZ2VzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7CiYjNDM7CiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovCiYjNDM7CWlmICghbnJfcmFuZ2VzKSB7CiYjNDM7CQlrZnJlZShyYW5nZXMpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7CiYjNDM7CWtmcmVlKHJhbmdlcyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJLyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi8KJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2hvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxsIHJhbmdlcyByZW1vdmVkOyByZWxlYXNlIHRoZSByZXNlcnZlZCByZXNvdXJjZXMuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMgLSByZW1vdmUgdGhlIGRheCBtZW1vcnkgcmVzb3VyY2VzCiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlCiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyCiYjNDM7CSAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvbgomIzQzOwkgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTigoKGRhdGEtJmd0O3N0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgJmFtcDsmYW1wOwomIzQzOwkJICAoZGF0YS0mZ3Q7c3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksCiYjNDM7CQkgJiMzNDtIb3RwbHVnIG1lbW9yeSByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3QmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKJiM0MzsKJiM0MzsJLyogJiMzNDt1bnBsdWdnZWQmIzM0OyBpcyBrbWVtLXNwZWNpZmljIC0gdGhlIHJlc3QgbWFwIHRvIE1NT1BfICovCiYjNDM7CWlmIChzeXNmc19zdHJlcShidWYsICYjMzQ7dW5wbHVnZ2VkJiMzNDspKQomIzQzOwkJcmV0dXJuIERBWF9LTUVNX1VOUExVR0dFRDsKJiM0MzsKJiM0MzsJb25saW5lX3R5cGUgPSBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoYnVmKTsKJiM0MzsJLyogRGlzYWxsb3cgJiMzNDtvZmZsaW5lJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovCiYjNDM7CWlmIChvbmxpbmVfdHlwZSA9PSBNTU9QX09GRkxJTkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIG9ubGluZV90eXBlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWNvbnN0IGNoYXIgKnN0YXRlX3N0cjsKJiM0MzsKJiM0MzsJaWYgKCFkYXRhKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJaWYgKGRhdGEtJmd0O3N0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRCkKJiM0MzsJCXN0YXRlX3N0ciA9ICYjMzQ7dW5wbHVnZ2VkJiMzNDs7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBzdGF0ZV9zdHIgPzogJiMzNDt1bmtub3duJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7CiYjNDM7CXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IERBWF9LTUVNX1VOUExVR0dFRCkKJiM0MzsJCXJldHVybiBvbmxpbmVfdHlwZTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovCiYjNDM7CWlmIChkYXRhLSZndDtzdGF0ZSA9PSBvbmxpbmVfdHlwZSkKJiM0MzsJCXJldHVybiBsZW47CiYjNDM7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHsKJiM0MzsJCXJjID0gZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCWRhdGEtJmd0O3N0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwkJcmV0dXJuIGxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBPbmxpbmluZyBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgdW5wbHVnZ2VkIHN0YXRlLiAqLwomIzQzOwlpZiAoZGF0YS0mZ3Q7c3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJLyogUmUtYWNxdWlyZSByZXNvdXJjZXMgaWYgcHJldmlvdXNseSB1bnBsdWdnZWQsIG90aGVyd2lzZSBuby1vcCAqLwomIzQzOwlyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IG9ubGluZV90eXBlOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpOwomIzQzOwogc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7CiAJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7CiAJc3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbXR5cGU7Ci0JaW50IGksIHJjLCBtYXBwZWQgPSAwOwotCW1ocF90IG1ocF9mbGFnczsKJiM0MzsJaW50IGksIHJjOwogCWludCBudW1hX25vZGU7CiYjNDM7CWludCBvbmxpbmVfdHlwZTsKIAlpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTsKIAogCS8qCkBAIC0xMzMsNjggJiM0Mzs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiAJaWYgKHJjICZsdDsgMCkKIAkJZ290byBlcnJfcmVnX21naWQ7CiAJZGF0YS0mZ3Q7bWdpZCA9IHJjOwomIzQzOwlkYXRhLSZndDtudW1hX25vZGUgPSBudW1hX25vZGU7CiYjNDM7CWRhdGEtJmd0O2Rldl9kYXggPSBkZXZfZGF4OwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RhdGEtJmd0O2xvY2spOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQkJc3RydWN0IHJhbmdlIHJhbmdlOwotCi0JCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7Ci0JCWlmIChyYykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovCi0JCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLCBkYXRhLSZndDtyZXNfbmFtZSk7Ci0JCWlmICghcmVzKSB7Ci0JCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cbiYjMzQ7LAotCQkJCQlpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKLQkJCS8qCi0JCQkgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0Ci0JCQkgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuCi0JCQkgKi8KLQkJCWlmIChtYXBwZWQpCi0JCQkJY29udGludWU7Ci0JCQlyYyA9IC1FQlVTWTsKLQkJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOwotCQl9Ci0JCWRhdGEtJmd0O3Jlc1tpXSA9IHJlczsKLQotCQkvKgotCQkgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhcgotCQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKLQkJICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3MKLQkJICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LgotCQkgKi8KLQkJcmVzLSZndDtmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTsKJiM0MzsJZGV2X3NldF9kcnZkYXRhKGRldiwgZGF0YSk7CiAKLQkJbWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEOwotCQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKLQkJCW1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTsKJiM0MzsJcmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc291cmNlczsKIAotCQkvKgotCQkgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMmIzM5O2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdAotCQkgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LgotCQkgKi8KLQkJcmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAotCQkJCXJhbmdlX2xlbigmYW1wO3JhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpOwomIzQzOwkvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi8KJiM0MzsJb25saW5lX3R5cGUgPSBkZXZfZGF4LSZndDtvbmxpbmVfdHlwZTsKJiM0MzsJaWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVCkKJiM0MzsJCW9ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiAKLQkJaWYgKHJjKSB7Ci0JCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCi0JCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCQkJcmVtb3ZlX3Jlc291cmNlKHJlcyk7Ci0JCQlrZnJlZShyZXMpOwotCQkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKLQkJCWlmIChtYXBwZWQpCi0JCQkJY29udGludWU7Ci0JCQlnb3RvIGVycl9yZXF1ZXN0X21lbTsKLQkJfQotCQltYXBwZWQmIzQzOyYjNDM7OwotCX0KJiM0MzsJLyogQWx3YXlzIGNyZWF0ZSBibG9ja3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGV2ZW4gaWYgb2ZmbGluZSAqLwomIzQzOwlyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfaG90cGx1ZzsKJiM0MzsJZGF0YS0mZ3Q7c3RhdGUgPSBvbmxpbmVfdHlwZTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpOwomIzQzOwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZhbXA7ZGV2X2F0dHJfc3RhdGUpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxuJiMzNDspOwogCiAJcmV0dXJuIDA7CiAKLWVycl9yZXF1ZXN0X21lbToKJiM0MztlcnJfaG90cGx1ZzoKJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7ZXJyX3Jlc291cmNlczoKJiM0MzsJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7CiBlcnJfcmVnX21naWQ6CiAJa2ZyZWUoZGF0YS0mZ3Q7cmVzX25hbWUpOwpAQCAtMjA2LDY1ICYjNDM7NDk5LDg2IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogfQogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiYjNDM7LyoKJiM0MzsgKiBSZW1vdmUgdGhlIGRldmljZSYjMzk7cyBhZGRlZCByYW5nZXMgd2l0aCByZW1vdmVfbWVtb3J5KCkuCiYjNDM7ICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmUKJiM0MzsgKiBvbmxpbmUgKC1FQlVTWSksIHNvIGl0IGlzIHNhZmUgZnJvbSB1bmJpbmQuIEZhaWx1cmVzIGxlYWsgdW50aWwgcmVib290LgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9yZW1vdmVfcmFuZ2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQogewotCWludCBpLCBzdWNjZXNzID0gMDsKLQlpbnQgbm9kZSA9IGRldl9kYXgtJmd0O3RhcmdldF9ub2RlOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7ZGV2X2RheC0mZ3Q7ZGV2OwotCXN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBpLCByYyA9IDA7CiAKLQkvKgotCSAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90Ci0JICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kCi0JICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2UKLQkgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuCi0JICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0JCWludCByYzsKIAotCQlyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksICZhbXA7cmFuZ2UpOwotCQlpZiAocmMpCiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSB8fCBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKIAkJCWNvbnRpbnVlOwotCi0JCS8qIHJhbmdlIHdhcyBuZXZlciBhZGRlZCBkdXJpbmcgcHJvYmUgKi8KLQkJaWYgKCFkYXRhLSZndDtyZXNbaV0pIHsKLQkJCXN1Y2Nlc3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbigmYW1wO3JhbmdlKSkpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCXJjID0gLUVCVVNZOwogCQkJY29udGludWU7CiAJCX0KJiM0MzsJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJa2ZyZWUoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWRhdGEtJmd0O3Jlc1tpXSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KIAotCQlyYyA9IHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbigmYW1wO3JhbmdlKSk7Ci0JCWlmIChyYyA9PSAwKSB7Ci0JCQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKLQkJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7Ci0JCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwotCQkJc3VjY2VzcyYjNDM7JiM0Mzs7Ci0JCQljb250aW51ZTsKLQkJfQomIzQzO3N0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiYjNDM7ewomIzQzOwlpbnQgbm9kZSA9IGRldl9kYXgtJmd0O3RhcmdldF9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIElmIFVOUExVR0dFRDogc3RhdGUgaXMga25vd24gY2xlYW4gYW5kIHJlYm9vdCBjYW4gY2xlYW4gdXAuCiYjNDM7CSAqCiYjNDM7CSAqIElmIE9OTElORV8qOiBtZW1vcnkgY2Fubm90IGJlIHJlbW92ZWQgaGVyZTogb2ZmbGluaW5nIGR1cmluZyBhbgomIzQzOwkgKiB1bmludGVycnVwdGlibGUgdW5iaW5kIGNhbiBkZWFkbG9jay4gTGVhayB0aGUgcmVzb3VyY2VzIHVudGlsIHJlYm9vdC4KJiM0MzsJICoKJiM0MzsJICogSWYgT0ZGTElORTogYmxvY2tzIGFyZSBhdHRlbXB0ZWQgdG8gcmVtb3ZlIHdpdGggcmVtb3ZlX21lbW9yeSgpLAomIzQzOwkgKiB3aGljaCBuZXZlciBhdHRlbXB0cyBvZmZsaW5pbmcuIEEgYmxvY2sgb25saW5lZCBiZWhpbmQgb3VyIGJhY2sKJiM0MzsJICogZmFpbHMgLUVCVVNZIGFuZCBpcyBsZWFrZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtJmd0O3N0YXRlKSkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0hvdHBsdWcgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0gZWxzZSBpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gTU1PUF9PRkZMSU5FICZhbXA7JmFtcDsKJiM0MzsJCSAgIGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoZGV2X2RheCwgZGF0YSkpIHsKIAkJYW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlOwotCQlkZXZfZXJyKGRldiwKLQkJCSYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBjYW5ub3QgYmUgaG90cmVtb3ZlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3RcbiYjMzQ7LAotCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiAJfQogCi0JaWYgKHN1Y2Nlc3MgJmd0Oz0gZGV2X2RheC0mZ3Q7bnJfcmFuZ2UpIHsKLQkJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7Ci0JCWtmcmVlKGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCQkvKgotCQkgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy4KLQkJICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmUKLQkJICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZQotCQkgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kCi0JCSAqIHRpbGwgbmV4dCByZWJvb3QuCi0JCSAqLwotCQljbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpOwotCX0KJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CW1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtJmd0O21naWQpOwomIzQzOwlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CiYjNDM7CWtmcmVlKGRhdGEpOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuCiYjNDM7CSAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlCiYjNDM7CSAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGUKJiM0MzsJICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZAomIzQzOwkgKiB0aWxsIG5leHQgcmVib290LgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CiAJLyoKIAkgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZQogCSAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAmIzM5OzAmIzM5OyB0byAtJmd0O3JlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jCmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L3BtZW0uYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLnBnbWFwID0gJmFtcDtwZ21hcCwKIAkJLnNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCA0NjNkYzAyZjZjZmYwNS4uMTc4MzI5OTA3M2U0NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKIAogI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgJmx0OyZsdDsgU0VDVElPTl9TSVpFX0JJVFMpCiAKQEAgLTEwMCw2ICYjNDM7MTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTsKIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTsKIAomIzQzOy8qKgomIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3MKJiM0MzsgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnbgomIzQzOyAqCiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2sKJiM0MzsgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3QKJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkCiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgJmx0OyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDsKJiM0MzsKJiM0MzsJYWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLSZndDtzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7CiYjNDM7CWFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7ZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpOwomIzQzOwkvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqLwomIzQzOwlpZiAoYWxpZ25lZC5lbmQgJmx0Oz0gYWxpZ25lZC5zdGFydCkKJiM0MzsJCWFsaWduZWQuc3RhcnQgPSBhbGlnbmVkLmVuZDsKJiM0MzsJZWxzZQomIzQzOwkJYWxpZ25lZC5lbmQgLT0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsaWduZWQ7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbW9yeV9ub3RpZnkgewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggN2M5ZDY2NzI5YzYwOTUuLmRiMTBkNTBmMzBhZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTsKIAogZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7CiAKIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi8KIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkOwpAQCAtMjY3LDYgJiM0MzsyNjgsOCBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLAomIzQzOwkJdW5zaWduZWQgaW50IG5yX3Jhbmdlcyk7CiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fQpAQCAtMjgzLDYgJiM0MzsyODYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjk0LDYgJiM0MzszMDMsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7CiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwKIAkJCSAgICAgICBtaHBfdCBtaHBfZmxhZ3MpOwomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkJY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQllbnVtIG1tb3Agb25saW5lX3R5cGUpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiAJCQkJICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLAogCQkJCSAgICAgbWhwX3QgbWhwX2ZsYWdzKTsKQEAgLTMxNiw2ICYjNDM7MzI4LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLAogZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCSAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKQogCiAJcmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7CiAKIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpCiAKIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKIHsKLQltZW0tJmd0O29ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiYjNDM7CWVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7CiYjNDM7CiYjNDM7CW1lbS0mZ3Q7b25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7CiAJcmV0dXJuIGRldmljZV9vbmxpbmUoJmFtcDttZW0tJmd0O2Rldik7CiB9CiAKQEAgLTE0OTEsNyAmIzQzOzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogICoKICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcKICAqLwotaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQkgZW51bSBtbW9wIG9ubGluZV90eXBlKQogewogCXN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07CiAJZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7CkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKIAkJbWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpOwogCiAJLyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqLwotCWlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpCi0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpCiYjNDM7CQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7b25saW5lX3R5cGUsCiYjNDM7CQkJCSAgIG9ubGluZV9tZW1vcnlfYmxvY2spOwogCiAJcmV0dXJuIHJldDsKIGVycm9yOgpAQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi8KJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLAomIzQzOwkJCQkgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovCiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAKLS8qCiYjNDM7LyoqCiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlCiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZAomIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlCiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlcwomIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsKJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFncwomIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKQomIzQzOyAqCiAgKiBBZGQgc3BlY2lhbCwgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0gYXMgc3lzdGVtIFJBTS4gU3VjaAogICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW0KICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCwKQEAgLTE2MzQsNiAmIzQzOzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKICAqCiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhCiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOgomIzQzOyAqCiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmUKICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pCiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnkKQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAgKgogICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0CiAgKiAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAotCQkJICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCWNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncywKJiM0MzsJCWVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmM7CkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAmIzM5OykmIzM5OykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlICZndDsgTU1PUF9PTkxJTkVfTU9WQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7CkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTsKJiM0MzsJcmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpOwogCWlmIChyYyAmbHQ7IDApCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKQEAgLTE2NzQsNiAmIzQzOzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAl1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAlyZXR1cm4gcmM7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsICYjMzQ7a21lbSYjMzQ7KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeQomIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWQKJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZQomIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXMKJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKSYjMzQ7CiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3MKJiM0MzsgKgomIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5CiYjNDM7ICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci4KJiM0MzsgKgomIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsCiYjNDM7CQkJbWhwX2ZsYWdzLAomIzQzOwkJCW1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTsKIAogLyoKQEAgLTIzNzksNTggJiM0MzsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKICAqLwogaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7CiYjNDM7CXN0cnVjdCByYW5nZSByYW5nZSA9IHsKJiM0MzsJCS5zdGFydCA9IHN0YXJ0LAomIzQzOwkJLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoJmFtcDtyYW5nZSwgMSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXMKJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmUKJiM0MzsgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzCiYjNDM7ICoKJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWQKJiM0MzsgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueQomIzQzOyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC4KJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXMKJiM0MzsgKiBiZWVuIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLAomIzQzOwkJdW5zaWduZWQgaW50IG5yX3JhbmdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwOwogCXVpbnQ4X3QgKm9ubGluZV90eXBlcywgKnRtcDsKLQlpbnQgcmM7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlpbnQgcmMgPSAwOwogCi0JaWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fAotCSAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSkKJiM0MzsJaWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU2NCBzdGFydCA9IHJhbmdlc1tpXS5zdGFydDsKJiM0MzsJCWNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwKJiM0MzsJCSAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCW1iX2NvdW50ICYjNDM7PSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTsKJiM0MzsJfQomIzQzOwogCS8qCi0JICogV2UmIzM5O2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhbgotCSAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHMKLQkgKiBhZnRlciBvZmZsaW5pbmcgc29tZSBvdGhlcnMgc3VjY2VlZGVkLgomIzQzOwkgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcywKJiM0MzsJICogc28gd2UgY2FuIHJldmVydCBpZiBvZmZsaW5pbmcgYSBsYXRlciBibG9jayBmYWlscy4gIEFsbCBlbnRyaWVzIHN0YXJ0CiYjNDM7CSAqIGFzIE1NT1BfT0ZGTElORSBzbyBibG9ja3Mgd2UgbmV2ZXIgdG91Y2hlZCBhcmUgc2tpcHBlZCBvbiByb2xsYmFjay4KIAkgKi8KIAlvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIW9ubGluZV90eXBlcykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JLyoKLQkgKiBJbml0aWFsaXplIGFsbCBzdGF0ZXMgdG8gTU1PUF9PRkZMSU5FLCBzbyB3aGVuIHdlIGFib3J0IHByb2Nlc3NpbmcgaW4KLQkgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UmIzM5O2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpbgotCSAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS4KLQkgKi8KIAltZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTsKIAogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAomIzQzOwkvKiBQaGFzZSAxOiBvZmZsaW5lIGV2ZXJ5IGJsb2NrIGluIGV2ZXJ5IHJhbmdlLiAqLwogCXRtcCA9IG9ubGluZV90eXBlczsKLQlyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgJmFtcDt0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7Ci0KLQkvKgotCSAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LgotCSAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS4KLQkgKi8KLQlpZiAoIXJjKSB7Ci0JCXJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pLAomIzQzOwkJCQkJJmFtcDt0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7CiAJCWlmIChyYykKLQkJCXByX2VycigmIzM0OyVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWQmIzM0OywgX19mdW5jX18sIHJjKTsKJiM0MzsJCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsCi0JICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy4KLQkgKi8KJiM0MzsJLyogSWYgYW55IGZhaWx1cmUgb2NjdXJyZWQgYXQgYWxsLCByb2xsYmFjayBhbnkgY2hhbmdlcyBhbmQgYmFpbCAqLwogCWlmIChyYykgewogCQl0bXAgPSBvbmxpbmVfdHlwZXM7Ci0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgJmFtcDt0bXAsCi0JCQkJICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LAomIzQzOwkJCQkJICAgcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKSwgJmFtcDt0bXAsCiYjNDM7CQkJCQkgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIDI6IFJlbW92ZS4gVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBob2xkaW5nIHRoZSBob3RwbHVnIGxvY2sgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQlXQVJOX09OX09OQ0UodHJ5X3JlbW92ZV9tZW1vcnkocmFuZ2VzW2ldLnN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHJhbmdlX2xlbigmYW1wO3Jhbmdlc1tpXSkpKTsKJiM0MzsKJiM0MztvdXRfdW5sb2NrOgogCXVubG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiAJa2ZyZWUob25saW5lX3R5cGVzKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjU1Mjg2ODJhM2E5MTIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZQogVEFSR0VUUyAmIzQzOz0gY3B1ZnJlcQogVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWcKIFRBUkdFVFMgJiM0Mzs9IGRhbW9uCiYjNDM7VEFSR0VUUyAmIzQzOz0gZGF4CiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3MKIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmUKIFRBUkdFVFMgJiM0Mzs9IGRtYWJ1Zi1oZWFwcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO2FsbDoKJiM0MzsKJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZwpAQCAtMCwwICYjNDM7MSw0IEBACiYjNDM7Q09ORklHX0RFVl9EQVg9bQomIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bQomIzQzO0NPTkZJR19NRU1PUllfSE9UUExVRz15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhiYmFmNjE3OGVkOWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gJiMzNDtzdGF0ZSYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZToKJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtJmd0OyAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX2tlcm5lbCB8IG9ubGluZV9tb3ZhYmxlCiYjNDM7IwomIzQzOyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLgomIzQzOyMgSWYgbm8gc3VpdGFibGUgZGV2aWNlIGlzIGZvdW5kIHRoZSB0ZXN0cyBTS0lQLgomIzQzOyMKJiM0MzsjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOgomIzQzOyMgICBtZW1tYXA9MkchNEcKJiM0MzsjCiYjNDM7IyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbToKJiM0MzsjCiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZgomIzQzOyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW0KJiM0MzsjICAgLi9kYXgta21lbS1ob3RwbHVnLnNoCiYjNDM7CiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxCiYjNDM7RElSPSYjMzQ7JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZiAmIzM0OyQwJiMzNDspJiMzNDspJiMzNDsKJiM0MzsuICYjMzQ7JERJUiYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztEQVhfQkFTRT0vc3lzL2J1cy9kYXgvZGV2aWNlcwomIzQzOwomIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH0KJiM0MztnZXRfc3RhdGUoKSB7IGNhdCAmIzM0OyRIUCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB9CiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZQomIzQzOyMgd3JpdGUmIzM5O3MgZXhpdCBzdGF0dXMgKDAgPSBhY2NlcHRlZCBieSB0aGUga2VybmVsKQomIzQzO3NldF9zdGF0ZSgpIHsgZWNobyAmIzM0OyQxJiMzNDsgJmd0OyAmIzM0OyRIUCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB9CiYjNDM7CiYjNDM7ZmluZF9rbWVtX2RheCgpIHsKJiM0MzsJbG9jYWwgZCBkcnYKJiM0MzsJZm9yIGQgaW4gJiMzNDskREFYX0JBU0UmIzM0Oy9kYXgqOyBkbwomIzQzOwkJWyAtZSAmIzM0OyRkL3N0YXRlJiMzNDsgXSB8fCBjb250aW51ZQomIzQzOwkJZHJ2PSQocmVhZGxpbmsgJiMzNDskZC9kcml2ZXImIzM0OyAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsJCVsgJiMzNDskKGJhc2VuYW1lICYjMzQ7JHtkcnY6LX0mIzM0OykmIzM0OyA9IGttZW0gXSB8fCBjb250aW51ZQomIzQzOwkJYmFzZW5hbWUgJiMzNDskZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMAomIzQzOwlkb25lCiYjNDM7CXJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7CiYjNDM7aWYgWyAmIzM0OyRVSUQmIzM0OyAhPSAwIF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0O211c3QgYmUgcnVuIGFzIHJvb3QmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztEQVg9JChmaW5kX2ttZW1fZGF4KQomIzQzO2lmIFsgLXogJiMzNDskREFYJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7bm8ga21lbS1ib3VuZCBkYXggZGV2aWNlIHdpdGggYSBzdGF0ZSBhdHRyaWJ1dGUmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MztIUD0kREFYX0JBU0UvJERBWC9zdGF0ZQomIzQzO09SSUc9JChnZXRfc3RhdGUpCiYjNDM7CiYjNDM7IyBBIGZhaWx1cmUgdG8gcmVhY2ggdGhlIGJhc2VsaW5lIGlzIGVudmlyb25tZW50YWwgKG1lbW9yeSBpbiB1c2UpLCBub3QgYW4KJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuCiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdIHx8IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KSYjMzQ7CiYjNDM7CVsgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKQomIzQzOwomIzQzO0RSVj0vc3lzL2J1cy9kYXgvZHJpdmVycy9rbWVtCiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2NrcwomIzQzOwomIzQzO2t0YXBfcHJpbnRfbXNnICYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKSYjMzQ7CiYjNDM7a3RhcF9zZXRfcGxhbiA4CiYjNDM7CiYjNDM7IyBBIHB1YmxpYyAoTl9NRU1PUlkpIGttZW0gbm9kZSBvbmxpbmVkIGludG8gYSBrZXJuZWwgem9uZSAob25saW5lL29ubGluZV9rZXJuZWwpCiYjNDM7IyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZAomIzQzOyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlcgomIzQzOyMgc3VjY2Vzc2Z1bGx5IG9ubGluZXMgb25saW5lX21vdmFibGUsIHRoZSBvbmUgbW9kZSB0aGF0IGlzIHJlbGlhYmx5IHVucGx1Z2dhYmxlLgomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD8KJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdF9vbmxpbmUmIzM0OyAtZ3QgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O29ubGluZV9tb3ZhYmxlOiBzdGF0ZT1vbmxpbmVfbW92YWJsZSwgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lIGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX21vdmFibGUgaWRlbXBvdGVudCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O29ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyBBIGRpZmZlcmVudCBvbmxpbmUgdHlwZSBpcyByZWplY3RlZCB3aXRob3V0IGFuIGludGVydmVuaW5nIHVucGx1Zy4gIFRoZSB3cml0ZQomIzQzOyMgaXMgcmVmdXNlZCBiZWZvcmUgYW55IGhvdHBsdWcsIHNvIHRoaXMgbmV2ZXIgYWN0dWFsbHkgb25saW5lcyBhIGtlcm5lbCB6b25lLgomIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyAhPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7cmVqZWN0IG9ubGluZV9rZXJuZWwgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWcgKG5vIGtlcm5lbC16b25lIG9ubGluZSkmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmVfbW92YWJsZS0mZ3Q7b25saW5lX2tlcm5lbCBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MzttdD0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IHVucGx1Z2dlZCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1sdCAmIzM0OyRtdF9vbmxpbmUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLSZndDsgJG10IGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtJmd0OyAkbXQmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKQomIzQzO3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gJiMzNDskYmVmb3JlJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O3JlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgVGhlIG9ubGluZV9tb3ZhYmxlIC0mZ3Q7IHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvCiYjNDM7IyByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyBhIGxhdGVyIHVucGx1ZyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlCiYjNDM7IyBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGVhY2ggaXRlcmF0aW9uIHJlYWxseSBhZGRzIGFuZCBmcmVlcyBtZW1vcnkuCiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZAomIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wOyBvbj0wOyBvZmY9MAomIzQzO2ZvciBpIGluIDEgMiAzOyBkbwomIzQzOwlpZiAhIHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaQomIzQzOwlvbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmkKJiM0MzsJb2ZmPSQobWVtdG90YWxfa2IpCiYjNDM7CWlmIFsgJiMzNDskb24mIzM0OyAtbGUgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXSB8fCBbICYjMzQ7JG9mZiYjMzQ7IC1nZSAmIzM0OyRvbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7aWYgWyAmIzM0OyRjeWNsZV9vayYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvdwomIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQKJiM0MztpZiBbIC13ICYjMzQ7JEFPQiYjMzQ7IF0gJmFtcDsmYW1wOyBbIC13ICYjMzQ7JERSVi91bmJpbmQmIzM0OyBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJb3JpZ19hb2I9JChjYXQgJiMzNDskQU9CJiMzNDspCiYjNDM7CWVjaG8gJiMzNDskREFYJiMzNDsgJmd0OyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBvZmZsaW5lICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi9iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJc2xlZXAgMQomIzQzOwlzdD0kKGdldF9zdGF0ZSkKJiM0MzsJZWNobyAmIzM0OyRvcmlnX2FvYiYjMzQ7ICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwJCSMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5CiYjNDM7CWlmIFsgJiMzNDskc3QmIzM0OyA9IG9mZmxpbmUgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC0mZ3Q7IHN0YXRlPW9mZmxpbmUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O2JpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSkmIzM0OwomIzQzOwlmaQomIzQzOwlzZXRfc3RhdGUgdW5wbHVnZ2VkIDImZ3Q7L2Rldi9udWxsCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO1sgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlcwomIzQzOyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXQKJiM0MzsjIHdpdGggYSBzaW5nbGUgJiMzNDtzdHVjayBvbmxpbmUmIzM0OyB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlCiYjNDM7IyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsCiYjNDM7IyBsZWF2aW5nIHRoZSByZXN0b3JlZCBzdGF0ZSBhYm92ZSB1bnRvdWNoZWQgb3RoZXJ3aXNlLiAgb25saW5lX21vdmFibGUgb25seToKJiM0MzsjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLgomIzQzO2lmIFsgLXcgJiMzNDskRFJWL3VuYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZV9tb3ZhYmxlCiYjNDM7ZmkKJiM0MztpZiBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmVfbW92YWJsZSBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgXTsgdGhlbgomIzQzOwltdF9vbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlkbWVzZyAtQyAyJmd0Oy9kZXYvbnVsbAomIzQzOwllY2hvICYjMzQ7JERBWCYjMzQ7ICZndDsgJiMzNDskRFJWL3VuYmluZCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CW10X2FmdGVyPSQobWVtdG90YWxfa2IpCiYjNDM7CSMgVGhlIGxlYWtlZCAmIzM0O1N5c3RlbSBSQU0gKGttZW0pJiMzNDsgcmVnaW9ucyBzdGF5IGluIHRoZSBpb21lbSB0cmVlOyByZWFkaW5nCiYjNDM7CSMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLgomIzQzOwkjIFdhbGsgL3Byb2MvaW9tZW0gdG8gcHJvdm9rZSB0aGF0IHVzZS1hZnRlci1mcmVlIChjYXVnaHQgYnkgS0FTQU4pLgomIzQzOwljYXQgL3Byb2MvaW9tZW0gJmd0OyAvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc3BsYXQ9JChkbWVzZyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLWNpRSAmIzM0O0tBU0FOfEJVRzp8dXNlLWFmdGVyLWZyZWV8Z2VuZXJhbCBwcm90ZWN0aW9ufE9vcHN8cmVmY291bnRfdCYjMzQ7KQomIzQzOwlpZiBbICYjMzQ7JHNwbGF0JiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10X2FmdGVyJiMzNDsgLWdlICYjMzQ7JG10X29uJiMzNDsgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDt1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLSZndDsgJG10X2FmdGVyIGtCKSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLSZndDsgJG10X2FmdGVyIGtCJiMzNDsKJiM0MzsJZmkKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7Y291bGQgbm90IG9ubGluZSBkZXZpY2UgZm9yIHVuYmluZC13aGlsZS1vbmxpbmUgdGVzdCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7dGltZW91dD05MAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIb3RwbHVnIFBhdGNoIGZvciBEQVggS21lbSBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIG1lbW9yeSBob3RwbHVnIGFuZCBEQVgga21lbSBkcml2ZXJzLiBUaGUgbWVhdCBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZWAsIGZvciBEQVgga21lbSBkZXZpY2VzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBvZnRlbiBlbnRyeSBwb2ludHMgZm9yIHN5emthbGxlci4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYGRyaXZlcnMvZGF4L2ttZW0uY2AgdG8gaGFuZGxlIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBzZWUgaXQgYWxzbyBhZGRzIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgdG8gYG1tL21lbW9yeV9ob3RwbHVnLmNgIGFuZCB0d2Vha3MgYGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIHRvIGFjY2VwdCBgb25saW5lX3R5cGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6ICpJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQ2FuIHN5emthbGxlciByZWFjaCBpdD8qCgpNeSBmaXJzdCBzdGVwIGlzIGZpZ3VyaW5nIG91dCBob3cgc3l6a2FsbGVyIGNhbiBhY2Nlc3MgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhlIHN5c2ZzIGF0dHJpYnV0ZSwgYHN0YXRlYC4gU3l6a2FsbGVyIG5lZWRzIHRvIGtub3cgdGhlIHBhdGg6IGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgLiAgVGhlIGNvcmUgZHJpdmVyLCBhY2NvcmRpbmcgdG8gdGhlIHBhdGNoLCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBTbyB0aGUgcXVlc3Rpb24gaXMsICpkb2VzIHN5emthbGxlciBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBlbmFibGVkIHRvIGV2ZW4gKnNlZSogdGhpcz8qCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIGFyZSBhbGwgZW5hYmxlZCBpbiBzeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgc3lzZnMgYXR0cmlidXRlLiBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCAtIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIHZhbHVlLCByZXNwZWN0aXZlbHkuIEFsc28sIEkmIzM5O2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGFuZCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBzaW5jZSB0aG9zZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBob3RwbHVnL2hvdHJlbW92ZSBsb2dpYyB3aWxsIGJlIGhhcHBlbmluZy4gSSBrbm93IHRoZSBwYXRjaCB3aWxsIGJlIG1ha2luZyBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGRyaXZlciBjb2RlLgoKT2theSwgSSYjMzk7bGwgZGlnIGludG8gYGRyaXZlcnMvZGF4L2ttZW0uY2AgYW5kIHN0YXJ0IHdpdGggYHN0YXRlX3N0b3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDMtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzQ0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQ1LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBkcml2ZXJzL2RheC9rbWVtLmNgIGZpbGUsIGZyb20gYSBrZXJuZWwgZHJpdmVyIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBkcml2ZXJzL2RheC9rbWVtLmMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgd2l0aGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBNeSBmb2N1cyBpcyBwaW5wb2ludGluZyBhbnkgYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvcmUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUsIGFzIHRoZXNlIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSBjb2RlIHRoYXQgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gcGVyc2lzdGVudCBtZW1vcnkgb3Igb3RoZXIgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZlYXR1cmVzLCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGFsZ29yaXRobXMsIG9yIGV2ZW4gb3B0aW1pemF0aW9ucyBtYWRlIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5IHdpdGhpbiB0aGUgREFYIHN1YnN5c3RlbS4gSSYjMzk7bGwgYmUgY2hlY2tpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IG1ldGhvZHMsIGVzcGVjaWFsbHkgdGhvc2UgY29uY2VybmluZyBkaXJlY3QgYWNjZXNzIHRvIG1lbW9yeS4gSSB3aWxsIHdhdGNoIG91dCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgb3Igb3RoZXIgbWVtb3J5LW1hcHBpbmcgYXNwZWN0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlciByZXNpZGVzLCBhbmQgdGhlIGNoYW5nZXMgaGVyZSB3aWxsIHBhaW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIERBWCBsYXllciBpcyBldm9sdmluZyB0byB1dGlsaXplIHBlcnNpc3RlbnQgbWVtb3J5IGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKmRheF9rbWVtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9Mjk9c3RhdGljIGJvb2wgYW55X2hvdHJlbW92ZV9mYWlsZWQ7XG5kcml2ZXJzL2RheC9rbWVtLmMtMzAtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzE6c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMi17XG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTY2PXN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy03Mi0vKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzo3MzpzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuZHJpdmVycy9kYXgva21lbS5jLTc0LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTkyLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTY2LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjE2NzpzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTE2OC1cdFx0XHRcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yMjMtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6MjI0OnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTIyNS1cdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjcxLSNlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6MjcyOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTI3My1cdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjg1LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjI4NjpzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yODctXHRcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTMxMS1cbmRyaXZlcnMvZGF4L2ttZW0uYzozMTI6c3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXG5kcml2ZXJzL2RheC9rbWVtLmMtMzEzLXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9Mzg5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7XG5kcml2ZXJzL2RheC9rbWVtLmMtMzkwLVxuZHJpdmVycy9kYXgva21lbS5jOjM5MTpzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbmRyaXZlcnMvZGF4L2ttZW0uYy0zOTIte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01MDgtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6NTA5OnN0YXRpYyBpbnQgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTAtXHRcdFx0XHQgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01MzItXG5kcml2ZXJzL2RheC9rbWVtLmM6NTMzOnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG5kcml2ZXJzL2RheC9rbWVtLmMtNTM0LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc1LSNlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6NTc2OnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc3LXtcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTkyLVxuZHJpdmVycy9kYXgva21lbS5jOjU5MzpzdGF0aWMgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyIGRldmljZV9kYXhfa21lbV9kcml2ZXIgPSB7XG5kcml2ZXJzL2RheC9rbWVtLmMtNTk0LVx0LnByb2JlID0gZGV2X2RheF9rbWVtX3Byb2JlLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01OTgtXG5kcml2ZXJzL2RheC9rbWVtLmM6NTk5OnN0YXRpYyBpbnQgX19pbml0IGRheF9rbWVtX2luaXQodm9pZClcbmRyaXZlcnMvZGF4L2ttZW0uYy02MDAte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy02MTktXG5kcml2ZXJzL2RheC9rbWVtLmM6NjIwOnN0YXRpYyB2b2lkIF9fZXhpdCBkYXhfa21lbV9leGl0KHZvaWQpXG5kcml2ZXJzL2RheC9rbWVtLmMtNjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTWVtb3J5IEhvdHBsdWcgYW5kIERBWCBrbWVtIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIHNvbWUgbmV3IGZlYXR1cmVzIHRvIHRoZSBrZXJuZWw7IG1haW5seSBmb2N1c2VkIGFyb3VuZCBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIERBWCBrbWVtIGRyaXZlci4gSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgYWRkaW5nIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIGFuZCwgb2YgY291cnNlLCB0aGUgY3JpdGljYWwgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIGxvZ2ljLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcy4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBhbmQgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGludGVyYWN0IHdpdGggYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBjZW50cmFsIGhvdHBsdWcgZnVuY3Rpb24sIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBpcyBjcnVjaWFsIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmFuZ2VzIGFyZSBhY3R1YWxseSBvZmZsaW5lJiMzOTtkIGFuZCByZW1vdmVkLCBmb3Igd2hpY2ggdGhlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9MjQzMD1pbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzNi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQzNzpcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzgtfVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDM5PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ0MS0vKipcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ0MjogKiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyAtIG9mZmxpbmUgYW5kIHJlbW92ZSBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NDMtICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU3LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDU4OmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ1OS1cdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjEtfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTIyOkVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyMy0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgdGhlIGR5bmFtaWMgYWRkaXRpb24gb2YgbWVtb3J5LiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGhpbnRzIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIG1lbW9yeSBob3RwbHVnLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIGRyaXZlcnMgYW5kLCBpbXBvcnRhbnRseSwgYSBtYW5hZ2VkIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gb3JjaGVzdHJhdGVzIHRoZSBhZGRpdGlvbiBmcm9tIGEgaGlnaC1sZXZlbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBsb2NrcyBpbnZvbHZlZC4gV2Ugd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIHRoZSBkZXZpY2UgZHJpdmVycyB0aGF0IHBhcnRpY2lwYXRlIGluIHRoZSBtZW1vcnkgaG90cGx1ZyBwcm9jZXNzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGhhbmRsaW5nIG1lY2hhbmlzbXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIG5ldyBtZW1vcnkgcmVnaW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtJiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MgbWFwLCBwYWdlIHRhYmxlcyBhcmUgdXBkYXRlZCAob3IgY3JlYXRlZCBpZiBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgbmV3IG5vZGUpLCBhbmQgYW55IG5lY2Vzc2FyeSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb3Igbm90aWZpY2F0aW9uIGlzIHBlcmZvcm1lZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xNjM4PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0MC0vKipcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY0MTogKiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggZXhwbGljaXQgb25saW5lX3R5cGVcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi0gKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjcxLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjcyOmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3My1cdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcwMi19XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDM6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFwmIzM0O2ttZW1cJiMzNDspO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNS0gKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzE2OiAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNy0gKlxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTcyMD1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyMi17XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MjM6XHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjQtXHRcdFx0bWhwX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgREFYIGttZW0gYW5kIE1lbW9yeSBIb3RwbHVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc29tZSBmYWlybHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZ2V0dGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIGNydWNpYWxseSwgdGhlIGhvdHBsdWcvaG90cmVtb3ZlIGxvZ2ljIGZvciBEQVgga21lbSBkZXZpY2VzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGdyYWIgbXkgYXR0ZW50aW9uIGFyZSBgc3RhdGVfc3RvcmVgLCBgc3RhdGVfc2hvd2AsIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBhcyB3ZWxsIGFzIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGV5IGFwcGVhciB0byBiZSB0aGUgY29yZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxhY2UuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVl9EQVhfS01FTWAsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCBhcmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5LiBPYnZpb3VzbHksIGBDT05GSUdfREVWX0RBWF9LTUVNYCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgc28gdGhhdCYjMzk7cyBhIGdpdmVuLiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSByZXF1aXJlZCwganVkZ2luZyBieSB0aGUgcHJlc2VuY2Ugb2YgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIGZvciBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBvYnZpb3VzbHkuIFdlIHdpbGwgbmVlZCBgQ09ORklHX0RFVl9EQVhgIGFzIHdlbGwuCgpJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZGF4L0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGUgZXhhY3QgbmFtZXMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWX0RBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo4OmNvbmZpZyBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0xOC1cbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cbmRyaXZlcnMvZGF4L0tjb25maWc6MzA6Y29uZmlnIERFVl9EQVhfSE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0hNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvICYjMzk7c3BlY2lmaWMgcHVycG9zZSYjMzk7IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNDktXG5kcml2ZXJzL2RheC9LY29uZmlnOjUwOmNvbmZpZyBERVZfREFYX0NYTFxuZHJpdmVycy9kYXgvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O0NYTCBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gQ1hMIFJBTSByZWdpb25zXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy02My1cbmRyaXZlcnMvZGF4L0tjb25maWc6NjQ6Y29uZmlnIERFVl9EQVhfSE1FTV9ERVZJQ0VTXG5kcml2ZXJzL2RheC9LY29uZmlnLTY1LVx0ZGVwZW5kcyBvbiBERVZfREFYX0hNRU0gXHUwMDI2XHUwMDI2IERBWFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNjctXG5kcml2ZXJzL2RheC9LY29uZmlnOjY4OmNvbmZpZyBERVZfREFYX0ZTREVWXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxuZHJpdmVycy9kYXgvS2NvbmZpZzo3Mzpjb25maWcgREVWX0RBWF9LTUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTc0LVx0dHJpc3RhdGUgXCYjMzQ7S01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBSaWdodCBub3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1lbW9yeSBob3RwbHVnIGFuZCBob3RyZW1vdmUgZnVuY3Rpb25hbGl0aWVzIGFyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3aWxsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9LY29uZmlnYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IEhvdHJlbW92ZSAtIENvbnNpZGVyYXRpb25zIGFuZCBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYE1FTU9SWV9IT1RSRU1PVkVgLiBIbW0sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHZhcmlvdXMgaW1wbGljYXRpb25zLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhpcyBwcm9wZXJseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIG1vZGVybiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29yZSBpc3N1ZSBpcywgb2YgY291cnNlLCB0aGUgcmVtb3ZhbCBvZiBtZW1vcnkgZnJvbSBhIHJ1bm5pbmcgc3lzdGVtLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlIGRlYWxsb2NhdGlvbjsgaXQmIzM5O3MgYSBkeW5hbWljIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUgcmVzb3VyY2UgYXZhaWxhYmxlLgoKRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIHdlJiMzOTtyZSBhdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBhIGJhcmUtbWV0YWwgc2V0dXAsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIGNvbnRleHQsIHJpZ2h0PyBUaGUgdmlydHVhbGl6YXRpb24gbGF5ZXIgYWRkcyBhbm90aGVyIGxheWVyIG9mIGluZGlyZWN0aW9uLCBhbmQgaXRzIGltcGxpY2F0aW9ucyBvbiBob3QtcmVtb3ZlIGJlaGF2aW91ciBjYW4gYmUgbm9uLXRyaXZpYWwsIGVzcGVjaWFsbHkgd2l0aCB0ZWNobmlxdWVzIGxpa2UgYmFsbG9vbmluZywgb3IgbWVtb3J5IG92ZXJjb21taXRtZW50LiBXaGF0IGFyZSB0aGUgaHlwZXJ2aXNvcuKAmXMgZ3VhcmFudGVlcyBhcm91bmQgdHJhbnNwYXJlbnQgbWVtb3J5IHJlbW92YWwsIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbj8KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHF1ZXN0aW9uIG9mIHRoZSBPUyBpdHNlbGYuIEhvdyB3ZWxsIGRvZXMgdGhlIGtlcm5lbCBoYW5kbGUgdGhlIGhvdC1yZW1vdmUgZXZlbnQ/IERvZXMgaXQgcHJvcGVybHkgdHJhY2sgYW5kIGZyZWUgcGFnZXMsIGFuZCBkb2VzIGl0IGRvIHNvIGluIGEgY29uc2lzdGVudCBhbmQgc2FmZSBtYW5uZXI/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBwYWdlIHRhYmxlIG1hcHBpbmdzLCBhbmQgYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24uIFdlJiMzOTtyZSBhc3N1bWluZyB0aGUga2VybmVsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCB0aGlzLCBidXQgY29uZmlndXJhdGlvbiBjYW4gdmFyeSB3aWRlbHkuIElmIHdlIGFyZSBpbiBhIHN5c3RlbSB3aXRoIG1hbnkgTlVNQSBub2Rlcywgd2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3QgdG8gdGhlIGxvY2FsaXR5IG9mIG1lbW9yeSBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGFwcGxpY2F0aW9ucyBydW5uaW5nLiBIb3cgYXJlIHRoZXkgaW5mb3JtZWQgKGlmIGF0IGFsbCkgb2YgdGhlIHNocmlua2luZyBtZW1vcnkgc3BhY2U/IElmIHdlJiMzOTtyZSByZW1vdmluZyBtZW1vcnkgdGhhdCYjMzk7cyBhY3RpdmVseSBpbiB1c2UsIG9yIGNvbnRhaW5pbmcgZGF0YSwgdGhlbiB3ZSYjMzk7cmUgaW4gdHJvdWJsZS4gSG93IGRvIHdlIGVuc3VyZSBhcHBsaWNhdGlvbnMgYXJlbiYjMzk7dCBhY2Nlc3Npbmcgb3IgZXhwZWN0aW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFib3V0IHRvIGJlIHVubWFwcGVkPyBBcmUgdGhleSB1dGlsaXppbmcgc2hhcmVkIG1lbW9yeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgaGFuZGxlIGl0PyBXaGF0IGFib3V0IG1lbW9yeS1tYXBwZWQgZmlsZXMgYW5kIGNhY2hlcz8gRGF0YSBsb3NzIGlzIHRoZSB1bHRpbWF0ZSBjb25jZXJuLiBUaGluayBvZiB0aGUgdHJhbnNhY3Rpb25hbCBhcHBsaWNhdGlvbnMsIGZvciBleGFtcGxlLiBXZSBuZWVkIGF0b21pY2l0eSBoZXJlLgoKVGhpbmtpbmcgb2YgdGhpcywgd2hhdCBhcmUgdGhlIGJlc3QgcHJhY3RpY2VzIGZvciBndWFyYW50ZWVpbmcgYSBzYWZlIG1lbW9yeSBob3QtcmVtb3ZlPyBXaGF0IGFyZSB0aGUgbWVjaGFuaXNtcyBhdmFpbGFibGU/IERvIHdlIG5lZWQgdG8gaW50cm9kdWNlIGV4cGxpY2l0IG1lbW9yeSBkcmFpbmluZyBwcm9jZWR1cmVzPyBXaGF04oCZcyB0aGUgaW1wbGljYXRpb24gZm9yIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBhYm91dCBpdHMgcGVyZm9ybWFuY2U/IElzIHRoZXJlIGEgcGVyZm9ybWFuY2UgaGl0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaG90LXJlbW92ZSBwcm9jZWR1cmUgaXRzZWxmPyBIb3cgYXJlIHdlIGFjY291bnRpbmcgZm9yIGxvY2sgY29udGVudGlvbj8KCkFuZCBmaW5hbGx5LCBkaWFnbm9zdGljcy4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoZSBob3QtcmVtb3ZlIHByb2Nlc3Mg4oCTIGEga2VybmVsIHBhbmljLCBhIGNvcnJ1cHRlZCBhcHBsaWNhdGlvbiwgb3Igc29tZSBvdGhlciB1bmV4cGVjdGVkIGZhaWx1cmUg4oCTIGhvdyBkbyB3ZSBkZWJ1ZyBpdD8gV2hhdCBraW5kIG9mIGxvZ2dpbmcgYW5kIHRyYWNpbmcgaXMgYXZhaWxhYmxlPyBXaGF0IHRvb2xzIGFyZSB3ZSBnb2luZyB0byB1c2UgdG8gZXhhbWluZSB0aGlzIGJlaGF2aW9yPwoKU28sIHllYWguLi4gYE1FTU9SWV9IT1RSRU1PVkVgLiBJdCYjMzk7cyBub3QgYSBzaW1wbGUgc3dpdGNoOyBpdOKAmXMgYSB3aG9sZSBlY29zeXN0ZW0gb2YgaW1wbGljYXRpb25zLiBXZSBuZWVkIGEgcmlnb3JvdXMgYW5kIHN5c3RlbWF0aWMgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODk9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU5MC1cbm1tL0tjb25maWc6NTkxOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU5Mi1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzY2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFRhcmdldHMqKgoKT2theSwgeWVzLCBJIHNlZSB0aGUgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcy4gRnJvbSB0aGUgbG9vayBvZiBpdCwgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW46IGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLgoKQWhhLCB3YWl0IGEgbWludXRlLiBJIHJlbWVtYmVyIHRoYXQgYHN0YXRlX3N0b3JlYCBhbmQgYHN0YXRlX3Nob3dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGxvY2F0ZWQgd2l0aGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBTbyB0aGF0JiMzOTtzIHRoZSBzY29wZSBoZXJlLiBTbyBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYW5kIGp1c3Qgd29yayB3aXRoIHRob3NlIHNwZWNpZmljIGluc3RhbmNlcyBpbiB0aGUgZGF4IGttZW0gZHJpdmVyOiBgc3RhdGVfc3RvcmVgLCBgc3RhdGVfc2hvd2AsIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4KCkhvd2V2ZXIsIGJlZm9yZSB3ZSBwcm9jZWVkIHRvbyBmYXIsIHRob3NlIG5hbWVzIGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCBhcmUgcXVpdGUgZ2VuZXJpYy4gU3l6a2FsbGVyIGNvdWxkIGVhc2lseSBwaWNrIHVwIG9uIHNpbWlsYXIgbmFtZXMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHVuaXF1ZSBpbiB0aGUgY29kZSBiYXNlLiBXZSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmM9NDI9c3RhdGljIHNzaXplX3QgZWVoX3BlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTUtXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jOjU2OnN0YXRpYyBzc2l6ZV90IGVlaF9wZV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jLTU3LVx0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jPTI2Mz1zdGF0aWMgaW50IGFnZW50X3RocmVhZF9mbih2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMtMjc1LVx0XHQgKiB0byBhdm9pZCBtaXhpbmcgdGhlIHR3byB3aXRoIHN1Y2ggYSBjb25maWd1cmF0aW9uIChvclxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYzoyNzY6XHRcdCAqIGVsc2UgZml4IGl0IGJ5IGFkZGluZyBhIG11dGV4IHRvIHN0YXRlX3N0b3JlIHRoYXQgd2UgY2FuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jLTI3Ny1cdFx0ICogc3luY2hyb25pemUgd2l0aCkuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTM5ND1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQwMy1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDUtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDEzPXN0YXRpYyBzc2l6ZV90IGNwdWlkbGVfc3RhdGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYy00MjYtXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0Mjc6c3RhdGljIHNzaXplX3QgY3B1aWRsZV9zdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQyOC1cdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4tLVxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3RhdGVfc3lzZnNfb3BzID0ge1xuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDQ2LVx0LnNob3cgPSBjcHVpZGxlX3N0YXRlX3Nob3csXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0NDc6XHQuc3RvcmUgPSBjcHVpZGxlX3N0YXRlX3N0b3JlLFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDQ4LX07XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM9MTk9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMwLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMyLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zMjc9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM0My1cbmRyaXZlcnMvZGF4L2ttZW0uYzozNDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYz0yMjE5PXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYXB0dXJlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0MS1cdC8qIFB1Ymxpc2ggdGhlIGVycm9yIHN0YXRlLCBhbmQgYW5ub3VuY2UgaXQgdG8gdGhlIHdvcmxkICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jOjIyNDI6XHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGNhcC1cdTAwM2VlcnJvcik7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jLTIyNDMtXHRpOTE1X2dwdV9jb3JlZHVtcF9wdXQoY2FwLVx1MDAzZWVycm9yKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyMTQ9aTkxNV9ncHVfY29yZWR1bXAoc3RydWN0IGludGVsX2d0ICpndCwgaW50ZWxfZW5naW5lX21hc2tfdCBlbmdpbmVfbWFzaywgdTMyIGR1bXBfZmxhZ3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjI4LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYzoyMjI5OnZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgaTkxNV9ncHVfY29yZWR1bXAgKmVycm9yKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjMwLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyNjA9dm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGludGVsX2d0ICpndCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jLTIyNzAtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jOjIyNzE6XHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGVycm9yKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjI3Mi1cdGk5MTVfZ3B1X2NvcmVkdW1wX3B1dChlcnJvcik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaD0zMDM9dm9pZCBpOTE1X3ZtYV9jYXB0dXJlX2ZpbmlzaChzdHJ1Y3QgaW50ZWxfZ3RfY29yZWR1bXAgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmgtMzA1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaDozMDY6dm9pZCBpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zMDctXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaD0zOTE9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjM5MjppOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oLTM5My17XG4tLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDAtXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00Mi1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxuLS1cbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYz01MTM9c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ncmV5YnVzL2ludGVyZmFjZS5jLTUyMy1cbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYzo1MjQ6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ncmV5YnVzL2ludGVyZmFjZS5jLTUyNS1cdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBvd2VyX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ1LVxuZHJpdmVycy9od21vbi9lbWMxNDAzLmM6NDY6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ3LVx0XHRcdFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYz05Mzc9c3RhdGljIHNzaXplX3Qgc2VxX2N1cnJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2MS1cbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYzo5NjI6c3RhdGljIHNzaXplX3Qgc2VxX2N1cnJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2My1cdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM9MTQxND1zdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG00eC1zeXNmcy5jLTE0MjUtXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM6MTQyNjpzdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG00eC1zeXNmcy5jLTE0MjctXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jPTM1OT1zdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jLTM2OS1cbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jOjM3MDpzdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jLTM3MS1cdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jPTI3Mj1zdGF0aWMgZW51bSBpaW9fZXZlbnRfaW5mbyBpaW9fZXZfYXR0cl9pbmZvKHN0cnVjdCBpaW9fZGV2X2F0dHIgKmF0dHIpXG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtMjc2LVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM6Mjc3OnN0YXRpYyBzc2l6ZV90IGlpb19ldl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYy0yNzgtXHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jPTM4NT1zdGF0aWMgaW50IGlpb19kZXZpY2VfYWRkX2V2ZW50KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsXG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtNDE2LVx0XHRcdHNob3cgPSBpaW9fZXZfc3RhdGVfc2hvdztcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jOjQxNzpcdFx0XHRzdG9yZSA9IGlpb19ldl9zdGF0ZV9zdG9yZTtcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxOC1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jPTExOT1zdGF0aWMgc3NpemVfdCB0cmFuc2llbnRfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMjktXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jOjEzMDpzdGF0aWMgc3NpemVfdCB0cmFuc2llbnRfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMzEtXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM9MTUxPXN0YXRpYyBERVZJQ0VfQVRUUihkdXJhdGlvbiwgMDY0NCwgdHJhbnNpZW50X2R1cmF0aW9uX3Nob3csXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTE1Mi1cdFx0ICAgdHJhbnNpZW50X2R1cmF0aW9uX3N0b3JlKTtcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM6MTUzOnN0YXRpYyBERVZJQ0VfQVRUUihzdGF0ZSwgMDY0NCwgdHJhbnNpZW50X3N0YXRlX3Nob3csIHRyYW5zaWVudF9zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTE1NC1cbi0tXG5kcml2ZXJzL21kL21kLmM9MzA3OT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9tZC9tZC5jOjMwODA6c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zMDgxLXtcbi0tXG5kcml2ZXJzL21kL21kLmM9MzI0OD1zdGF0aWMgc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgcmRldl9zdGF0ZSA9XG5kcml2ZXJzL21kL21kLmM6MzI0OTpfX0FUVFJfUFJFQUxMT0Moc3RhdGUsIFNfSVJVR098U19JV1VTUiwgc3RhdGVfc2hvdywgc3RhdGVfc3RvcmUpO1xuZHJpdmVycy9tZC9tZC5jLTMyNTAtXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM3MzU9cmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbWQvbWQuYy0zNzUxLVxuZHJpdmVycy9tZC9tZC5jOjM3NTI6XHRpZiAoZW50cnktXHUwMDNlc3RvcmUgPT0gc3RhdGVfc3RvcmUpIHtcbmRyaXZlcnMvbWQvbWQuYy0zNzUzLVx0XHRpZiAoY21kX21hdGNoKHBhZ2UsIFwmIzM0O3JlbW92ZVwmIzM0OykpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTQ2NDc9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvbWQvbWQuYzo0NjQ4OmFycmF5X3N0YXRlX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy00NjQ5LXtcbi0tXG5kcml2ZXJzL21kL21kLmM9NDc3OD1zdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2FycmF5X3N0YXRlID1cbmRyaXZlcnMvbWQvbWQuYzo0Nzc5Ol9fQVRUUl9QUkVBTExPQyhhcnJheV9zdGF0ZSwgU19JUlVHT3xTX0lXVVNSLCBhcnJheV9zdGF0ZV9zaG93LCBhcnJheV9zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL21kL21kLmMtNDc4MC1cbi0tXG5kcml2ZXJzL21kL21kLmM9NjExMz1tZF9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MTI1LVxuZHJpdmVycy9tZC9tZC5jOjYxMjY6XHRpZiAoZW50cnktXHUwMDNlc3RvcmUgPT0gYXJyYXlfc3RhdGVfc3RvcmUgXHUwMDI2XHUwMDI2IGNtZF9tYXRjaChwYWdlLCBcJiMzNDtjbGVhclwmIzM0OykpXG5kcml2ZXJzL21kL21kLmMtNjEyNy1cdFx0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihrb2JqLCBhdHRyKTtcbi0tXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM9NTY4PXN0YXRpYyBpcnFyZXR1cm5fdCBiaDE3NzBfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYyOC1cbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzo2Mjk6c3RhdGljIHNzaXplX3QgYmgxNzcwX3Bvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYy02MzAtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM9MTEzNj1zdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBiaDE3NzBfcG93ZXJfc3RhdGVfc2hvdyxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzoxMTM3Olx0XHRcdFx0XHRcdCBiaDE3NzBfcG93ZXJfc3RhdGVfc3RvcmUpO1xuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTExMzgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmM9MTU9c3RhdGljIHNzaXplX3QgYnRfY29leF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvc3lzZnMuYy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jOjMwOnN0YXRpYyBzc2l6ZV90IGJ0X2NvZXhfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmMtMzEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM9MTg4MT1zdGF0aWMgc3NpemVfdCBudm1ldF9hbmFfZ3JvdXBfYW5hX3N0YXRlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk1LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjE4OTY6c3RhdGljIHNzaXplX3QgbnZtZXRfYW5hX2dyb3VwX2FuYV9zdGF0ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTg5Ny1cdFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA0Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNTUtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNTY6c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA1Ny1cdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jPTExMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2JkX3JnYl9tb2RlX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMtMTExNy0vKiBUVUYgTGFwdG9wIEtleWJvYXJkIFJHQiBTdGF0ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYzoxMTE4OnN0YXRpYyBzc2l6ZV90IGtiZF9yZ2Jfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYy0xMTE5LVx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS1iYXNlLmM9Mjk1PXN0YXRpYyBzc2l6ZV90IGxpZ2h0aW5nX2NvbnRyb2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMDgtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktYmFzZS5jOjMwOTpzdGF0aWMgc3NpemVfdCBsaWdodGluZ19jb250cm9sX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS1iYXNlLmMtMzEwLVx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jPTU1OT1zdGF0aWMgc3NpemVfdCBmbl9sb2NrX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2h1YXdlaS13bWkuYy01NzEtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9odWF3ZWktd21pLmM6NTcyOnN0YXRpYyBzc2l6ZV90IGZuX2xvY2tfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jLTU3My1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xMzczPXN0YXRpYyBzc2l6ZV90IHdsc3dfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTM3Ny1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTM3ODpzdGF0aWMgc3NpemVfdCB3bHN3X2VtdWxzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzktXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTM5Nj1zdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQwMC1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTQwMTpzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTE0MDItXHRcdFx0XHRcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jPTE0MTY9c3RhdGljIHNzaXplX3Qgd3dhbl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDIwLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDIxOnN0YXRpYyBzc2l6ZV90IHd3YW5fZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMi1cdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xNDM2PXN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDQwLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDQxOnN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDQyLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jPTQyPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTUyLVxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmM6NTM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTU0LVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM9MTc4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE4OC0vKiBDaGFuZ2UgcmVtb3RlIHByb2Nlc3NvciBzdGF0ZSB2aWEgc3lzZnMgKi9cbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM6MTg5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmMtMTkwLVx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTE4MDQ9c3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODI0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MTgyNTpzdGF0aWMgc3NpemVfdCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTE4MjYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODQ3PXN0YXRpYyBERVZJQ0VfQVRUUihsYXN0X2tub3duX3Jlc2VydmF0aW9uX3N0YXRlLCAwNjQ0LFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MTg0ODpcdFx0ICAgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93LCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTE4NDktXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTMzMD1scGZjX29hc19zdXBwb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNDEtLyoqXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzoxMzQyOiAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnRcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNDMtICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTM1Mz1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM6MTM1NDpscGZjX2xpbmtfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTEzNTUtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTMxMjA9c3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdyxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjMxMjE6XHRcdGxwZmNfbGlua19zdGF0ZV9zdG9yZSk7XG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zMTIyLXN0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQwNj1scGZjX29hc19sdW5fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MTUtLyoqXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDE2OiAqIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSAtIFN0b3JlIHRoZSBzdGF0ZSAoZW5hYmxlZCBvciBkaXNhYmxlZClcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MTctICpcdFx0XHQgICAgb2Ygd2hldGhlciBsdW5zIHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTM0Mjk9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjM0MzA6bHBmY19vYXNfbHVuX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zNDMxLVx0XHRcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYz0zNDUyPXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX3hsYW5lX2x1bl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDUzOlx0XHQgICBscGZjX29hc19sdW5fc3RhdGVfc2hvdywgbHBmY19vYXNfbHVuX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0NTQtXG4tLVxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmM9MzM0ND1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmM6MzM0NTpmd19jcmFzaF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpjZGV2LFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMtMzM0Ni1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbXlyYi5jPTE3NjA9c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3Njc2kvbXlyYi5jLTE4MDQtXG5kcml2ZXJzL3Njc2kvbXlyYi5jOjE4MDU6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3Njc2kvbXlyYi5jLTE4MDYtXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3Njc2kvbXlycy5jPTkzND1zdGF0aWMgc3NpemVfdCByYWlkX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvc2NzaS9teXJzLmMtOTY4LVxuZHJpdmVycy9zY3NpL215cnMuYzo5Njk6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk3MC1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM9MjQ0PXZvaWQgYXBiX2N0cmxfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjQ4LVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYzoyNDk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYy0yNTAtXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYz0yODE9YXJjaGVfcGxhdGZvcm1fcG93ZXJvZmZfc2VxKHN0cnVjdCBhcmNoZV9wbGF0Zm9ybV9kcnZkYXRhICphcmNoZV9wZGF0YSlcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmMtMzA3LVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmM9Mjk2MD1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdGdfcHRfZ3BfYWx1YV9hY2Nlc3Nfc3RhdGVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYy0yOTY2LVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYzoyOTY3OnN0YXRpYyBzc2l6ZV90IHRhcmdldF90Z19wdF9ncF9hbHVhX2FjY2Vzc19zdGF0ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jLTI5NjgtXHRcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jPTUzMT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzZnMuYzo1MzI6Y3VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jLTUzMy1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0zNjY9c3RhdGljIERFVklDRV9BVFRSKGN1cnJlbnRfdnR5LFxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMzY4LVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzozNjk6c3RhdGljIHNzaXplX3QgaHZjc192dGVybV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTM3MC1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM9NDE5PXN0YXRpYyBERVZJQ0VfQVRUUih2dGVybV9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjQyMDpcdFx0aHZjc192dGVybV9zdGF0ZV9zaG93LCBodmNzX3Z0ZXJtX3N0YXRlX3N0b3JlKTtcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtNDIxLVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMTU9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMzA1PXN0YXRpYyBEUklWRVJfQVRUUl9STyhpcnFfaGFuZGxlcnMpO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy0xMzA2LVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYzoxMzA3OnN0YXRpYyBzc2l6ZV90IGlycV9oYW5kbGVyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEzMDgtXHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzY0PWludCBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzY5LSAqXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozNzA6ICogUGFpcmVkIHdpdGggaW5ldF9za19zdGF0ZV9zdG9yZSgpLiBVc2VkIGluIHBsYWNlcyB3ZSBkb24mIzM5O3QgaG9sZCBzb2NrZXQgbG9jazpcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3MS0gKiB0Y3BfZGlhZ19nZXRfaW5mbygpLCB0Y3BfZ2V0X2luZm8oKSwgdGNwX3BvbGwoKSwgZ2V0X3RjcDRfc29jaygpIC4uLlxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTM3Mz1zdGF0aWMgaW5saW5lIGludCBpbmV0X3NrX3N0YXRlX2xvYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3OS0vKipcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjM4MDogKiBpbmV0X3NrX3N0YXRlX3N0b3JlIC0gdXBkYXRlIHNrLVx1MDAzZXNrX3N0YXRlXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zODEtICogQHNrOiBzb2NrZXQgcG9pbnRlclxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM4Ni0gKi9cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjM4Nzp2b2lkIGluZXRfc2tfc3RhdGVfc3RvcmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbmV3c3RhdGUpO1xuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzg4LVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmM9NzcyPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy03OTgtXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjc5OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3Bvd2VyL21haW4uYy04MDAtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgbilcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Mi1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTE1OD1zdGF0aWMgaW50IHNldF9zdHBfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtMTYzLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjE2NDpzdGF0aWMgc3NpemVfdCBzdHBfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZCxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy0xNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEzNTY9RVhQT1JUX1NZTUJPTChpbmV0X3NrX3NldF9zdGF0ZSk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTM1Ny1cbm5ldC9pcHY0L2FmX2luZXQuYzoxMzU4OnZvaWQgaW5ldF9za19zdGF0ZV9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXdzdGF0ZSlcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzU5LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMjE9aW50IGluZXRfY3NrX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzQwLVx0ICovXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzNDE6XHRpbmV0X3NrX3N0YXRlX3N0b3JlKHNrLCBUQ1BfTElTVEVOKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM0Mi1cdGVyciA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZ2V0X3BvcnQoc2ssIGluZXQtXHUwMDNlaW5ldF9udW0pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI5NjA9dm9pZCB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMwMjYtXHQgKi9cbm5ldC9pcHY0L3RjcC5jOjMwMjc6XHRpbmV0X3NrX3N0YXRlX3N0b3JlKHNrLCBzdGF0ZSk7XG5uZXQvaXB2NC90Y3AuYy0zMDI4LX1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDQtXHQgKiB1bmRlciB0aGUgbXNrIHNvY2tldCBsb2NrLiBGb3IgdGhlIG1vbWVudCwgdGhhdCB3aWxsIG5vdCBicmluZ1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkwNTpcdCAqIGFueXRoaW5nIG1vcmUgdGhhbiBvbmx5IGNhbGxpbmcgaW5ldF9za19zdGF0ZV9zdG9yZSgpLCBiZWNhdXNlIHRoZVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwNi1cdCAqIG9sZCBzdGF0dXMgaXMga25vd24gKFRDUF9DTE9TRSkuXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA3LVx0ICovXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTA4Olx0aW5ldF9za19zdGF0ZV9zdG9yZShuZXdzaywgVENQX0xJU1RFTik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA5LVx0bG9ja19zb2NrKHNzayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2OT12b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTg4LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE4OTpcdGluZXRfc2tfc3RhdGVfc3RvcmUoc2ssIHN0YXRlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxOTAtfVxuLS1cbm5ldC9yZmtpbGwvY29yZS5jPTgwOD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxubmV0L3Jma2lsbC9jb3JlLmM6ODIwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIHdpdGggdGhlIGBzdGF0ZV9zdG9yZWAgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB0aGluayBhYm91dCBEQVggS01FTSBob3RwbHVnLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGFuZCB0aGUgY2xlYW51cCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGhhbmRsZWQgZ3JhY2VmdWxseS4KCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYCBieSBkaXJlY3RseSBjaGVja2luZyBgZHJpdmVycy9kYXgva21lbS5jYC4gWWVzLCBpdCYjMzk7cyB0aGVyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQXJlIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIHN1ZmZpY2llbnQ/IEkga25vdyBgREVWX0RBWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZSwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIAoKSGFuZyBvbiwgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBkb2VzbiYjMzk7dCBxdWl0ZSBtYWtlIHNlbnNlLiBBY2NvcmRpbmcgdG8gdGhlIEtjb25maWcsIGBERVZfREFYX0tNRU1gIGRvZXMgZGVwZW5kIG9uIGBERVZfREFYYCBidXQgYWxzbyBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIElzIHRoZSBLY29uZmlnIGNvcnJlY3Q/IFRpbWUgdG8gZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYGRyaXZlcnMvZGF4L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWX0RBWF9LTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9LY29uZmlnPTY4PWNvbmZpZyBERVZfREFYX0ZTREVWXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0tNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgJiMzNDtpdCYjMzQ7IGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRkZXBlbmRzIG9uIERFVl9EQVggXHUwMDI2XHUwMDI2IEZTX0RBWFxuICA3MTpcdFx0ZGVmYXVsdCBERVZfREFYXG4gIDcyOlx0XG4gIDczOlx0Y29uZmlnIERFVl9EQVhfS01FTVxuICA3NDpcdFx0dHJpc3RhdGUgXCYjMzQ7S01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXCYjMzQ7XG4gIDc1Olx0XHRkZWZhdWx0IERFVl9EQVhcbiAgNzY6XHRcdGRlcGVuZHMgb24gREVWX0RBWFxuICA3NzpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyAjIGZvciBhZGRfbWVtb3J5KCkgYW5kIGZyaWVuZHNcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgU3VwcG9ydCBhY2Nlc3MgdG8gcGVyc2lzdGVudCwgb3Igb3RoZXIgcGVyZm9ybWFuY2VcbiAgODA6XHRcdCAgZGlmZmVyZW50aWF0ZWQgbWVtb3J5IGFzIGlmIGl0IHdlcmUgU3lzdGVtIFJBTS4gVGhpcyBhbGxvd3NcbiAgODE6XHRcdCAgZWFzaWVyIHVzZSBvZiBwZXJzaXN0ZW50IG1lbW9yeSBieSB1bm1vZGlmaWVkIGFwcGxpY2F0aW9ucywgb3JcbiAgODI6XHRcdCAgYWRkcyBjb3JlIGtlcm5lbCBtZW1vcnkgc2VydmljZXMgdG8gaGV0ZXJvZ2VuZW91cyBtZW1vcnkgdHlwZXNcbiAgODM6XHRcdCAgKEhNRU0pIG1hcmtlZCBcJiMzNDtyZXNlcnZlZFwmIzM0OyBieSBwbGF0Zm9ybSBmaXJtd2FyZS5cbiAgODQ6XHRcbiAgODU6XHRcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxuICA4NjpcdFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbiAgODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyB0aGUgREVWX0RBWF9LTUVNIERlcGVuZGVuY3kgQ2hhaW4qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgREVWX0RBWF9LTUVNYCB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGl0IGluaGVyZW50bHkgcmVsaWVzIG9uIGBERVZfREFYYCwgdGhhdCBtdWNoIGlzIGNsZWFyLCBhbmQgYWxzbyBgTUVNT1JZX0hPVFBMVUdgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIERBWC4gTm93LCBoZXJlJiMzOTtzIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBNRU1PUllfSE9UUkVNT1ZFYCBpc24mIzM5O3QgKnN0cmljdGx5KiBlc3NlbnRpYWwgZm9yIGp1c3QgZW5hYmxpbmcgYERFVl9EQVhfS01FTWAgaXRzZWxmLiBCdXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2l0aG91dCBpdCwgdGhlICpob3RyZW1vdmUqIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIFNvLCB0byBlbnN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBjaGVjayBpZiBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTE2Nz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTEtXG5kcml2ZXJzL2RheC9rbWVtLmM6MjEyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuZHJpdmVycy9kYXgva21lbS5jLTIxMy0vKipcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MjcyPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzYtfVxuZHJpdmVycy9kYXgva21lbS5jOjI3NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzgtXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTM5MT1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTAwLVxuZHJpdmVycy9kYXgva21lbS5jOjUwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDItLypcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9NTc2PXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTU5MC19XG5kcml2ZXJzL2RheC9rbWVtLmM6NTkxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuZHJpdmVycy9kYXgva21lbS5jLTU5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBWCBhbmQgTWVtb3J5IEhvdHBsdWcvSG90cmVtb3ZlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggbWVtb3J5IGhvdC1yZW1vdmFsLCBjb25maXJtZWQgYnkgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYC4gVGhlIGNvcmUgY29uZmlncyBpbnZvbHZlZCBhcmUgYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIG5lZWQgYERFVl9EQVhfUE1FTWAsIGBERVZfREFYX0hNRU1gLCBvciBldmVuIGBERVZfREFYX0NYTGAgZm9yIERBWCBkZXZpY2UgY3JlYXRpb24uIFRoZSB0ZXN0IHNjcmlwdCwgd2l0aCBpdHMgYG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZmAgY29tbWFuZCwgc3VnZ2VzdHMgYXQgbGVhc3QgYERFVl9EQVhfUE1FTWAgb3IgcG9zc2libHkgYE5EX0JUVGAgYXJlIGluIHBsYXkuIEhvd2V2ZXIsIHJlbWVtYmVyIHN5emthbGxlciBjYW4gZ2VuZXJhdGUgREFYIGRldmljZXMsIHBlcmhhcHMgYnkgc3lzZnMsIGFzc3VtaW5nIHRoZSB1bmRlcmx5aW5nIGRyaXZlcnMgYXJlIHByZXNlbnQuIFRvIGJlIHNhZmUgYW5kIGNvbXByZWhlbnNpdmUsIEkmIzM5O2xsIGluY2x1ZGUgYERFVl9EQVhfUE1FTWAgYW5kIGBERVZfREFYX0hNRU1gIGZvciBub3cuIFVsdGltYXRlbHksIGBERVZfREFYYCBhbmQgYERFVl9EQVhfS01FTWAgYXJlIHRoZSBlc3NlbnRpYWxzLCBhbG9uZyB3aXRoIHRoZSBob3RwbHVnL2hvdHJlbW92ZSBvcHRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTt2ZSBnb3QgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBpcyByZWFjaGFibGUuIEFuZCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlgLiBMaWtld2lzZSwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgaXMgcmVhY2hlZCB0aHJvdWdoIGBkYXhfa21lbV9kb19ob3RwbHVnYCBhbmQgYGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlIG5vdCBtaXNzZWQgYW55dGhpbmcsIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFRoZXJlIGFyZSBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCwgYG1ocF9vbmxpbmVfdHlwZV90b19zdHJgIGFuZCBgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2VgLiBJJiMzOTtsbCBmb2N1cyBvbiBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NDk9RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01MC1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1MTpjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSlcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Mi17XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU2LX1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1NzpFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01OC1cbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zMzgtXHRlbHNlXG5kcml2ZXJzL2RheC9rbWVtLmM6MzM5Olx0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuZHJpdmVycy9kYXgva21lbS5jLTM0MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MTI5PWV4dGVybiBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cik7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MTMwOmNvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVmbGVjdGluZyBvbiBSZWNlbnQgQWRkaXRpb25zIGFuZCBhIFBvdGVudGlhbCBBcmVhIGZvciBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBjb25maXJtZWQg4oCTIHdlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgZnVuY3Rpb24gaW50ZWdyYXRlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgZXhjZWxsZW50LCBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCBpcyBub3cgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0ZXAgZm9yd2FyZC4KCk5vdywgd2l0aCB0aG9zZSBmdW5kYW1lbnRhbCBwaWVjZXMgaW4gcGxhY2UsIEkgbmVlZCB0byBzaGlmdCBmb2N1cy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWxsIGFib3V0LiBUaGVyZSYjMzk7cyBhIGRlY2VudCBjaGFuY2UgaXQgaGFzIGEgcmVsYXRpb25zaGlwIHRvIHRoZSBwcmlvciBmdW5jdGlvbnMsIGluIHNvbWUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MzE9c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzUtXG5kcml2ZXJzL2RheC9rbWVtLmM6MzY6XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNy1cdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oPTEwMj1pbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnkuaC0xMDQtLyoqXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oOjEwNTogKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTEwNi0gKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTE0LSAqL1xuaW5jbHVkZS9saW51eC9tZW1vcnkuaDoxMTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5ODQKCQkJCQkJCW91dHB1dDogMjQ1CgkJCQkJCQl0aG91Z2h0czogNDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBjb25maXJtZWQgdGhlIGluY2x1c2lvbiBvZiBgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2VgLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGhvdHBsdWcgaW1wbGVtZW50YXRpb24uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQmIzM5O3MgcmVsZXZhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlLiBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBtaHBfb25saW5lX3R5cGVfdG9fc3RyYCBhcmUgZ2xvYmFsLCBpbXBseWluZyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGFjcm9zcyB0aGUgc3lzdGVtLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIEFoLCBhbmQgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhlIGNvbmZpZyBpcyBleGFjdGx5IGBDT05GSUdfREVWX0RBWF9LTUVNYC4gWWVzLCBpdCBpcy4KClRoZSBsb2dpYyBzZWVtcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgc2V0dGluZyB1cCBhIGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBob3RwbHVnIHN0YXRlIGZvciBEQVgga21lbSBkZXZpY2VzLiBJdCYjMzk7cyBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSB0aGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIHByb2Nlc3NlcyBmb3IgbWVtb3J5IHJhbmdlcywgdXNpbmcgdGhvc2UgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9pbml0X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7bWhwX29ubGluZV90eXBlX3RvX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBtZW1vcnkgaG90cGx1ZyBzdGF0ZSBvZiBEQVgga21lbSBkZXZpY2VzLiBJdCBhZGRzIGxvZ2ljIHRvIGhhbmRsZSBob3RwbHVnZ2luZyBhbmQgaG90cmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgaW5jbHVkaW5nIG5ldyBjb3JlIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9ucyBsaWtlIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O29mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDttaHBfb25saW5lX3R5cGVfdG9fc3RyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjg6NTcuOTQ3ODQyMTAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NDMyNzcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwibWhwX29ubGluZV90eXBlX3RvX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyODo1Ny45NDc4NDk1NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mjk2MTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYzNzEyMmU1YTIyZDMwZDdhNTBlYmJmM2Q0YWQyZWE0ZTJiNGU2NTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwNDoyODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXggYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XFxuQEAgLTE1MSwzICsxNTEsMjkgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdG1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpc1xcbiBcXHRcXHR0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC1cXG4gXFx0XFx0bWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJ3RydWUnIG9yICdmb3JjZScuXFxcIlxcbitcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcXG4rRGF0ZTpcXHRcXHRKdW5lLCAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0djYuMjFcXG4rQ29udGFjdDpcXHRudmRpbW1AbGlzdHMubGludXguZGV2XFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cXG4rXFx0XFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cXG4rXFx0XFx0T25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuXFxuK1xcbitcXHRcXHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXFxuK1xcdFxcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxcbitcXG4rXFx0XFx0ICBcXFwidW5wbHVnZ2VkXFxcIjogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcXG4rXFx0XFx0ICBcXFwib25saW5lXFxcIjogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbFxcbitcXHRcXHQgIFxcXCJvbmxpbmVfa2VybmVsXFxcIjogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTFxcbitcXHRcXHQgIFxcXCJvbmxpbmVfbW92YWJsZVxcXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXFxuK1xcbitcXHRcXHRcXFwib2ZmbGluZVxcXCIgKG1lbW9yeSBibG9ja3MgYXJlIHByZXNlbnQgYnV0IG9mZmxpbmUpIG1heSBhbHNvIGJlXFxuK1xcdFxcdHJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGVcXG4rXFx0XFx0YXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyBcXFwib2ZmbGluZVxcXCIuICBJdCBjYW5ub3QgYmUgd3JpdHRlbixcXG4rXFx0XFx0YXMgaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cXG4rXFxuK1xcdFxcdEEgZGV2aWNlIGNhbiBvbmx5IGJlIG9ubGluZWQgZnJvbSB0aGUgXFxcInVucGx1Z2dlZFxcXCIgc3RhdGUsIHNvIGFcXG4rXFx0XFx0ZGV2aWNlIG11c3QgYmUgcmV0dXJuZWQgdG8gXFxcInVucGx1Z2dlZFxcXCIgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkXFxuK1xcdFxcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbmluZGV4IGJjZmUyZDlmNGFkYmQ5Li41ZWVhZDMzNDZmMWUzMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG5AQCAtNDYsNiArNDYsMTUgQEAgaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpXFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcXG4rXFxuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxcbit7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIDAgfHwgb25saW5lX3R5cGUgXFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gb25saW5lX3R5cGVfdG9fc3RyW29ubGluZV90eXBlXTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcXG4gXFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmMgYi9kcml2ZXJzL2RheC9idXMuY1xcbmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5jXFxuQEAgLTEsNiArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodChjKSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZW1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG5AQCAtMzk0LDYgKzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRcXHQuc2l6ZSA9IDAsXFxuIFxcdFxcdFxcdC5pZCA9IC0xLFxcbiBcXHRcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFxcdTAwMjZkYXRhKTtcXG4gXFxuQEAgLTE1MjcsNiArMTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpXFxuIFxcdGlkYV9pbml0KFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VpZGEpO1xcbiBcXG4gXFx0ZGV2X2RheC1cXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnk7XFxuK1xcdGRldl9kYXgtXFx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cXHUwMDNlb25saW5lX3R5cGU7XFxuIFxcbiBcXHRpbm9kZSA9IGRheF9pbm9kZShkYXhfZGV2KTtcXG4gXFx0ZGV2LVxcdTAwM2VkZXZ0ID0gaW5vZGUtXFx1MDAzZWlfcmRldjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxcbmluZGV4IDU5MDkxNzFhNDQyOGI3Li4zYmM3NmJjMGExNDU4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5oXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpZm5kZWYgX19EQVhfQlVTX0hfX1xcbiAjZGVmaW5lIF9fREFYX0JVU19IX19cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNywxMyBAQCBzdHJ1Y3QgZGF4X3JlZ2lvbjtcXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXFxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcXG4gXFxuKy8qXFxuKyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lXFxuKyAqIHBvbGljeSwgc28gdGhlIHN5c3RlbSBkZWZhdWx0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGttZW0gZHJpdmVyIGJpbmRzLFxcbisgKiAobm90IGF0IGRldmljZS1jcmVhdGlvbiB0aW1lLCB3aGljaCB3b3VsZCBmcmVlemUgYSBzdGFsZSBwb2xpY3kpLlxcbisgKi9cXG4rI2RlZmluZSBEQVhfT05MSU5FX0RFRkFVTFRcXHQoLTEpXFxuK1xcbiBzdHJ1Y3QgZGF4X3JlZ2lvbiAqYWxsb2NfZGF4X3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCByZWdpb25faWQsXFxuIFxcdFxcdHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCB0YXJnZXRfbm9kZSwgdW5zaWduZWQgaW50IGFsaWduLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG5AQCAtMjYsNiArMzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcXG4gXFx0cmVzb3VyY2Vfc2l6ZV90IHNpemU7XFxuIFxcdGludCBpZDtcXG4gXFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xcbitcXHRpbnQgb25saW5lX3R5cGU7XFx0LyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXFxuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXFxuKysrIGIvZHJpdmVycy9kYXgvY3hsLmNcXG5AQCAtMjcsNiArMjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmFuZ2VfbGVuKFxcdTAwMjZjeGxyX2RheC1cXHUwMDNlaHBhX3JhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSB0cnVlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiBcXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cXG4gc3RydWN0IGRheF9kZXZpY2U7XFxuQEAgLTc5LDYgKzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xcbiAgKiBAZGV2OiBkZXZpY2UgY29yZVxcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XFxuKyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXFxuKyAqXFx0XFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcXG4gICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkXFxuICAqL1xcbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcXG4gXFx0c3RydWN0IGRldmljZSBkZXY7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXFxuIFxcdGludCBucl9yYW5nZTtcXG4gXFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXFxuQEAgLTM3LDYgKzM3LDcgQEAgc3RhdGljIGludCBkYXhfaG1lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHQuaWQgPSAtMSxcXG4gXFx0XFx0LnNpemUgPSByZWdpb25faWRsZSA/IDAgOiByYW5nZV9sZW4oXFx1MDAyNm1yaS1cXHUwMDNlcmFuZ2UpLFxcbiBcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgva21lbS5jIGIvZHJpdmVycy9kYXgva21lbS5jXFxuaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjE5ZWZmZTBkYTNkY2VmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xcbkBAIC0zMyw5ICszMyw3IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXFxuIFxcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlcmFuZ2VzW2ldO1xcbiBcXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXFx1MDAyNmRheF9yYW5nZS1cXHUwMDNlcmFuZ2U7XFxuIFxcbi1cXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cXG4tXFx0ci1cXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xcbi1cXHRyLVxcdTAwM2VlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XFxuK1xcdCpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpO1xcbiBcXHRpZiAoci1cXHUwMDNlc3RhcnQgXFx1MDAzZT0gci1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHItXFx1MDAzZXN0YXJ0ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0O1xcbiBcXHRcXHRyLVxcdTAwM2VlbmQgPSByYW5nZS1cXHUwMDNlZW5kO1xcbkBAIC00NCw5ICs0MiwxNSBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcXHQoLTEpXFxuK1xcbiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7XFxuIFxcdGNvbnN0IGNoYXIgKnJlc19uYW1lO1xcbiBcXHRpbnQgbWdpZDtcXG4rXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0c3RydWN0IGRldl9kYXggKmRldl9kYXg7XFxuK1xcdGludCBzdGF0ZTtcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi9cXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcXG4gfTtcXG4gXFxuQEAgLTY1LDE1ICs2OSwzMzQgQEAgc3RhdGljIHZvaWQga21lbV9wdXRfbWVtb3J5X3R5cGVzKHZvaWQpXFxuIFxcdG10X3B1dF9tZW1vcnlfdHlwZXMoXFx1MDAyNmttZW1fbWVtb3J5X3R5cGVzKTtcXG4gfVxcbiBcXG4rLyogVHJ1ZSBmb3IgdGhlIG9ubGluZSBzdGF0ZXMgYSBrbWVtIGRheCBkZXZpY2UgY2FuIGhvbGQuICovXFxuK3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8XFxuK1xcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcXG4rXFx0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXhfa21lbV9kb19ob3RwbHVnIC0gaG90cGx1ZyBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqIEBvbmxpbmVfdHlwZTogdGhlIG9ubGluZSBwb2xpY3kgdG8gdXNlIGZvciB0aGUgbWVtb3J5IGJsb2Nrc1xcbisgKlxcbisgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlXFxuKyAqIHByb3ZpZGVkIG9ubGluZSBwb2xpY3kgKG9mZmxpbmUsIG9ubGluZSwgb25saW5lX21vdmFibGUsIG9ubGluZV9rZXJuZWwpLlxcbisgKlxcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxcbisgKi9cXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgb25saW5lX3R5cGUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0aW50IGksIHJjLCBhZGRlZCA9IDA7XFxuK1xcdG1ocF90IG1ocF9mbGFncztcXG4rXFxuK1xcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbitcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogaW5pdF9yZXNvdXJjZXMoKSBpcyBiZXN0LWVmZm9ydDogaWYgYSByZXNlcnZhdGlvbiBjb25mbGljdFxcbitcXHRcXHQgKiBvY2N1cnMgaXQga2VlcHMgdGhlIHJhbmdlIGJ1dCBsZWF2ZXMgcmVzW2ldPU5VTEwuIEZvciBob3RwbHVnXFxuK1xcdFxcdCAqIG9uIHByb2JlIHN5c3RlbXMsIHRoaXMgbWVhbnMga21lbSB3aWxsIHBhcnRpYWxseSBvbmxpbmUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGJlaGF2aW9yIG5vdCB0byBicmVhayB0aG9zZSBzeXN0ZW1zLlxcbitcXHRcXHQgKiBGb3IgdGhvc2Ugc3lzdGVtcyAtIGF0b21pY2l0eSBvbmx5IGFwcGxpZXMgdG8gdmFsaWQgcmFuZ2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xcbitcXHRcXHRpZiAoZGV2X2RheC1cXHUwMDNlbWVtbWFwX29uX21lbW9yeSlcXG4rXFx0XFx0XFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbitcXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmMgPSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS1cXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXFxuK1xcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4rXFx0XFx0XFx0XFx0b25saW5lX3R5cGUpO1xcbitcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogUmVsZWFzZSB0aGUgcmVzZXJ2YXRpb24gZm9yIHRoZSByYW5nZSB0aGF0IGZhaWxlZCB0b1xcbitcXHRcXHRcXHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcXG4rXFx0XFx0XFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNlcmVzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VyZXNbaV0gPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChhZGRlZClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHRhZGRlZCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gYWRkZWQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xcbisgKlxcbisgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxcbisgKlxcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxcbisgKi9cXG4rc3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuK1xcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4rXFxuK1xcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNraXAgcmFuZ2VzIGFscmVhZHkgYWRkZWQgKi9cXG4rXFx0XFx0aWYgKGRhdGEtXFx1MDAzZXJlc1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBSZWdpb24gaXMgcGVybWFuZW50bHkgcmVzZXJ2ZWQgaWYgaG90cmVtb3ZlIGZhaWxzLiAqL1xcbitcXHRcXHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbitcXHRcXHRpZiAoIXJlcykge1xcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJ3RcXG4rXFx0XFx0XFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKG1hcHBlZClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gcmVzO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxcbitcXHRcXHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcXG4rXFx0XFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcXG4rXFx0XFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVzLVxcdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcXG4rXFx0XFx0bWFwcGVkKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG1hcHBlZDtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuKy8qKlxcbisgKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXFxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcXG4rICpcXG4rICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxcbisgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxcbisgKiB0aGUgZGV2aWNlIGlzIHJldHVybmVkIHRvIGl0cyBwcmlvciBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJhbmdlICpyYW5nZXM7XFxuK1xcdGludCBpLCBucl9yYW5nZXMgPSAwLCByYztcXG4rXFxuK1xcdHJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmFuZ2VzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdC8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuK1xcbitcXHRcXHRpZiAoIWRhdGEtXFx1MDAzZXJlc1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmFuZ2VzW25yX3JhbmdlcysrXSA9IHJhbmdlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xcbitcXHRpZiAoIW5yX3Jhbmdlcykge1xcbitcXHRcXHRrZnJlZShyYW5nZXMpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7XFxuK1xcdGtmcmVlKHJhbmdlcyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHQvKiBSZWNvdmVyYWJsZTogdGhlIHJhbmdlcyByb2xsZWQgYmFjaywgbm90aGluZyBpcyBsZWFrZWQgeWV0LiAqL1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbitcXG4rLyoqXFxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXFxuK1xcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxcbitcXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTigoKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAoZGF0YS1cXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXFxuK1xcdFxcdCBcXFwiSG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXG4rXFx0LyogXFxcInVucGx1Z2dlZFxcXCIgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xcbitcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcXFwidW5wbHVnZ2VkXFxcIikpXFxuK1xcdFxcdHJldHVybiBEQVhfS01FTV9VTlBMVUdHRUQ7XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xcbitcXHQvKiBEaXNhbGxvdyBcXFwib2ZmbGluZVxcXCI6IGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi9cXG4rXFx0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcXG4rXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXFxuK1xcdFxcdHN0YXRlX3N0ciA9IFxcXCJ1bnBsdWdnZWRcXFwiO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHN0YXRlX3N0ciA/OiBcXFwidW5rbm93blxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcXG4rXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIG9ubGluZV90eXBlO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cXG4rXFx0aWYgKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0ZGF0YS1cXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbitcXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7XFxuIFxcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcXG4tXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbi1cXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcdGludCBpLCByYztcXG4gXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbiBcXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzMyw2OCArNDU2LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWdfbWdpZDtcXG4gXFx0ZGF0YS1cXHUwMDNlbWdpZCA9IHJjO1xcbitcXHRkYXRhLVxcdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XFxuK1xcdGRhdGEtXFx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xcbitcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4tXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbi1cXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4tXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRpZiAoIXJlcykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxcbi1cXHRcXHRcXHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAobWFwcGVkKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXFxuLVxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbi1cXHRcXHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xcbi1cXHRcXHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXMtXFx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4gXFxuLVxcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4tXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuLVxcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzb3VyY2VzO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbi1cXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbi1cXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xcbitcXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cXG4rXFx0b25saW5lX3R5cGUgPSBkZXZfZGF4LVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4rXFx0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcXG4rXFx0XFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4gXFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4tXFx0XFx0XFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XFxuLVxcdFxcdFxcdGtmcmVlKHJlcyk7XFxuLVxcdFxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdGlmIChtYXBwZWQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXBwZWQrKztcXG4tXFx0fVxcbitcXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuK1xcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2hvdHBsdWc7XFxuK1xcdGRhdGEtXFx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XFxuIFxcbi1cXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4rXFx0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc3RhdGUgc3lzZnMgZW50cnlcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVxdWVzdF9tZW06XFxuK2Vycl9ob3RwbHVnOlxcbitcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rZXJyX3Jlc291cmNlczpcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuIFxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbiBlcnJfcmVnX21naWQ6XFxuIFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG5AQCAtMjA2LDY1ICs0OTksODYgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbi1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbisvKlxcbisgKiBSZW1vdmUgdGhlIGRldmljZSdzIGFkZGVkIHJhbmdlcyB3aXRoIHJlbW92ZV9tZW1vcnkoKS5cXG4rICogVW5saWtlIHRoZSBzeXNmcyB1bnBsdWcgcGF0aCBpdCBuZXZlciBvZmZsaW5lcyBhbmQgZmFpbHMgaWYgdGhlIGJsb2NrcyBhcmVcXG4rICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cXG4rICpcXG4rICogUmV0dXJucyAwIG9ubHkgaWYgZXZlcnkgYWRkZWQgcmFuZ2Ugd2FzIHJlbW92ZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuIHtcXG4tXFx0aW50IGksIHN1Y2Nlc3MgPSAwO1xcbi1cXHRpbnQgbm9kZSA9IGRldl9kYXgtXFx1MDAzZXRhcmdldF9ub2RlO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlZGV2O1xcbi1cXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgaSwgcmMgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgaGF2ZSBvbmUgc2hvdCBmb3IgcmVtb3ZpbmcgbWVtb3J5LCBpZiBzb21lIG1lbW9yeSBibG9ja3Mgd2VyZSBub3RcXG4tXFx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXFxuLVxcdCAqIHRoZXJlIGlzIG5vIHdheSB0byBob3RyZW1vdmUgdGhpcyBtZW1vcnkgdW50aWwgcmVib290IGJlY2F1c2UgZGV2aWNlXFxuLVxcdCAqIHVuYmluZCB3aWxsIHN1Y2NlZWQgZXZlbiBpZiB3ZSByZXR1cm4gZmFpbHVyZS5cXG4tXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4tXFx0XFx0aW50IHJjO1xcbiBcXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldIHx8IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFxcdTAwMjZyYW5nZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogcmFuZ2Ugd2FzIG5ldmVyIGFkZGVkIGR1cmluZyBwcm9iZSAqL1xcbi1cXHRcXHRpZiAoIWRhdGEtXFx1MDAzZXJlc1tpXSkge1xcbi1cXHRcXHRcXHRzdWNjZXNzKys7XFxuK1xcdFxcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSkpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcdFxcdFxcdHJjID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4gXFxuLVxcdFxcdHJjID0gcmVtb3ZlX21lbW9yeShyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZSkpO1xcbi1cXHRcXHRpZiAocmMgPT0gMCkge1xcbi1cXHRcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4tXFx0XFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4tXFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4tXFx0XFx0XFx0c3VjY2VzcysrO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbitzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbit7XFxuK1xcdGludCBub2RlID0gZGV2X2RheC1cXHUwMDNldGFyZ2V0X25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcbitcXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHQvKlxcbitcXHQgKiBJZiBVTlBMVUdHRUQ6IHN0YXRlIGlzIGtub3duIGNsZWFuIGFuZCByZWJvb3QgY2FuIGNsZWFuIHVwLlxcbitcXHQgKlxcbitcXHQgKiBJZiBPTkxJTkVfKjogbWVtb3J5IGNhbm5vdCBiZSByZW1vdmVkIGhlcmU6IG9mZmxpbmluZyBkdXJpbmcgYW5cXG4rXFx0ICogdW5pbnRlcnJ1cHRpYmxlIHVuYmluZCBjYW4gZGVhZGxvY2suIExlYWsgdGhlIHJlc291cmNlcyB1bnRpbCByZWJvb3QuXFxuK1xcdCAqXFxuK1xcdCAqIElmIE9GRkxJTkU6IGJsb2NrcyBhcmUgYXR0ZW1wdGVkIHRvIHJlbW92ZSB3aXRoIHJlbW92ZV9tZW1vcnkoKSxcXG4rXFx0ICogd2hpY2ggbmV2ZXIgYXR0ZW1wdHMgb2ZmbGluaW5nLiBBIGJsb2NrIG9ubGluZWQgYmVoaW5kIG91ciBiYWNrXFxuK1xcdCAqIGZhaWxzIC1FQlVTWSBhbmQgaXMgbGVha2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVxcdTAwM2VzdGF0ZSkpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiSG90cGx1ZyByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fSBlbHNlIGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhkZXZfZGF4LCBkYXRhKSkge1xcbiBcXHRcXHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XFxuLVxcdFxcdGRldl9lcnIoZGV2LFxcbi1cXHRcXHRcXHRcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBjYW5ub3QgYmUgaG90cmVtb3ZlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3RcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN1Y2Nlc3MgXFx1MDAzZT0gZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2UpIHtcXG4tXFx0XFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cXHUwMDNlbWdpZCk7XFxuLVxcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG4tXFx0XFx0a2ZyZWUoZGF0YSk7XFxuLVxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cXG4tXFx0XFx0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcXG4tXFx0XFx0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxcbi1cXHRcXHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXFxuLVxcdFxcdCAqIHRpbGwgbmV4dCByZWJvb3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xcbi1cXHR9XFxuK1xcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbitcXHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVxcdTAwM2VtZ2lkKTtcXG4rXFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbitcXHRrZnJlZShkYXRhKTtcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuK1xcdC8qXFxuK1xcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxcbitcXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxcbitcXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXFxuK1xcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcXG4rXFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cXG4rXFx0ICovXFxuK1xcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2ZGV2X2RheC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXFx1MDAyNmRldl9hdHRyX3N0YXRlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXFxuIFxcdCAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAnMCcgdG8gLVxcdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jXFxuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xcbisrKyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kYXhfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdC5wZ21hcCA9IFxcdTAwMjZwZ21hcCxcXG4gXFx0XFx0LnNpemUgPSByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcXG4rXFx0XFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxcbmluZGV4IDQ2M2RjMDJmNmNmZjA1Li4xNzgzMjk5MDczZTQ3OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgXFx1MDAzY1xcdTAwM2MgU0VDVElPTl9TSVpFX0JJVFMpXFxuIFxcbkBAIC0xMDAsNiArMTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pO1xcbiB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKHZvaWQpO1xcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XFxuIFxcbisvKipcXG4rICogbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UgLSBhbGlnbiBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgdG8gbWVtb3J5IGJsb2Nrc1xcbisgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxcbisgKlxcbisgKiBBbGlnbnMgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgYW5kIHRoZSBlbmQgYWRkcmVzcyBkb3duIHRvIG1lbW9yeSBibG9ja1xcbisgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3RcXG4rICogb3BlcmF0ZSBvbiBtZW1vcnktYmxvY2sgYWxpZ25lZCByYW5nZXMuXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkXFxuKyAqIHJhbmdlIGlzIHZhbGlkIChhbGlnbmVkLnN0YXJ0IFxcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpXFxuK3tcXG4rXFx0c3RydWN0IHJhbmdlIGFsaWduZWQ7XFxuK1xcbitcXHRhbGlnbmVkLnN0YXJ0ID0gQUxJR04ocmFuZ2UtXFx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4rXFx0YWxpZ25lZC5lbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4rXFx0LyogTm8gd2hvbGUgYmxvY2sgZml0cyAoZS5nLiByYW5nZSBiZWxvdyB0aGUgZmlyc3QgYm91bmRhcnkpOiBlbXB0eS4gKi9cXG4rXFx0aWYgKGFsaWduZWQuZW5kIFxcdTAwM2M9IGFsaWduZWQuc3RhcnQpXFxuK1xcdFxcdGFsaWduZWQuc3RhcnQgPSBhbGlnbmVkLmVuZDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhbGlnbmVkLmVuZCAtPSAxO1xcbitcXG4rXFx0cmV0dXJuIGFsaWduZWQ7XFxuK31cXG4rXFxuIHN0cnVjdCBtZW1vcnlfbm90aWZ5IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcbmluZGV4IDdjOWQ2NjcyOWM2MDk1Li5kYjEwZDUwZjMwYWUxYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG5AQCAtMTI3LDYgKzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIGV4dGVybiB1NjQgbWF4X21lbV9zaXplO1xcbiBcXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xcbiBcXG4gLyogSWYgbW92YWJsZV9ub2RlIGJvb3Qgb3B0aW9uIHNwZWNpZmllZCAqL1xcbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcXG5AQCAtMjY3LDYgKzI2OCw4IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKTtcXG4gXFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuQEAgLTI4Myw2ICsyODYsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcylcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbkBAIC0yOTQsNiArMzAzLDkgQEAgZXh0ZXJuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKTtcXG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxcbiBcXHRcXHRcXHQgICAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG4raW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG5AQCAtMzE2LDYgKzMyOCw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcXG4gZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcXG4gdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovXFxuIFxcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTIzOSw2ICsyMzksNyBAQCBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpXFxuIFxcbiBcXHRyZXR1cm4gbWhwX2RlZmF1bHRfb25saW5lX3R5cGU7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKTtcXG4gXFxuIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcXG4ge1xcbkBAIC0xMzM3LDcgKzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXFxuIFxcbiBzdGF0aWMgaW50IG9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXFxuIHtcXG4tXFx0bWVtLVxcdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xcbitcXHRlbnVtIG1tb3AgKm9ubGluZV90eXBlID0gYXJnO1xcbitcXG4rXFx0bWVtLVxcdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcXG4gXFx0cmV0dXJuIGRldmljZV9vbmxpbmUoXFx1MDAyNm1lbS1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG5AQCAtMTQ5MSw3ICsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG4gICpcXG4gICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xcbiAgKi9cXG4taW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4rc3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcXG4rXFx0XFx0XFx0XFx0IGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWhwX3BhcmFtcyBwYXJhbXMgPSB7IC5wZ3Byb3QgPSBwZ3Byb3RfbWhwKFBBR0VfS0VSTkVMKSB9O1xcbiBcXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcXG5AQCAtMTU4MSw4ICsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4gXFx0XFx0bWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpO1xcbiBcXG4gXFx0Lyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqL1xcbi1cXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxcbi1cXHRcXHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xcbitcXHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxcbitcXHRcXHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFxcdTAwMjZvbmxpbmVfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgb25saW5lX21lbW9yeV9ibG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiBlcnJvcjpcXG5AQCAtMTU5OCw3ICsxNjAzLDEzIEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cXG4raW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xcbit9XFxuK1xcbisvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cXG4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuQEAgLTE2MjYsNyArMTYzNywxNSBAQCBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuIFxcbi0vKlxcbisvKipcXG4rICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXFxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4rICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXFxcIlN5c3RlbSBSQU0gKCREUklWRVIpXFxcIlxcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xcbisgKiBAb25saW5lX3R5cGU6IEF1dG8tT25saW5lIGJlaGF2aW9yIChvZmZsaW5lLCBvbmxpbmUsIGtlcm5lbCwgbW92YWJsZSlcXG4rICpcXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cXG4gICogUkFNLCBpbnN0ZWFkLCBpdCBpcyBkZXRlY3RlZCBhbmQgYWRkZWQgYnkgYSBkcml2ZXIgLSBkdXJpbmcgY29sZCBib290LFxcbkBAIC0xNjM0LDYgKzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4gICpcXG4gICogUmVhc29ucyB3aHkgdGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZW1tYXAgb2YgYVxcbiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOlxcbisgKlxcbiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmVcXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcXG4gICogLSBDb29yZGluYXRpb24gd2l0aCBhIGh5cGVydmlzb3IgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgbWVtb3J5XFxuQEAgLTE2NDYsOSArMTY2NiwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4gICpcXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XFxuICAqIFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbitcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuIFxcdGludCByYztcXG5AQCAtMTY1OCw2ICsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0ICAgIHJlc291cmNlX25hbWVbc3RybGVuKHJlc291cmNlX25hbWUpIC0gMV0gIT0gJyknKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4gXFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcXG5AQCAtMTY2Niw3ICsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XFxuK1xcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcXG4gXFxuQEAgLTE2NzQsNiArMTcwMCwzMCBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBcXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcXFwia21lbVxcXCIpO1xcbitcXG4rLyoqXFxuKyAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5XFxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4rICogQHN0YXJ0OiBTdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmFuZ2VcXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXFxcIlN5c3RlbSBSQU0gKCREUklWRVIpXFxcIlxcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xcbisgKlxcbisgKiBBZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggdGhlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSB0eXBlIHNldCBieVxcbisgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxcbisgKlxcbisgKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbitcXHRcXHRcXHRtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcXG4gXFxuIC8qXFxuQEAgLTIzNzksNTggKzI0MjksOTUgQEAgc3RhdGljIGludCB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxcbiAgKi9cXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4ge1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdHN0cnVjdCByYW5nZSByYW5nZSA9IHtcXG4rXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuK1xcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK1xcbisvKipcXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcXG4rICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xcbisgKlxcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxcbisgKlxcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxcbisgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cXG4rICpcXG4rICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcXG4rICogYmVlbiByZW1vdmVkLlxcbisgKi9cXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwO1xcbiBcXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XFxuLVxcdGludCByYztcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbi1cXHRpZiAoIUlTX0FMSUdORUQoc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8XFxuLVxcdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcXG4rXFx0aWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgdTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0O1xcbitcXHRcXHRjb25zdCB1NjQgc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0bWJfY291bnQgKz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFdlJ2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhblxcbi1cXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXFxuLVxcdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXFxuK1xcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxcbitcXHQgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnRcXG4rXFx0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxcbiBcXHQgKi9cXG4gXFx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxcbiBcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIW9ubGluZV90eXBlcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdC8qXFxuLVxcdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxcbi1cXHQgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UnbGwgc2tpcCBhbGwgdW5wcm9jZXNzZWQgYmxvY2tzIGluXFxuLVxcdCAqIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soKS5cXG4tXFx0ICovXFxuIFxcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfY291bnQpO1xcbiBcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4rXFx0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cXG4gXFx0dG1wID0gb25saW5lX3R5cGVzO1xcbi1cXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0Llxcbi1cXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIXJjKSB7XFxuLVxcdFxcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlc1tpXSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XFxuIFxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsXFxuLVxcdCAqIChuYWNrZWQgYnkgYSBub3RpZmllciksIGl0IGJhcmVseSBldmVyIGhhcHBlbnMuXFxuLVxcdCAqL1xcbitcXHQvKiBJZiBhbnkgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbGwsIHJvbGxiYWNrIGFueSBjaGFuZ2VzIGFuZCBiYWlsICovXFxuIFxcdGlmIChyYykge1xcbiBcXHRcXHR0bXAgPSBvbmxpbmVfdHlwZXM7XFxuLVxcdFxcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCxcXG4tXFx0XFx0XFx0XFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKylcXG4rXFx0XFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pLCBcXHUwMDI2dG1wLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSAyOiBSZW1vdmUuIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgaG9sZGluZyB0aGUgaG90cGx1ZyBsb2NrICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yYW5nZXM7IGkrKylcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKSkpO1xcbitcXG4rb3V0X3VubG9jazpcXG4gXFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuIFxcbiBcXHRrZnJlZShvbmxpbmVfdHlwZXMpO1xcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uNTUyODY4MmEzYTkxMjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxcbiBUQVJHRVRTICs9IGNwdWZyZXFcXG4gVEFSR0VUUyArPSBjcHUtaG90cGx1Z1xcbiBUQVJHRVRTICs9IGRhbW9uXFxuK1RBUkdFVFMgKz0gZGF4XFxuIFRBUkdFVFMgKz0gZGV2aWNlcy9lcnJvcl9sb2dzXFxuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxcbiBUQVJHRVRTICs9IGRtYWJ1Zi1oZWFwc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbithbGw6XFxuK1xcbitURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2hcXG4rXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGM5YWFlYjZjZWI0MWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xcbkBAIC0wLDAgKzEsNCBAQFxcbitDT05GSUdfREVWX0RBWD1tXFxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxcbitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jOGJiYWY2MTc4ZWQ5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaFxcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcXFwic3RhdGVcXFwiIHN5c2ZzIGF0dHJpYnV0ZTpcXG4rIyAgIC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZSAgLVxcdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9rZXJuZWwgfCBvbmxpbmVfbW92YWJsZVxcbisjXFxuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxcbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cXG4rI1xcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxcbisjICAgbWVtbWFwPTJHITRHXFxuKyNcXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcXG4rI1xcbisjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mXFxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxcbitcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXFxuK0RJUj1cXFwiJChkaXJuYW1lIFxcXCIkKHJlYWRsaW5rIC1mIFxcXCIkMFxcXCIpXFxcIilcXFwiXFxuKy4gXFxcIiRESVJcXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzXFxuK1xcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxcbitnZXRfc3RhdGUoKSB7IGNhdCBcXFwiJEhQXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgfVxcbisjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlXFxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXFxuK3NldF9zdGF0ZSgpIHsgZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiRIUFxcXCIgMlxcdTAwM2UvZGV2L251bGw7IH1cXG4rXFxuK2ZpbmRfa21lbV9kYXgoKSB7XFxuK1xcdGxvY2FsIGQgZHJ2XFxuK1xcdGZvciBkIGluIFxcXCIkREFYX0JBU0VcXFwiL2RheCo7IGRvXFxuK1xcdFxcdFsgLWUgXFxcIiRkL3N0YXRlXFxcIiBdIHx8IGNvbnRpbnVlXFxuK1xcdFxcdGRydj0kKHJlYWRsaW5rIFxcXCIkZC9kcml2ZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRcXHRbIFxcXCIkKGJhc2VuYW1lIFxcXCIke2RydjotfVxcXCIpXFxcIiA9IGttZW0gXSB8fCBjb250aW51ZVxcbitcXHRcXHRiYXNlbmFtZSBcXFwiJGRcXFwiXFxuK1xcdFxcdHJldHVybiAwXFxuK1xcdGRvbmVcXG4rXFx0cmV0dXJuIDFcXG4rfVxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4rXFxuK2lmIFsgXFxcIiRVSURcXFwiICE9IDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4rREFYPSQoZmluZF9rbWVtX2RheClcXG4raWYgWyAteiBcXFwiJERBWFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rSFA9JERBWF9CQVNFLyREQVgvc3RhdGVcXG4rT1JJRz0kKGdldF9zdGF0ZSlcXG4rXFxuKyMgQSBmYWlsdXJlIHRvIHJlYWNoIHRoZSBiYXNlbGluZSBpcyBlbnZpcm9ubWVudGFsIChtZW1vcnkgaW4gdXNlKSwgbm90IGFuXFxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gfHwgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkREFYOiBjYW5ub3QgcmVhY2ggJ3VucGx1Z2dlZCcgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVxcXCJcXG4rXFx0WyAtbiBcXFwiJE9SSUdcXFwiIF0gXFx1MDAyNlxcdTAwMjYgc2V0X3N0YXRlIFxcXCIkT1JJR1xcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXFxuK1xcbitEUlY9L3N5cy9idXMvZGF4L2RyaXZlcnMva21lbVxcbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXFxuK1xcbitrdGFwX3ByaW50X21zZyBcXFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVxcXCJcXG4ra3RhcF9zZXRfcGxhbiA4XFxuK1xcbisjIEEgcHVibGljIChOX01FTU9SWSkga21lbSBub2RlIG9ubGluZWQgaW50byBhIGtlcm5lbCB6b25lIChvbmxpbmUvb25saW5lX2tlcm5lbClcXG4rIyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZFxcbisjIHdlZGdlIHRoZSBkZXZpY2UgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdC4gIFNvIHRoaXMgdGVzdCBvbmx5IGV2ZXJcXG4rIyBzdWNjZXNzZnVsbHkgb25saW5lcyBvbmxpbmVfbW92YWJsZSwgdGhlIG9uZSBtb2RlIHRoYXQgaXMgcmVsaWFibHkgdW5wbHVnZ2FibGUuXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK210X29ubGluZT0kKG1lbXRvdGFsX2tiKVxcbitpZiBbIFxcXCIkcmNcXFwiID0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBvbmxpbmVfbW92YWJsZSBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdF9vbmxpbmVcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cXHUwMDNlICRtdF9vbmxpbmUga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuKyMgQSBkaWZmZXJlbnQgb25saW5lIHR5cGUgaXMgcmVqZWN0ZWQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyB1bnBsdWcuICBUaGUgd3JpdGVcXG4rIyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXFxuK3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kP1xcbitpZiBbIFxcXCIkcmNcXFwiICE9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IG9ubGluZV9rZXJuZWwgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWcgKG5vIGtlcm5lbC16b25lIG9ubGluZSlcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlLVxcdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IHVucGx1Z2dlZCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdFxcXCIgLWx0IFxcXCIkbXRfb25saW5lXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmVfbW92YWJsZTogTWVtVG90YWwgJG10X29ubGluZSAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9vbmxpbmUgLVxcdTAwM2UgJG10XFxcIlxcbitmaVxcbitcXG4rYmVmb3JlPSQoZ2V0X3N0YXRlKVxcbitzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgIT0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBcXFwiJGJlZm9yZVxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IGludmFsaWQgc3RhdGUgc3RyaW5nXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJpbnZhbGlkIHN0YXRlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuKyMgVGhlIG9ubGluZV9tb3ZhYmxlIC1cXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXFxuKyMgcmUtcmVzZXJ2ZSB0aGUgcGVyLXJhbmdlIHJlc291cmNlcywgc28gYSBsYXRlciB1bnBsdWcgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZVxcbisjIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgZWFjaCBpdGVyYXRpb24gcmVhbGx5IGFkZHMgYW5kIGZyZWVzIG1lbW9yeS5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxcbitjeWNsZV9vaz0xOyBmYWlsX2k9MDsgb249MDsgb2ZmPTBcXG4rZm9yIGkgaW4gMSAyIDM7IGRvXFxuK1xcdGlmICEgc2V0X3N0YXRlIG9ubGluZV9tb3ZhYmxlOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXFxuK1xcdG9uPSQobWVtdG90YWxfa2IpXFxuK1xcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxcbitcXHRvZmY9JChtZW10b3RhbF9rYilcXG4rXFx0aWYgWyBcXFwiJG9uXFxcIiAtbGUgXFxcIiRtdF91bnBsdWdnZWRcXFwiIF0gfHwgWyBcXFwiJG9mZlxcXCIgLWdlIFxcXCIkb25cXFwiIF07IHRoZW5cXG4rXFx0XFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xcbitcXHRmaVxcbitkb25lXFxuK2lmIFsgXFxcIiRjeWNsZV9va1xcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm9ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZS1hY3F1aXJlcyByZXNvdXJjZXMgKDN4OiBhZGRlZCBhbmQgZnJlZWQgZWFjaCB0aW1lKVxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXFxcIlxcbitmaVxcbitcXG4rIyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XFxuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK2lmIFsgLXcgXFxcIiRBT0JcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi9iaW5kXFxcIiBdOyB0aGVuXFxuK1xcdG9yaWdfYW9iPSQoY2F0IFxcXCIkQU9CXFxcIilcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gb2ZmbGluZSBcXHUwMDNlIFxcXCIkQU9CXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkREFYXFxcIiBcXHUwMDNlIFxcXCIkRFJWL2JpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHNsZWVwIDFcXG4rXFx0c3Q9JChnZXRfc3RhdGUpXFxuK1xcdGVjaG8gXFxcIiRvcmlnX2FvYlxcXCIgXFx1MDAzZSBcXFwiJEFPQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlc3RvcmUgc3lzdGVtIHBvbGljeVxcbitcXHRpZiBbIFxcXCIkc3RcXFwiID0gb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cXHUwMDNlIHN0YXRlPW9mZmxpbmVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcImJpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSlcXFwiXFxuK1xcdGZpXFxuK1xcdHNldF9zdGF0ZSB1bnBsdWdnZWQgMlxcdTAwM2UvZGV2L251bGxcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiYXV0b19vbmxpbmVfYmxvY2tzIG9yIGRyaXZlciBiaW5kL3VuYmluZCBub3Qgd3JpdGFibGVcXFwiXFxuK2ZpXFxuK1xcbitbIC1uIFxcXCIkT1JJR1xcXCIgXSBcXHUwMDI2XFx1MDAyNiBzZXRfc3RhdGUgXFxcIiRPUklHXFxcIlxcbitcXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xcbisjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XFxuKyMgd2l0aCBhIHNpbmdsZSBcXFwic3R1Y2sgb25saW5lXFxcIiB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXFxuKyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QgLSBhbmQgb25seSBpZiB3ZSBjYW4gcnVuIGl0LFxcbisjIGxlYXZpbmcgdGhlIHJlc3RvcmVkIHN0YXRlIGFib3ZlIHVudG91Y2hlZCBvdGhlcndpc2UuICBvbmxpbmVfbW92YWJsZSBvbmx5OlxcbisjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLlxcbitpZiBbIC13IFxcXCIkRFJWL3VuYmluZFxcXCIgXTsgdGhlblxcbitcXHRzZXRfc3RhdGUgdW5wbHVnZ2VkOyBzZXRfc3RhdGUgb25saW5lX21vdmFibGVcXG4rZmlcXG4raWYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZV9tb3ZhYmxlIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF07IHRoZW5cXG4rXFx0bXRfb249JChtZW10b3RhbF9rYilcXG4rXFx0ZG1lc2cgLUMgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXFxuK1xcdCMgVGhlIGxlYWtlZCBcXFwiU3lzdGVtIFJBTSAoa21lbSlcXFwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xcbitcXHQjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC5cXG4rXFx0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cXG4rXFx0Y2F0IC9wcm9jL2lvbWVtIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c3BsYXQ9JChkbWVzZyAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcXFwiS0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XFxcIilcXG4rXFx0aWYgWyBcXFwiJHNwbGF0XFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfYWZ0ZXJcXFwiIC1nZSBcXFwiJG10X29uXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCKVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwidW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9za2lwIFxcXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9OTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjg6NTguNDQxNTc1NDM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ0OTUzMzEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCIsXG4gICAgXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc1wiLFxuICAgIFwiX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkXCIsXG4gICAgXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjM3MTIyZTVhMjJkMzBkN2E1MGViYmYzZDRhZDJlYTRlMmI0ZTY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDQ6Mjg6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXggYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5AQCAtMTUxLDMgKzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXG4gXHRcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxuIFx0XHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAndHJ1ZScgb3IgJ2ZvcmNlJy5cIlxuK1xuK1doYXQ6XHRcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxuK0RhdGU6XHRcdEp1bmUsIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0djYuMjFcbitDb250YWN0Olx0bnZkaW1tQGxpc3RzLmxpbnV4LmRldlxuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbi5cbitcdFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbitcdFx0T25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuXG4rXG4rXHRcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcbitcdFx0dGhlIHBlci1ibG9jayAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlIEFCSTo6XG4rXG4rXHRcdCAgXCJ1bnBsdWdnZWRcIjogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnRcbitcdFx0ICBcIm9ubGluZVwiOiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXG4rXHRcdCAgXCJvbmxpbmVfa2VybmVsXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9OT1JNQUxcbitcdFx0ICBcIm9ubGluZV9tb3ZhYmxlXCI6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFXG4rXG4rXHRcdFwib2ZmbGluZVwiIChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZVxuK1x0XHRyZXBvcnRlZCAtIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkZXZpY2UgaXMgYm91bmQgd2hpbGUgdGhlXG4rXHRcdGF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgXCJvZmZsaW5lXCIuICBJdCBjYW5ub3QgYmUgd3JpdHRlbixcbitcdFx0YXMgaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cbitcbitcdFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcInVucGx1Z2dlZFwiIHN0YXRlLCBzbyBhXG4rXHRcdGRldmljZSBtdXN0IGJlIHJldHVybmVkIHRvIFwidW5wbHVnZ2VkXCIgYmVmb3JlIGl0IGNhbiBiZSBvbmxpbmVkXG4rXHRcdGludG8gYSBkaWZmZXJlbnQgc3RhdGUuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uNWVlYWQzMzQ2ZjFlMzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTQ2LDYgKzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKVxuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cik7XG4rXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXG4re1xuK1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyAwIHx8IG9ubGluZV90eXBlIFx1MDAzZT0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIG9ubGluZV90eXBlX3RvX3N0cltvbmxpbmVfdHlwZV07XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xuIFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2J1cy5jIGIvZHJpdmVycy9kYXgvYnVzLmNcbmluZGV4IGQ4YWVhNWZlMGFmMmM1Li44ZDgzYjU1NzdhOGVhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXG4rKysgYi9kcml2ZXJzL2RheC9idXMuY1xuQEAgLTEsNiArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMjAxNy0yMDE4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG5AQCAtMzk0LDYgKzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdC5zaXplID0gMCxcbiBcdFx0XHQuaWQgPSAtMSxcbiBcdFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdFx0fTtcbiBcdFx0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSk7XG4gXG5AQCAtMTUyNyw2ICsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcbiBcdGlkYV9pbml0KFx1MDAyNmRldl9kYXgtXHUwMDNlaWRhKTtcbiBcbiBcdGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSA9IGRhdGEtXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcbitcdGRldl9kYXgtXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVx1MDAzZW9ubGluZV90eXBlO1xuIFxuIFx0aW5vZGUgPSBkYXhfaW5vZGUoZGF4X2Rldik7XG4gXHRkZXYtXHUwMDNlZGV2dCA9IGlub2RlLVx1MDAzZWlfcmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXG5pbmRleCA1OTA5MTcxYTQ0MjhiNy4uM2JjNzZiYzBhMTQ1ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNpZm5kZWYgX19EQVhfQlVTX0hfX1xuICNkZWZpbmUgX19EQVhfQlVTX0hfX1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5AQCAtMTYsNiArMTcsMTMgQEAgc3RydWN0IGRheF9yZWdpb247XG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxuIFxuKy8qXG4rICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcbisgKiBwb2xpY3ksIHNvIHRoZSBzeXN0ZW0gZGVmYXVsdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBrbWVtIGRyaXZlciBiaW5kcyxcbisgKiAobm90IGF0IGRldmljZS1jcmVhdGlvbiB0aW1lLCB3aGljaCB3b3VsZCBmcmVlemUgYSBzdGFsZSBwb2xpY3kpLlxuKyAqL1xuKyNkZWZpbmUgREFYX09OTElORV9ERUZBVUxUXHQoLTEpXG4rXG4gc3RydWN0IGRheF9yZWdpb24gKmFsbG9jX2RheF9yZWdpb24oc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgcmVnaW9uX2lkLFxuIFx0XHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgdGFyZ2V0X25vZGUsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyk7XG5AQCAtMjYsNiArMzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHtcbiBcdHJlc291cmNlX3NpemVfdCBzaXplO1xuIFx0aW50IGlkO1xuIFx0Ym9vbCBtZW1tYXBfb25fbWVtb3J5O1xuK1x0aW50IG9ubGluZV90eXBlO1x0LyogZW51bSBtbW9wLCBvciBEQVhfT05MSU5FX0RFRkFVTFQgc2VudGluZWwgKi9cbiB9O1xuIFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmNcbmluZGV4IDNhYjM5Yjc3ODQzZDVlLi4xYTdlYzYyMTIyMTM0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXG4rKysgYi9kcml2ZXJzL2RheC9jeGwuY1xuQEAgLTI3LDYgKzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uOTAyZTkyMmRjNGU0ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4rKysgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiArODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbisgKiBAb25saW5lX3R5cGU6IE1NT1BfKiBvbmxpbmUgdHlwZSBmb3IgbWVtb3J5IGhvdHBsdWcsIG9yIERBWF9PTkxJTkVfREVGQVVMVFxuKyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGludCBvbmxpbmVfdHlwZTtcdC8qIGVudW0gbW1vcCwgb3IgREFYX09OTElORV9ERUZBVUxUIHNlbnRpbmVsICovXG4gXHRpbnQgbnJfcmFuZ2U7XG4gXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqcmFuZ2VzO1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuaW5kZXggYWYyMWY2NmJmODcyYzYuLjJkZTNiYzkyNTE3MjliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbisrKyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG5AQCAtMzcsNiArMzcsNyBAQCBzdGF0aWMgaW50IGRheF9obWVtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJlZ2lvbl9pZGxlID8gMCA6IHJhbmdlX2xlbihcdTAwMjZtcmktXHUwMDNlcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4xOWVmZmUwZGEzZGNlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuKysrIGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSArMzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKmRheF9yYW5nZSA9IFx1MDAyNmRldl9kYXgtXHUwMDNlcmFuZ2VzW2ldO1xuIFx0c3RydWN0IHJhbmdlICpyYW5nZSA9IFx1MDAyNmRheF9yYW5nZS1cdTAwM2VyYW5nZTtcbiBcbi1cdC8qIG1lbW9yeS1ibG9jayBhbGlnbiB0aGUgaG90cGx1ZyByYW5nZSAqL1xuLVx0ci1cdTAwM2VzdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbi1cdHItXHUwMDNlZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XG4rXHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICs0MiwxNSBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VEXHQoLTEpXG4rXG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbitcdGludCBudW1hX25vZGU7XG4rXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheDtcbitcdGludCBzdGF0ZTtcbitcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovXG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlc1tdO1xuIH07XG4gXG5AQCAtNjUsMTUgKzY5LDMzNCBAQCBzdGF0aWMgdm9pZCBrbWVtX3B1dF9tZW1vcnlfdHlwZXModm9pZClcbiBcdG10X3B1dF9tZW1vcnlfdHlwZXMoXHUwMDI2a21lbV9tZW1vcnlfdHlwZXMpO1xuIH1cbiBcbisvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbitzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuK3tcbitcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuK1x0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX0tFUk5FTCB8fFxuK1x0ICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7XG4rfVxuK1xuKy8qKlxuKyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4rICpcbisgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlXG4rICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXG4rXHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdGludCBpLCByYywgYWRkZWQgPSAwO1xuK1x0bWhwX3QgbWhwX2ZsYWdzO1xuK1xuK1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBpbml0X3Jlc291cmNlcygpIGlzIGJlc3QtZWZmb3J0OiBpZiBhIHJlc2VydmF0aW9uIGNvbmZsaWN0XG4rXHRcdCAqIG9jY3VycyBpdCBrZWVwcyB0aGUgcmFuZ2UgYnV0IGxlYXZlcyByZXNbaV09TlVMTC4gRm9yIGhvdHBsdWdcbitcdFx0ICogb24gcHJvYmUgc3lzdGVtcywgdGhpcyBtZWFucyBrbWVtIHdpbGwgcGFydGlhbGx5IG9ubGluZS5cbitcdFx0ICpcbitcdFx0ICogV2UgaGF2ZSB0byBrZWVwIHRoaXMgYmVoYXZpb3Igbm90IHRvIGJyZWFrIHRob3NlIHN5c3RlbXMuXG4rXHRcdCAqIEZvciB0aG9zZSBzeXN0ZW1zIC0gYXRvbWljaXR5IG9ubHkgYXBwbGllcyB0byB2YWxpZCByYW5nZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4rXHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4rXHRcdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMnZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4rXHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuK1x0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXG4rXHRcdFx0XHRvbmxpbmVfdHlwZSk7XG4rXG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCIsXG4rXHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBSZWxlYXNlIHRoZSByZXNlcnZhdGlvbiBmb3IgdGhlIHJhbmdlIHRoYXQgZmFpbGVkIHRvXG4rXHRcdFx0ICogYWRkIHNvIGEgbGF0ZXIgaG90cmVtb3ZlIGRvZXMgbm90IHRyeSB0byByZW1vdmUgbWVtb3J5XG4rXHRcdFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNlcmVzW2ldKSB7XG4rXHRcdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoYWRkZWQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0YWRkZWQrKztcbitcdH1cbitcbitcdHJldHVybiBhZGRlZDtcbit9XG4rXG4rLyoqXG4rICogZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMgLSBjcmVhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGRheCBrbWVtXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICpcbisgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxuKyAqXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cbisgKi9cbitzdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0ICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXHRpbnQgaSwgcmMsIG1hcHBlZCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4rXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbitcbitcdFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2tpcCByYW5nZXMgYWxyZWFkeSBhZGRlZCAqL1xuK1x0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4rXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSxcbitcdFx0XHRcdFx0IGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuK1x0XHRpZiAoIXJlcykge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwiLFxuK1x0XHRcdFx0IGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XG4rXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChtYXBwZWQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHR9XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gcmVzO1xuK1x0XHQvKlxuK1x0XHQgKiBTZXQgZmxhZ3MgYXBwcm9wcmlhdGUgZm9yIFN5c3RlbSBSQU0uICBMZWF2ZSAuLi5fQlVTWSBjbGVhclxuK1x0XHQgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3RcbitcdFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcbitcdFx0ICogdW5rbm93biB0byB1cyB0aGF0IHdpbGwgYnJlYWsgYWRkX21lbW9yeSgpIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0cmVzLVx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xuK1x0XHRtYXBwZWQrKztcbitcdH1cbitcdHJldHVybiBtYXBwZWQ7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuKy8qKlxuKyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKlxuKyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb25cbisgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxuKyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLlxuKyAqXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xuK1x0aW50IGksIG5yX3JhbmdlcyA9IDAsIHJjO1xuK1xuK1x0cmFuZ2VzID0ga21hbGxvY19hcnJheShkZXZfZGF4LVx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYW5nZXMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0LyogQ29sbGVjdCB0aGUgcmFuZ2VzIHRoYXQgd2VyZSBhY3R1YWxseSBhZGRlZCBkdXJpbmcgcHJvYmUuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyYW5nZXNbbnJfcmFuZ2VzKytdID0gcmFuZ2U7XG4rXHR9XG4rXG4rXHQvKiBOb3RoaW5nIGFkZGVkIG1lYW5zIG5vdGhpbmcgdG8gcmVtb3ZlLiAqL1xuK1x0aWYgKCFucl9yYW5nZXMpIHtcbitcdFx0a2ZyZWUocmFuZ2VzKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcbitcdGtmcmVlKHJhbmdlcyk7XG4rXHRpZiAocmMpIHtcbitcdFx0LyogUmVjb3ZlcmFibGU6IHRoZSByYW5nZXMgcm9sbGVkIGJhY2ssIG5vdGhpbmcgaXMgbGVha2VkIHlldC4gKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiaG90cmVtb3ZlIGZhaWxlZCwgZGV2aWNlIGxlZnQgb25saW5lOiAlZFxcblwiLCByYyk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdC8qIEFsbCByYW5nZXMgcmVtb3ZlZDsgcmVsZWFzZSB0aGUgcmVzZXJ2ZWQgcmVzb3VyY2VzLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4rXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4re1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG4rXG4rLyoqXG4rICogZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMgLSByZW1vdmUgdGhlIGRheCBtZW1vcnkgcmVzb3VyY2VzXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXG4rICpcbisgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBkZXZpY2UgdW5iaW5kIG9jY3VycyBiZWZvcmUgbWVtb3J5IGlzIGhvdHJlbW92ZWQsIHdlIGNhbiBuZXZlclxuK1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4rXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxuK1x0ICpcbitcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbitcdCAqL1xuK1x0aWYgKFdBUk4oKChkYXRhLVx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4rXHRcdCBcIkhvdHBsdWcgbWVtb3J5IHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Zilcbit7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4rXG4rXHQvKiBcInVucGx1Z2dlZFwiIGlzIGttZW0tc3BlY2lmaWMgLSB0aGUgcmVzdCBtYXAgdG8gTU1PUF8gKi9cbitcdGlmIChzeXNmc19zdHJlcShidWYsIFwidW5wbHVnZ2VkXCIpKVxuK1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1xuK1x0b25saW5lX3R5cGUgPSBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoYnVmKTtcbitcdC8qIERpc2FsbG93IFwib2ZmbGluZVwiOiBpdCdzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4rXHRpZiAob25saW5lX3R5cGUgPT0gTU1PUF9PRkZMSU5FKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiBvbmxpbmVfdHlwZTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcbitcbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0c3RhdGVfc3RyID0gXCJ1bnBsdWdnZWRcIjtcbitcdGVsc2VcbitcdFx0c3RhdGVfc3RyID0gbWhwX29ubGluZV90eXBlX3RvX3N0cihkYXRhLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBzdGF0ZV9zdHIgPzogXCJ1bmtub3duXCIpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gdG9fZGV2X2RheChkZXYpO1xuK1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBvbmxpbmVfdHlwZTtcbitcdGludCByYztcbitcbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdG9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTtcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgREFYX0tNRU1fVU5QTFVHR0VEKVxuK1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXG4rXHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcbitcdFx0cmV0dXJuIGxlbjtcbitcbitcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcbitcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4rXHRcdHJldHVybiBsZW47XG4rXHR9XG4rXG4rXHQvKiBPbmxpbmluZyBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgdW5wbHVnZ2VkIHN0YXRlLiAqL1xuK1x0aWYgKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0LyogUmUtYWNxdWlyZSByZXNvdXJjZXMgaWYgcHJldmlvdXNseSB1bnBsdWdnZWQsIG90aGVyd2lzZSBuby1vcCAqL1xuK1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0ZGF0YS1cdTAwM2VzdGF0ZSA9IG9ubGluZV90eXBlO1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rc3RhdGljIERFVklDRV9BVFRSX1JXKHN0YXRlKTtcbitcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbitcdGludCBpLCByYztcbiBcdGludCBudW1hX25vZGU7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4gXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcbiBcbiBcdC8qXG5AQCAtMTMzLDY4ICs0NTYsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4rXHRkYXRhLVx1MDAzZW51bWFfbm9kZSA9IG51bWFfbm9kZTtcbitcdGRhdGEtXHUwMDNlZGV2X2RheCA9IGRldl9kYXg7XG4rXHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCIsXG4tXHRcdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbitcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuIFxuLVx0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4tXHRcdGlmIChkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXG4tXHRcdFx0bWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZO1xuK1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzb3VyY2VzO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBFbnN1cmUgdGhhdCBmdXR1cmUga2V4ZWMnZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4tXHRcdCAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS1cdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcbi1cdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzKTtcbitcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuK1x0b25saW5lX3R5cGUgPSBkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlO1xuK1x0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcbitcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cIixcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XG4tXHRcdFx0a2ZyZWUocmVzKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0aWYgKG1hcHBlZClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xuLVx0XHR9XG4tXHRcdG1hcHBlZCsrO1xuLVx0fVxuK1x0LyogQWx3YXlzIGNyZWF0ZSBibG9ja3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGV2ZW4gaWYgb2ZmbGluZSAqL1xuK1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfaG90cGx1ZztcbitcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuK1x0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4rXHRpZiAocmMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJmYWlsZWQgdG8gY3JlYXRlIHN0YXRlIHN5c2ZzIGVudHJ5XFxuXCIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX3JlcXVlc3RfbWVtOlxuK2Vycl9ob3RwbHVnOlxuK1x0ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rZXJyX3Jlc291cmNlczpcbitcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDYsNjUgKzQ5OSw4NiBAQCBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4tc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbisvKlxuKyAqIFJlbW92ZSB0aGUgZGV2aWNlJ3MgYWRkZWQgcmFuZ2VzIHdpdGggcmVtb3ZlX21lbW9yeSgpLlxuKyAqIFVubGlrZSB0aGUgc3lzZnMgdW5wbHVnIHBhdGggaXQgbmV2ZXIgb2ZmbGluZXMgYW5kIGZhaWxzIGlmIHRoZSBibG9ja3MgYXJlXG4rICogb25saW5lICgtRUJVU1kpLCBzbyBpdCBpcyBzYWZlIGZyb20gdW5iaW5kLiBGYWlsdXJlcyBsZWFrIHVudGlsIHJlYm9vdC5cbisgKlxuKyAqIFJldHVybnMgMCBvbmx5IGlmIGV2ZXJ5IGFkZGVkIHJhbmdlIHdhcyByZW1vdmVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4ge1xuLVx0aW50IGksIHN1Y2Nlc3MgPSAwO1xuLVx0aW50IG5vZGUgPSBkZXZfZGF4LVx1MDAzZXRhcmdldF9ub2RlO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IGksIHJjID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIG9uZSBzaG90IGZvciByZW1vdmluZyBtZW1vcnksIGlmIHNvbWUgbWVtb3J5IGJsb2NrcyB3ZXJlIG5vdFxuLVx0ICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kXG4tXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxuLVx0ICogdW5iaW5kIHdpbGwgc3VjY2VlZCBldmVuIGlmIHdlIHJldHVybiBmYWlsdXJlLlxuLVx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpKyspIHtcbiBcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuLVx0XHRpbnQgcmM7XG4gXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0gfHwgZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzKys7XG4rXHRcdGlmIChyZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKSkge1xuK1x0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXG5cIixcbitcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0XHRyYyA9IC1FQlVTWTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbitcdHJldHVybiByYztcbit9XG4gXG4tXHRcdHJjID0gcmVtb3ZlX21lbW9yeShyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSk7XG4tXHRcdGlmIChyYyA9PSAwKSB7XG4tXHRcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4tXHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuLVx0XHRcdHN1Y2Nlc3MrKztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuK3N0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4re1xuK1x0aW50IG5vZGUgPSBkZXZfZGF4LVx1MDAzZXRhcmdldF9ub2RlO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1x0LypcbitcdCAqIElmIFVOUExVR0dFRDogc3RhdGUgaXMga25vd24gY2xlYW4gYW5kIHJlYm9vdCBjYW4gY2xlYW4gdXAuXG4rXHQgKlxuK1x0ICogSWYgT05MSU5FXyo6IG1lbW9yeSBjYW5ub3QgYmUgcmVtb3ZlZCBoZXJlOiBvZmZsaW5pbmcgZHVyaW5nIGFuXG4rXHQgKiB1bmludGVycnVwdGlibGUgdW5iaW5kIGNhbiBkZWFkbG9jay4gTGVhayB0aGUgcmVzb3VyY2VzIHVudGlsIHJlYm9vdC5cbitcdCAqXG4rXHQgKiBJZiBPRkZMSU5FOiBibG9ja3MgYXJlIGF0dGVtcHRlZCB0byByZW1vdmUgd2l0aCByZW1vdmVfbWVtb3J5KCksXG4rXHQgKiB3aGljaCBuZXZlciBhdHRlbXB0cyBvZmZsaW5pbmcuIEEgYmxvY2sgb25saW5lZCBiZWhpbmQgb3VyIGJhY2tcbitcdCAqIGZhaWxzIC1FQlVTWSBhbmQgaXMgbGVha2VkLlxuK1x0ICovXG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKSB7XG4rXHRcdGRldl93YXJuKGRldiwgXCJIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwiKTtcbitcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuK1x0XHRyZXR1cm47XG4rXHR9IGVsc2UgaWYgKGRhdGEtXHUwMDNlc3RhdGUgPT0gTU1PUF9PRkZMSU5FIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBkYXhfa21lbV9yZW1vdmVfcmFuZ2VzKGRldl9kYXgsIGRhdGEpKSB7XG4gXHRcdGFueV9ob3RyZW1vdmVfZmFpbGVkID0gdHJ1ZTtcbi1cdFx0ZGV2X2VycihkZXYsXG4tXHRcdFx0XCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxcblwiLFxuLVx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdGRldl93YXJuKGRldiwgXCJVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwiKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlKSB7XG4tXHRcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4tXHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuLVx0XHRrZnJlZShkYXRhKTtcbi1cdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4tXHRcdC8qXG4tXHRcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxuLVx0XHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuLVx0XHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4tXHRcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcbi1cdFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cbi1cdFx0ICovXG4tXHRcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XG4tXHR9XG4rXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbitcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4rXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbitcdGtmcmVlKGRhdGEpO1xuK1x0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4rXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuK1x0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxuK1x0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuK1x0ICogdGlsbCBuZXh0IHJlYm9vdC5cbitcdCAqL1xuK1x0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1xuK1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1xuIFx0LypcbiBcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXG4gXHQgKiBkZXZpY2UtZGF4IHJhbmdlIGFuZCByZXR1cm4gJzAnIHRvIC1cdTAwM2VyZW1vdmUoKSBhdHRlbXB0cy4gVGhlIHJlbW92YWxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcbmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L3BtZW0uY1xuKysrIGIvZHJpdmVycy9kYXgvcG1lbS5jXG5AQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGF4X3BtZW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQucGdtYXAgPSBcdTAwMjZwZ21hcCxcbiBcdFx0LnNpemUgPSByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuK1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbmluZGV4IDQ2M2RjMDJmNmNmZjA1Li4xNzgzMjk5MDczZTQ3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUlOX01FTU9SWV9CTE9DS19TSVpFICAgICAoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcbiBcbkBAIC0xMDAsNiArMTAxLDMyIEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pO1xuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXModm9pZCk7XG4gaW50IHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIFxuKy8qKlxuKyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcbisgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxuKyAqXG4rICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2tcbisgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3RcbisgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cbisgKlxuKyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkXG4rICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXHUwMDNjIGFsaWduZWQuZW5kKSBiZWZvcmUgdXNpbmcgaXQuXG4rICovXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcbitcbitcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4rXHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4rXHQvKiBObyB3aG9sZSBibG9jayBmaXRzIChlLmcuIHJhbmdlIGJlbG93IHRoZSBmaXJzdCBib3VuZGFyeSk6IGVtcHR5LiAqL1xuK1x0aWYgKGFsaWduZWQuZW5kIFx1MDAzYz0gYWxpZ25lZC5zdGFydClcbitcdFx0YWxpZ25lZC5zdGFydCA9IGFsaWduZWQuZW5kO1xuK1x0ZWxzZVxuK1x0XHRhbGlnbmVkLmVuZCAtPSAxO1xuK1xuK1x0cmV0dXJuIGFsaWduZWQ7XG4rfVxuK1xuIHN0cnVjdCBtZW1vcnlfbm90aWZ5IHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbmluZGV4IDdjOWQ2NjcyOWM2MDk1Li5kYjEwZDUwZjMwYWUxYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG5AQCAtMTI3LDYgKzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbitjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7XG4gXG4gLyogSWYgbW92YWJsZV9ub2RlIGJvb3Qgb3B0aW9uIHNwZWNpZmllZCAqL1xuIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkO1xuQEAgLTI2Nyw2ICsyNjgsOCBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKTtcbiBcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5AQCAtMjgzLDYgKzI4NiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkge31cbitcbitzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbitcdFx0dW5zaWduZWQgaW50IG5yX3Jhbmdlcylcbit7XG4rXHRyZXR1cm4gLUVCVVNZO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5AQCAtMjk0LDYgKzMwMyw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG4gXHRcdFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XG4raW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuK1x0XHRcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKTtcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSxcbiBcdFx0XHRcdCAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcbkBAIC0zMTYsNiArMzI4LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLFxuIGV4dGVybiBpbnQgYXJjaF9jcmVhdGVfbGluZWFyX21hcHBpbmcoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgYXJjaF9yZW1vdmVfbGluZWFyX21hcHBpbmcodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZCkgeyByZXR1cm4gTU1PUF9PRkZMSU5FOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuIFxuICNlbmRpZiAvKiBfX0xJTlVYX01FTU9SWV9IT1RQTFVHX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMyMjUzNjRiZWMyZjc2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTIzOSw2ICsyMzksNyBAQCBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpXG4gXG4gXHRyZXR1cm4gbWhwX2RlZmF1bHRfb25saW5lX3R5cGU7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XG4gXG4gdm9pZCBtaHBfc2V0X2RlZmF1bHRfb25saW5lX3R5cGUoZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbkBAIC0xMzM3LDcgKzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpXG4gXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxuIHtcbi1cdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9IG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpO1xuK1x0ZW51bSBtbW9wICpvbmxpbmVfdHlwZSA9IGFyZztcbitcbitcdG1lbS1cdTAwM2VvbmxpbmVfdHlwZSA9ICpvbmxpbmVfdHlwZTtcbiBcdHJldHVybiBkZXZpY2Vfb25saW5lKFx1MDAyNm1lbS1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC0xNDkxLDcgKzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuICAqXG4gICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xuICAqL1xuLWludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4rc3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0XHRcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcbiBcdGVudW0gbWVtYmxvY2tfZmxhZ3MgbWVtYmxvY2tfZmxhZ3MgPSBNRU1CTE9DS19OT05FO1xuQEAgLTE1ODEsOCArMTU4NSw5IEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4gXHRcdG1lcmdlX3N5c3RlbV9yYW1fcmVzb3VyY2UocmVzKTtcbiBcbiBcdC8qIG9ubGluZSBwYWdlcyBpZiByZXF1ZXN0ZWQgKi9cbi1cdGlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpXG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7XG4rXHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxuK1x0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNm9ubGluZV90eXBlLFxuK1x0XHRcdFx0ICAgb25saW5lX21lbW9yeV9ibG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIGVycm9yOlxuQEAgLTE1OTgsNyArMTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuK2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxuK1x0XHRcdFx0ICAgICBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4rfVxuK1xuKy8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuQEAgLTE2MjYsNyArMTYzNywxNSBAQCBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuIFxuLS8qXG4rLyoqXG4rICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG4rICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuKyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCJcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuKyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKVxuKyAqXG4gICogQWRkIHNwZWNpYWwsIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtIGFzIHN5c3RlbSBSQU0uIFN1Y2hcbiAgKiBtZW1vcnkgaXMgbm90IGV4cG9zZWQgdmlhIHRoZSByYXcgZmlybXdhcmUtcHJvdmlkZWQgbWVtbWFwIGFzIHN5c3RlbVxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcbkBAIC0xNjM0LDYgKzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiAgKlxuICAqIFJlYXNvbnMgd2h5IHRoaXMgbWVtb3J5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgdGhlIGluaXRpYWwgbWVtbWFwIG9mIGFcbiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOlxuKyAqXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcbiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnlcbkBAIC0xNjQ2LDkgKzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBUaGUgcmVzb3VyY2VfbmFtZSAodmlzaWJsZSB2aWEgL3Byb2MvaW9tZW0pIGhhcyB0byBoYXZlIHRoZSBmb3JtYXRcbiAgKiBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4tXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuK1x0XHRlbnVtIG1tb3Agb25saW5lX3R5cGUpXG4ge1xuIFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4gXHRpbnQgcmM7XG5AQCAtMTY1OCw2ICsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICcpJylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRsb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4gXHRyZXMgPSByZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2Uoc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUpO1xuQEAgLTE2NjYsNyArMTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbitcdHJjID0gX19hZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MsIG9ubGluZV90eXBlKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTtcbiBcbkBAIC0xNjc0LDYgKzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCJrbWVtXCIpO1xuK1xuKy8qKlxuKyAqIGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgLSBhZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5XG4rICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4rICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlc1xuKyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcIlN5c3RlbSBSQU0gKCREUklWRVIpXCJcbisgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuKyAqXG4rICogQWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIHRoZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgdHlwZSBzZXQgYnlcbisgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxuKyAqXG4rICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuK1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbit7XG4rXHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG4rXHRcdFx0bWhwX2ZsYWdzLFxuK1x0XHRcdG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XG4gXG4gLypcbkBAIC0yMzc5LDU4ICsyNDI5LDk1IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiAgKi9cbiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdHN0cnVjdCByYW5nZSByYW5nZSA9IHtcbitcdFx0LnN0YXJ0ID0gc3RhcnQsXG4rXHRcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxuK1x0fTtcbitcbitcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK1xuKy8qKlxuKyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbisgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzXG4rICpcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcbisgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuXG4rICpcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxuKyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC5cbisgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuXG4rICpcbisgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcbisgKiBiZWVuIHJlbW92ZWQuXG4rICovXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbWJfY291bnQgPSAwO1xuIFx0dWludDhfdCAqb25saW5lX3R5cGVzLCAqdG1wO1xuLVx0aW50IHJjO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0aWYgKCFyYW5nZXMgfHwgIW5yX3JhbmdlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHRjb25zdCB1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4rXHRcdGNvbnN0IHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4rXG4rXHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbitcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRtYl9jb3VudCArPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdH1cbitcbiBcdC8qXG4tXHQgKiBXZSdsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4rXHQgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcyxcbitcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuK1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4gXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJ2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4gXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbiBcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbitcdC8qIFBoYXNlIDE6IG9mZmxpbmUgZXZlcnkgYmxvY2sgaW4gZXZlcnkgcmFuZ2UuICovXG4gXHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LlxuLVx0ICogVGhpcyBjYW5ub3QgZmFpbCBhcyBpdCBjYW5ub3QgZ2V0IG9ubGluZWQgaW4gdGhlIG1lYW50aW1lLlxuLVx0ICovXG4tXHRpZiAoIXJjKSB7XG4tXHRcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkoc3RhcnQsIHNpemUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcbitcdFx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSxcbitcdFx0XHRcdFx0XHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuIFx0XHRpZiAocmMpXG4tXHRcdFx0cHJfZXJyKFwiJXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZFwiLCBfX2Z1bmNfXywgcmMpO1xuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFJvbGxiYWNrIHdoYXQgd2UgZGlkLiBXaGlsZSBtZW1vcnkgb25saW5pbmcgbWlnaHQgdGhlb3JldGljYWxseSBmYWlsXG4tXHQgKiAobmFja2VkIGJ5IGEgbm90aWZpZXIpLCBpdCBiYXJlbHkgZXZlciBoYXBwZW5zLlxuLVx0ICovXG4rXHQvKiBJZiBhbnkgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbGwsIHJvbGxiYWNrIGFueSBjaGFuZ2VzIGFuZCBiYWlsICovXG4gXHRpZiAocmMpIHtcbiBcdFx0dG1wID0gb25saW5lX3R5cGVzO1xuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNnRtcCxcbi1cdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKylcbitcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuK1x0XHRcdFx0XHQgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSwgXHUwMDI2dG1wLFxuK1x0XHRcdFx0XHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuK1xuK1x0LyogUGhhc2UgMjogUmVtb3ZlLiBUaGlzIHNob3VsZCBuZXZlciBmYWlsIGhvbGRpbmcgdGhlIGhvdHBsdWcgbG9jayAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspXG4rXHRcdFdBUk5fT05fT05DRSh0cnlfcmVtb3ZlX21lbW9yeShyYW5nZXNbaV0uc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSkpO1xuK1xuK291dF91bmxvY2s6XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uNTUyODY4MmEzYTkxMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxuIFRBUkdFVFMgKz0gY3B1ZnJlcVxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICs9IGRhbW9uXG4rVEFSR0VUUyArPSBkYXhcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxuIFRBUkdFVFMgKz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbithbGw6XG4rXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXG4rXG4raW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCArMSw0IEBAXG4rQ09ORklHX0RFVl9EQVg9bVxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxuK0NPTkZJR19NRU1PUllfSE9UUExVRz15XG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhiYmFmNjE3OGVkOWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDE5MCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcInN0YXRlXCIgc3lzZnMgYXR0cmlidXRlOlxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9rZXJuZWwgfCBvbmxpbmVfbW92YWJsZVxuKyNcbisjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cbisjXG4rIyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbisjICAgbWVtbWFwPTJHITRHXG4rI1xuKyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4rI1xuKyMgICBuZGN0bCBjcmVhdGUtbmFtZXNwYWNlIC1tIGRldmRheCAtZSBuYW1lc3BhY2UwLjAgLWZcbisjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxuK1xuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rLiBcIiRESVJcIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rXG4rREFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbitcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxuK2dldF9zdGF0ZSgpIHsgY2F0IFwiJEhQXCIgMlx1MDAzZS9kZXYvbnVsbDsgfVxuKyMgc2V0X3N0YXRlIFNUQVRFIC0tIHdyaXRlIGEgc3RhdGUgdG8gdGhlIHN0YXRlIGF0dHJpYnV0ZTsgcmV0dXJucyB0aGVcbisjIHdyaXRlJ3MgZXhpdCBzdGF0dXMgKDAgPSBhY2NlcHRlZCBieSB0aGUga2VybmVsKVxuK3NldF9zdGF0ZSgpIHsgZWNobyBcIiQxXCIgXHUwMDNlIFwiJEhQXCIgMlx1MDAzZS9kZXYvbnVsbDsgfVxuK1xuK2ZpbmRfa21lbV9kYXgoKSB7XG4rXHRsb2NhbCBkIGRydlxuK1x0Zm9yIGQgaW4gXCIkREFYX0JBU0VcIi9kYXgqOyBkb1xuK1x0XHRbIC1lIFwiJGQvc3RhdGVcIiBdIHx8IGNvbnRpbnVlXG4rXHRcdGRydj0kKHJlYWRsaW5rIFwiJGQvZHJpdmVyXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdFx0WyBcIiQoYmFzZW5hbWUgXCIke2RydjotfVwiKVwiID0ga21lbSBdIHx8IGNvbnRpbnVlXG4rXHRcdGJhc2VuYW1lIFwiJGRcIlxuK1x0XHRyZXR1cm4gMFxuK1x0ZG9uZVxuK1x0cmV0dXJuIDFcbit9XG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbitcbitpZiBbIFwiJFVJRFwiICE9IDAgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm11c3QgYmUgcnVuIGFzIHJvb3RcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4rREFYPSQoZmluZF9rbWVtX2RheClcbitpZiBbIC16IFwiJERBWFwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rZmlcbitIUD0kREFYX0JBU0UvJERBWC9zdGF0ZVxuK09SSUc9JChnZXRfc3RhdGUpXG4rXG4rIyBBIGZhaWx1cmUgdG8gcmVhY2ggdGhlIGJhc2VsaW5lIGlzIGVudmlyb25tZW50YWwgKG1lbW9yeSBpbiB1c2UpLCBub3QgYW5cbisjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIHx8IFsgXCIkKGdldF9zdGF0ZSlcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIiREQVg6IGNhbm5vdCByZWFjaCAndW5wbHVnZ2VkJyBiYXNlbGluZSAobWVtb3J5IGluIHVzZT8pXCJcbitcdFsgLW4gXCIkT1JJR1wiIF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcIiRPUklHXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuK1xuK0RSVj0vc3lzL2J1cy9kYXgvZHJpdmVycy9rbWVtXG4rQU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuK1xuK2t0YXBfcHJpbnRfbXNnIFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwiXG4ra3RhcF9zZXRfcGxhbiA4XG4rXG4rIyBBIHB1YmxpYyAoTl9NRU1PUlkpIGttZW0gbm9kZSBvbmxpbmVkIGludG8gYSBrZXJuZWwgem9uZSAob25saW5lL29ubGluZV9rZXJuZWwpXG4rIyBjb2xsZWN0cyB1bm1vdmFibGUgYWxsb2NhdGlvbnMgYW5kIGNhbiB0aGVuIG5ldmVyIGJlIG9mZmxpbmVkLCB3aGljaCB3b3VsZFxuKyMgd2VkZ2UgdGhlIGRldmljZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0LiAgU28gdGhpcyB0ZXN0IG9ubHkgZXZlclxuKyMgc3VjY2Vzc2Z1bGx5IG9ubGluZXMgb25saW5lX21vdmFibGUsIHRoZSBvbmUgbW9kZSB0aGF0IGlzIHJlbGlhYmx5IHVucGx1Z2dhYmxlLlxuK1xuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbittdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZV9tb3ZhYmxlIF0gXHUwMDI2XHUwMDI2IFsgXCIkbXRfb25saW5lXCIgLWd0IFwiJG10X3VucGx1Z2dlZFwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGU6IHN0YXRlPW9ubGluZV9tb3ZhYmxlLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmVfbW92YWJsZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZVwiXG4rZmlcbitcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBvbmxpbmVfbW92YWJsZSBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZV9tb3ZhYmxlIGlkZW1wb3RlbnRcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX21vdmFibGUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbisjIEEgZGlmZmVyZW50IG9ubGluZSB0eXBlIGlzIHJlamVjdGVkIHdpdGhvdXQgYW4gaW50ZXJ2ZW5pbmcgdW5wbHVnLiAgVGhlIHdyaXRlXG4rIyBpcyByZWZ1c2VkIGJlZm9yZSBhbnkgaG90cGx1Zywgc28gdGhpcyBuZXZlciBhY3R1YWxseSBvbmxpbmVzIGEga2VybmVsIHpvbmUuXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XG4raWYgWyBcIiRyY1wiICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3Qgb25saW5lX2tlcm5lbCB3aXRob3V0IGludGVydmVuaW5nIHVucGx1ZyAobm8ga2VybmVsLXpvbmUgb25saW5lKVwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmVfbW92YWJsZS1cdTAwM2VvbmxpbmVfa2VybmVsIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK210PSQobWVtdG90YWxfa2IpXG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSB1bnBsdWdnZWQgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1sdCBcIiRtdF9vbmxpbmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiBNZW1Ub3RhbCAkbXRfb25saW5lIC1cdTAwM2UgJG10IGtCXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9vbmxpbmUgLVx1MDAzZSAkbXRcIlxuK2ZpXG4rXG4rYmVmb3JlPSQoZ2V0X3N0YXRlKVxuK3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBcIiRiZWZvcmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInJlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZ1wiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJpbnZhbGlkIHN0YXRlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbisjIFRoZSBvbmxpbmVfbW92YWJsZSAtXHUwMDNlIHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDogYSByZS1vbmxpbmUgZmFpbGVkIHRvXG4rIyByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyBhIGxhdGVyIHVucGx1ZyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlXG4rIyBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGVhY2ggaXRlcmF0aW9uIHJlYWxseSBhZGRzIGFuZCBmcmVlcyBtZW1vcnkuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxuK2N5Y2xlX29rPTE7IGZhaWxfaT0wOyBvbj0wOyBvZmY9MFxuK2ZvciBpIGluIDEgMiAzOyBkb1xuK1x0aWYgISBzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbitcdG9uPSQobWVtdG90YWxfa2IpXG4rXHRpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmlcbitcdG9mZj0kKG1lbXRvdGFsX2tiKVxuK1x0aWYgWyBcIiRvblwiIC1sZSBcIiRtdF91bnBsdWdnZWRcIiBdIHx8IFsgXCIkb2ZmXCIgLWdlIFwiJG9uXCIgXTsgdGhlblxuK1x0XHRjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrXG4rXHRmaVxuK2RvbmVcbitpZiBbIFwiJGN5Y2xlX29rXCIgPSAxIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm9ubGluZV9tb3ZhYmxlL3VucGx1ZyBjeWNsZSByZWdyZXNzZWQgYXQgaXRlcmF0aW9uICRmYWlsX2kgKG9uPSRvbiBvZmY9JG9mZiBiYXNlbGluZT0kbXRfdW5wbHVnZ2VkKVwiXG4rZmlcbitcbisjIGNoYW5nZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgcG9saWN5IHdoaWxlIHRoZSBkZXZpY2UgaXMgdW5ib3VuZCwgYW5kIHNob3dcbisjIHRoZSBuZXcgc3lzdGVtIGRlZmF1bHQgcG9saWN5IGlzIHV0aWxpemVkIGFjcm9zcyBiaW5kaW5ncy5cbitzZXRfc3RhdGUgdW5wbHVnZ2VkXG4raWYgWyAtdyBcIiRBT0JcIiBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi91bmJpbmRcIiBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi9iaW5kXCIgXTsgdGhlblxuK1x0b3JpZ19hb2I9JChjYXQgXCIkQU9CXCIpXG4rXHRlY2hvIFwiJERBWFwiIFx1MDAzZSBcIiREUlYvdW5iaW5kXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBvZmZsaW5lIFx1MDAzZSBcIiRBT0JcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIFwiJERBWFwiIFx1MDAzZSBcIiREUlYvYmluZFwiIDJcdTAwM2UvZGV2L251bGxcbitcdHNsZWVwIDFcbitcdHN0PSQoZ2V0X3N0YXRlKVxuK1x0ZWNobyBcIiRvcmlnX2FvYlwiIFx1MDAzZSBcIiRBT0JcIiAyXHUwMDNlL2Rldi9udWxsXHRcdCMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5XG4rXHRpZiBbIFwiJHN0XCIgPSBvZmZsaW5lIF07IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cdTAwM2Ugc3RhdGU9b2ZmbGluZVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiYmluZC10aW1lIHBvbGljeSBub3QgaG9ub3JlZDogc3RhdGU9JHN0IChleHBlY3RlZCBvZmZsaW5lKVwiXG4rXHRmaVxuK1x0c2V0X3N0YXRlIHVucGx1Z2dlZCAyXHUwMDNlL2Rldi9udWxsXG4rZWxzZVxuK1x0a3RhcF90ZXN0X3NraXAgXCJhdXRvX29ubGluZV9ibG9ja3Mgb3IgZHJpdmVyIGJpbmQvdW5iaW5kIG5vdCB3cml0YWJsZVwiXG4rZmlcbitcbitbIC1uIFwiJE9SSUdcIiBdIFx1MDAyNlx1MDAyNiBzZXRfc3RhdGUgXCIkT1JJR1wiXG4rXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xuKyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXRcbisjIHdpdGggYSBzaW5nbGUgXCJzdHVjayBvbmxpbmVcIiB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXG4rIyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdCAtIGFuZCBvbmx5IGlmIHdlIGNhbiBydW4gaXQsXG4rIyBsZWF2aW5nIHRoZSByZXN0b3JlZCBzdGF0ZSBhYm92ZSB1bnRvdWNoZWQgb3RoZXJ3aXNlLiAgb25saW5lX21vdmFibGUgb25seTpcbisjIHRoaXMgdGVzdCBuZXZlciBvbmxpbmVzIGEgcHVibGljIG5vZGUgaW50byBhIGtlcm5lbCB6b25lLlxuK2lmIFsgLXcgXCIkRFJWL3VuYmluZFwiIF07IHRoZW5cbitcdHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVfbW92YWJsZVxuK2ZpXG4raWYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyAtdyBcIiREUlYvdW5iaW5kXCIgXTsgdGhlblxuK1x0bXRfb249JChtZW10b3RhbF9rYilcbitcdGRtZXNnIC1DIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi91bmJpbmRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRtdF9hZnRlcj0kKG1lbXRvdGFsX2tiKVxuK1x0IyBUaGUgbGVha2VkIFwiU3lzdGVtIFJBTSAoa21lbSlcIiByZWdpb25zIHN0YXkgaW4gdGhlIGlvbWVtIHRyZWU7IHJlYWRpbmdcbitcdCMgdGhlaXIgbmFtZXMgZGVyZWZlcmVuY2VzIHJlc19uYW1lLCB3aGljaCBhIGJ1Z2d5IHVuYmluZCBhbHJlYWR5IGZyZWVkLlxuK1x0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cbitcdGNhdCAvcHJvYy9pb21lbSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4rXHRzcGxhdD0kKGRtZXNnIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1jaUUgXCJLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3RcIilcbitcdGlmIFsgXCIkc3BsYXRcIiA9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdF9hZnRlclwiIC1nZSBcIiRtdF9vblwiIF07IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVx1MDAzZSAkbXRfYWZ0ZXIga0IpXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCJ1bmJpbmQgd2hpbGUgb25saW5lIHJlZ3Jlc3NlZDogc3BsYXQ9JHNwbGF0IE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQlwiXG4rXHRmaVxuK2Vsc2VcbitcdGt0YXBfdGVzdF9za2lwIFwiY291bGQgbm90IG9ubGluZSBkZXZpY2UgZm9yIHVuYmluZC13aGlsZS1vbmxpbmUgdGVzdFwiXG4rZmlcbitcbitrdGFwX2ZpbmlzaGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJhNGQ4NWY3NGNkNmI5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcbkBAIC0wLDAgKzEgQEBcbit0aW1lb3V0PTkwXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyODo1OC40NDE1Nzc2NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzYwNDgwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEhvdHBsdWcgUGF0Y2ggZm9yIERBWCBLbWVtIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGhvdHBsdWcgYW5kIERBWCBrbWVtIGRyaXZlcnMuIFRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYCwgZm9yIERBWCBrbWVtIGRldmljZXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgc3lzZnMgYXR0cmlidXRlcyBhcmUgb2Z0ZW4gZW50cnkgcG9pbnRzIGZvciBzeXprYWxsZXIuIFRoZXJlJ3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zLiBJIHNlZSBpdCBhbHNvIGFkZHMgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCB0byBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYW5kIHR3ZWFrcyBgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgdG8gYWNjZXB0IGBvbmxpbmVfdHlwZWAuIE15IGluaXRpYWwgdGhvdWdodCBpczogKklzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBDYW4gc3l6a2FsbGVyIHJlYWNoIGl0PypcblxuTXkgZmlyc3Qgc3RlcCBpcyBmaWd1cmluZyBvdXQgaG93IHN5emthbGxlciBjYW4gYWNjZXNzIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZSBjcnVjaWFsIGJpdCBoZXJlIGlzIHRoZSBzeXNmcyBhdHRyaWJ1dGUsIGBzdGF0ZWAuIFN5emthbGxlciBuZWVkcyB0byBrbm93IHRoZSBwYXRoOiBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYC4gIFRoZSBjb3JlIGRyaXZlciwgYWNjb3JkaW5nIHRvIHRoZSBwYXRjaCwgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gU28gdGhlIHF1ZXN0aW9uIGlzLCAqZG9lcyBzeXprYWxsZXIgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZCB0byBldmVuICpzZWUqIHRoaXM/KlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19ERVZfREFYX0tNRU1gLCBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgYW5kIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAgYXJlIGFsbCBlbmFibGVkIGluIHN5emthbGxlci5cblxuTm93LCBsZXQncyBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgc3lzZnMgYXR0cmlidXRlLiBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGluIGBkcml2ZXJzL2RheC9rbWVtLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYHN0YXRlX3N0b3JlYCBhbmQgYHN0YXRlX3Nob3dgIC0gdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgdmFsdWUsIHJlc3BlY3RpdmVseS4gQWxzbywgSSdsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBkYXhfa21lbV9kb19ob3RwbHVnYCBhbmQgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgc2luY2UgdGhvc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgaG90cGx1Zy9ob3RyZW1vdmUgbG9naWMgd2lsbCBiZSBoYXBwZW5pbmcuIEkga25vdyB0aGUgcGF0Y2ggd2lsbCBiZSBtYWtpbmcgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBkcml2ZXIgY29kZS5cblxuT2theSwgSSdsbCBkaWcgaW50byBgZHJpdmVycy9kYXgva21lbS5jYCBhbmQgc3RhcnQgd2l0aCBgc3RhdGVfc3RvcmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjA2LjIwMjA2MTIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2MzI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTMyNz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDMtXFxuZHJpdmVycy9kYXgva21lbS5jOjM0NDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjA2LjI2MjcyOTc5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA2MzE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgYGRyaXZlcnMvZGF4L2ttZW0uY2AgZmlsZSwgZnJvbSBhIGtlcm5lbCBkcml2ZXIgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gZHJpdmVycy9kYXgva21lbS5jKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gTXkgZm9jdXMgaXMgcGlucG9pbnRpbmcgYW55IGFkZGl0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlLCBhcyB0aGVzZSB3aWxsIGxpa2VseSBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBldm9sdXRpb24gb2YgdGhlIERBWCAoRGlyZWN0IEFjY2VzcykgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSBjb2RlIHRoYXQgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gcGVyc2lzdGVudCBtZW1vcnkgb3Igb3RoZXIgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgdG8gZXhpc3RpbmcgYWxnb3JpdGhtcywgb3IgZXZlbiBvcHRpbWl6YXRpb25zIG1hZGUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHkgd2l0aGluIHRoZSBEQVggc3Vic3lzdGVtLiBJJ2xsIGJlIGNoZWNraW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBtZXRob2RzLCBlc3BlY2lhbGx5IHRob3NlIGNvbmNlcm5pbmcgZGlyZWN0IGFjY2VzcyB0byBtZW1vcnkuIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9yIG90aGVyIG1lbW9yeS1tYXBwaW5nIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBkcml2ZXIgcmVzaWRlcywgYW5kIHRoZSBjaGFuZ2VzIGhlcmUgd2lsbCBwYWludCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBEQVggbGF5ZXIgaXMgZXZvbHZpbmcgdG8gdXRpbGl6ZSBwZXJzaXN0ZW50IG1lbW9yeSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTowOS45NTMzNjU1NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNTU2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKmRheF9rbWVtX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTI5PXN0YXRpYyBib29sIGFueV9ob3RyZW1vdmVfZmFpbGVkO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMC1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzE6c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzIte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTY2PXN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTcyLS8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzo3MzpzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbmRyaXZlcnMvZGF4L2ttZW0uYy03NC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjkxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTE2Ni0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6MTY3OnN0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTE2OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMjMtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjIyNDpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzEtI2Vsc2VcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjcyOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI4NS0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6Mjg2OnN0YXRpYyB2b2lkIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yODctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTMxMS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzEyOnN0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMTMte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTM4OT1zdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zOTAtXFxuZHJpdmVycy9kYXgva21lbS5jOjM5MTpzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzkyLXtcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDgtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjUwOTpzdGF0aWMgaW50IGRheF9rbWVtX3JlbW92ZV9yYW5nZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTUxMC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTUzMi1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTMzOnN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuZHJpdmVycy9kYXgva21lbS5jLTUzNC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTc1LSNlbHNlXFxuZHJpdmVycy9kYXgva21lbS5jOjU3NjpzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01Nzcte1xcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU5Mi1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTkzOnN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgZGV2aWNlX2RheF9rbWVtX2RyaXZlciA9IHtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTk0LVxcdC5wcm9iZSA9IGRldl9kYXhfa21lbV9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01OTgtXFxuZHJpdmVycy9kYXgva21lbS5jOjU5OTpzdGF0aWMgaW50IF9faW5pdCBkYXhfa21lbV9pbml0KHZvaWQpXFxuZHJpdmVycy9kYXgva21lbS5jLTYwMC17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNjE5LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo2MjA6c3RhdGljIHZvaWQgX19leGl0IGRheF9rbWVtX2V4aXQodm9pZClcXG5kcml2ZXJzL2RheC9rbWVtLmMtNjIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTAuMjQzOTMxMTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NDAzNzQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTWVtb3J5IEhvdHBsdWcgYW5kIERBWCBrbWVtIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50cm9kdWNpbmcgc29tZSBuZXcgZmVhdHVyZXMgdG8gdGhlIGtlcm5lbDsgbWFpbmx5IGZvY3VzZWQgYXJvdW5kIG1lbW9yeSBob3RwbHVnIGFuZCB0aGUgREFYIGttZW0gZHJpdmVyLiBJIGNhbiBzZWUgdGhhdCBpdCdzIGFkZGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIG9mIGNvdXJzZSwgdGhlIGNyaXRpY2FsIGhvdHBsdWcgYW5kIGhvdHJlbW92ZSBsb2dpYy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgYHN0YXRlX3N0b3JlYCwgYHN0YXRlX3Nob3dgLCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGFuZCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLiBBbmQgb2YgY291cnNlLCB0aGUgY2VudHJhbCBob3RwbHVnIGZ1bmN0aW9uLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgaXMgY3J1Y2lhbCBoZXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmFuZ2VzIGFyZSBhY3R1YWxseSBvZmZsaW5lJ2QgYW5kIHJlbW92ZWQsIGZvciB3aGljaCB0aGUgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTQuNDg3OTcyMzEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzc0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz0yNDMwPWludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzYtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM3OlxcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcXHUwMDI2cmFuZ2UsIDEpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzOC19XFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDM5PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDQxLS8qKlxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ0MjogKiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyAtIG9mZmxpbmUgYW5kIHJlbW92ZSBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDQzLSAqIEByYW5nZXM6IGFycmF5IG9mIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzIHRvIG9mZmxpbmUgYW5kIHJlbW92ZVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU3LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjQ1ODppbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjEtfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjUyMjpFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNTIzLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOToxNC41NDczNTQyMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzM1MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyB0aGUgZHluYW1pYyBhZGRpdGlvbiBvZiBtZW1vcnkuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgY29yZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gbWVtb3J5IGhvdHBsdWcsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgZHJpdmVycyBhbmQsIGltcG9ydGFudGx5LCBhIG1hbmFnZWQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBvcmNoZXN0cmF0ZXMgdGhlIGFkZGl0aW9uIGZyb20gYSBoaWdoLWxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXItbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgbG9ja3MgaW52b2x2ZWQuIFdlIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgZGV2aWNlIGRyaXZlcnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWVtb3J5IGhvdHBsdWcgcHJvY2VzcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lhbCBoYW5kbGluZyBtZWNoYW5pc21zLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIG5ldyBtZW1vcnkgcmVnaW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtJ3MgcGh5c2ljYWwgYWRkcmVzcyBtYXAsIHBhZ2UgdGFibGVzIGFyZSB1cGRhdGVkIChvciBjcmVhdGVkIGlmIGl0J3MgYSBjb21wbGV0ZWx5IG5ldyBub2RlKSwgYW5kIGFueSBuZWNlc3NhcnkgZHJpdmVyLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIG5vdGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MTguMTY2MDk0MjA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY2MDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTE2Mzg9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDAtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjQxOiAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0Mi0gKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjcyOmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzMtXFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzAyLX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MDM6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFxcXCJrbWVtXFxcIik7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzA0LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzE1LSAqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzE2OiAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTctICpcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTcyMD1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzIyLXtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MjM6XFx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcyNC1cXHRcXHRcXHRtaHBfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjE4LjIyNTc2MjQwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE4NTg2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEQVgga21lbSBhbmQgTWVtb3J5IEhvdHBsdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgZmFpcmx5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGhvdHBsdWcgYW5kIHRoZSBEQVgga21lbSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugd2UncmUgZ2V0dGluZyBuZXcgc3lzZnMgYXR0cmlidXRlcyBhbmQsIGNydWNpYWxseSwgdGhlIGhvdHBsdWcvaG90cmVtb3ZlIGxvZ2ljIGZvciBEQVgga21lbSBkZXZpY2VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24gYXJlIGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYW5kIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGFzIHdlbGwgYXMgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXkgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxhY2UuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVl9EQVhfS01FTWAsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCBhcmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5LiBPYnZpb3VzbHksIGBDT05GSUdfREVWX0RBWF9LTUVNYCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgc28gdGhhdCdzIGEgZ2l2ZW4uIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBqdWRnaW5nIGJ5IHRoZSBwcmVzZW5jZSBvZiBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAgZm9yIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIG9idmlvdXNseS4gV2Ugd2lsbCBuZWVkIGBDT05GSUdfREVWX0RBWGAgYXMgd2VsbC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL2RheC9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IG5hbWVzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxOTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MjMuNTQ0MzU0NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjY3NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGF4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctNy1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjg6Y29uZmlnIERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIkRldmljZSBEQVg6IGRpcmVjdCBhY2Nlc3MgbWFwcGluZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTE4LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlBNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjMwOmNvbmZpZyBERVZfREFYX0hNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJITUVNIERBWDogZGlyZWN0IGFjY2VzcyB0byAnc3BlY2lmaWMgcHVycG9zZScgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy00OS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjUwOmNvbmZpZyBERVZfREFYX0NYTFxcbmRyaXZlcnMvZGF4L0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIkNYTCBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gQ1hMIFJBTSByZWdpb25zXFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy02My1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjY0OmNvbmZpZyBERVZfREFYX0hNRU1fREVWSUNFU1xcbmRyaXZlcnMvZGF4L0tjb25maWctNjUtXFx0ZGVwZW5kcyBvbiBERVZfREFYX0hNRU0gXFx1MDAyNlxcdTAwMjYgREFYXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6Njg6Y29uZmlnIERFVl9EQVhfRlNERVZcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MjMuNjA0NjI4Njg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzYyMDI5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gUmlnaHQgbm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtZW1vcnkgaG90cGx1ZyBhbmQgaG90cmVtb3ZlIGZ1bmN0aW9uYWxpdGllcyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsLiBUaGVyZWZvcmUsIEkgd2lsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgbW0vS2NvbmZpZ2AgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCwgdG8gc3RhcnQgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjI2Ljc0MDgzNTExOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxODM1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOToyNi44MDEwMzYwODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1Mjg2NTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk1lbW9yeSBIb3RyZW1vdmUgLSBDb25zaWRlcmF0aW9ucyBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgdmFyaW91cyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzIHByb3Blcmx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgbW9kZXJuIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUuLi4gdGhlIGNvcmUgaXNzdWUgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbW92YWwgb2YgbWVtb3J5IGZyb20gYSBydW5uaW5nIHN5c3RlbS4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIGRlYWxsb2NhdGlvbjsgaXQncyBhIGR5bmFtaWMgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSByZXNvdXJjZSBhdmFpbGFibGUuXG5cbkZpcnN0IG9mZiwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiB3ZSdyZSBhdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBhIGJhcmUtbWV0YWwgc2V0dXAsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIGNvbnRleHQsIHJpZ2h0PyBUaGUgdmlydHVhbGl6YXRpb24gbGF5ZXIgYWRkcyBhbm90aGVyIGxheWVyIG9mIGluZGlyZWN0aW9uLCBhbmQgaXRzIGltcGxpY2F0aW9ucyBvbiBob3QtcmVtb3ZlIGJlaGF2aW91ciBjYW4gYmUgbm9uLXRyaXZpYWwsIGVzcGVjaWFsbHkgd2l0aCB0ZWNobmlxdWVzIGxpa2UgYmFsbG9vbmluZywgb3IgbWVtb3J5IG92ZXJjb21taXRtZW50LiBXaGF0IGFyZSB0aGUgaHlwZXJ2aXNvcuKAmXMgZ3VhcmFudGVlcyBhcm91bmQgdHJhbnNwYXJlbnQgbWVtb3J5IHJlbW92YWwsIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbj9cblxuVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiB0aGUgT1MgaXRzZWxmLiBIb3cgd2VsbCBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBob3QtcmVtb3ZlIGV2ZW50PyBEb2VzIGl0IHByb3Blcmx5IHRyYWNrIGFuZCBmcmVlIHBhZ2VzLCBhbmQgZG9lcyBpdCBkbyBzbyBpbiBhIGNvbnNpc3RlbnQgYW5kIHNhZmUgbWFubmVyPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW55IGluY29uc2lzdGVuY2llcyBpbiB0aGUgcGFnZSB0YWJsZSBtYXBwaW5ncywgYW5kIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uLiBXZSdyZSBhc3N1bWluZyB0aGUga2VybmVsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCB0aGlzLCBidXQgY29uZmlndXJhdGlvbiBjYW4gdmFyeSB3aWRlbHkuIElmIHdlIGFyZSBpbiBhIHN5c3RlbSB3aXRoIG1hbnkgTlVNQSBub2Rlcywgd2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3QgdG8gdGhlIGxvY2FsaXR5IG9mIG1lbW9yeSBvcGVyYXRpb25zLlxuXG5MZXQncyBub3QgZm9yZ2V0IHRoZSBhcHBsaWNhdGlvbnMgcnVubmluZy4gSG93IGFyZSB0aGV5IGluZm9ybWVkIChpZiBhdCBhbGwpIG9mIHRoZSBzaHJpbmtpbmcgbWVtb3J5IHNwYWNlPyBJZiB3ZSdyZSByZW1vdmluZyBtZW1vcnkgdGhhdCdzIGFjdGl2ZWx5IGluIHVzZSwgb3IgY29udGFpbmluZyBkYXRhLCB0aGVuIHdlJ3JlIGluIHRyb3VibGUuIEhvdyBkbyB3ZSBlbnN1cmUgYXBwbGljYXRpb25zIGFyZW4ndCBhY2Nlc3Npbmcgb3IgZXhwZWN0aW5nIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFib3V0IHRvIGJlIHVubWFwcGVkPyBBcmUgdGhleSB1dGlsaXppbmcgc2hhcmVkIG1lbW9yeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgaGFuZGxlIGl0PyBXaGF0IGFib3V0IG1lbW9yeS1tYXBwZWQgZmlsZXMgYW5kIGNhY2hlcz8gRGF0YSBsb3NzIGlzIHRoZSB1bHRpbWF0ZSBjb25jZXJuLiBUaGluayBvZiB0aGUgdHJhbnNhY3Rpb25hbCBhcHBsaWNhdGlvbnMsIGZvciBleGFtcGxlLiBXZSBuZWVkIGF0b21pY2l0eSBoZXJlLlxuXG5UaGlua2luZyBvZiB0aGlzLCB3aGF0IGFyZSB0aGUgYmVzdCBwcmFjdGljZXMgZm9yIGd1YXJhbnRlZWluZyBhIHNhZmUgbWVtb3J5IGhvdC1yZW1vdmU/IFdoYXQgYXJlIHRoZSBtZWNoYW5pc21zIGF2YWlsYWJsZT8gRG8gd2UgbmVlZCB0byBpbnRyb2R1Y2UgZXhwbGljaXQgbWVtb3J5IGRyYWluaW5nIHByb2NlZHVyZXM/IFdoYXTigJlzIHRoZSBpbXBsaWNhdGlvbiBmb3IgdGhlIHJlbGlhYmlsaXR5IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IGFib3V0IGl0cyBwZXJmb3JtYW5jZT8gSXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBoaXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBob3QtcmVtb3ZlIHByb2NlZHVyZSBpdHNlbGY/IEhvdyBhcmUgd2UgYWNjb3VudGluZyBmb3IgbG9jayBjb250ZW50aW9uP1xuXG5BbmQgZmluYWxseSwgZGlhZ25vc3RpY3MuIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaG90LXJlbW92ZSBwcm9jZXNzIOKAkyBhIGtlcm5lbCBwYW5pYywgYSBjb3JydXB0ZWQgYXBwbGljYXRpb24sIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBmYWlsdXJlIOKAkyBob3cgZG8gd2UgZGVidWcgaXQ/IFdoYXQga2luZCBvZiBsb2dnaW5nIGFuZCB0cmFjaW5nIGlzIGF2YWlsYWJsZT8gV2hhdCB0b29scyBhcmUgd2UgZ29pbmcgdG8gdXNlIHRvIGV4YW1pbmUgdGhpcyBiZWhhdmlvcj9cblxuU28sIHllYWguLi4gYE1FTU9SWV9IT1RSRU1PVkVgLiBJdCdzIG5vdCBhIHNpbXBsZSBzd2l0Y2g7IGl04oCZcyBhIHdob2xlIGVjb3N5c3RlbSBvZiBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgYSByaWdvcm91cyBhbmQgc3lzdGVtYXRpYyBhcHByb2FjaCB0byBhZGRyZXNzIHRoaXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTozMS42NTM5MDY3MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODM5Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01ODk9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy01OTAtXFxubW0vS2NvbmZpZzo1OTE6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG5tbS9LY29uZmlnLTU5Mi1cXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjMxLjcxNzc1NTA1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIyNjk0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFRhcmdldHMqKlxuXG5Pa2F5LCB5ZXMsIEkgc2VlIHRoZSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcy4gRnJvbSB0aGUgbG9vayBvZiBpdCwgd2UncmUgaW50ZXJlc3RlZCBpbjogYHN0YXRlX3N0b3JlYCwgYHN0YXRlX3Nob3dgLCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuXG5cbkFoYSwgd2FpdCBhIG1pbnV0ZS4gSSByZW1lbWJlciB0aGF0IGBzdGF0ZV9zdG9yZWAgYW5kIGBzdGF0ZV9zaG93YCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBsb2NhdGVkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gU28gdGhhdCdzIHRoZSBzY29wZSBoZXJlLiBTbyBsZXQncyByZWZpbmUgdGhpcyBhbmQganVzdCB3b3JrIHdpdGggdGhvc2Ugc3BlY2lmaWMgaW5zdGFuY2VzIGluIHRoZSBkYXgga21lbSBkcml2ZXI6IGBzdGF0ZV9zdG9yZWAsIGBzdGF0ZV9zaG93YCwgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYW5kIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLlxuXG5Ib3dldmVyLCBiZWZvcmUgd2UgcHJvY2VlZCB0b28gZmFyLCB0aG9zZSBuYW1lcyBgc3RhdGVfc3RvcmVgIGFuZCBgc3RhdGVfc2hvd2AgYXJlIHF1aXRlIGdlbmVyaWMuIFN5emthbGxlciBjb3VsZCBlYXNpbHkgcGljayB1cCBvbiBzaW1pbGFyIG5hbWVzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHVuaXF1ZSBpbiB0aGUgY29kZSBiYXNlLiBXZSBjYW4ndCBiZSB0b28gY2FyZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6MzYuNzQwNDUzNTk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY0ODMzMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva2VybmVsL2VlaF9zeXNmcy5jPTQyPXN0YXRpYyBzc2l6ZV90IGVlaF9wZV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTUtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfc3lzZnMuYzo1NjpzdGF0aWMgc3NpemVfdCBlZWhfcGVfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3N5c2ZzLmMtNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmM9MjYzPXN0YXRpYyBpbnQgYWdlbnRfdGhyZWFkX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jLTI3NS1cXHRcXHQgKiB0byBhdm9pZCBtaXhpbmcgdGhlIHR3byB3aXRoIHN1Y2ggYSBjb25maWd1cmF0aW9uIChvclxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmM6Mjc2OlxcdFxcdCAqIGVsc2UgZml4IGl0IGJ5IGFkZGluZyBhIG11dGV4IHRvIHN0YXRlX3N0b3JlIHRoYXQgd2UgY2FuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYy0yNzctXFx0XFx0ICogc3luY2hyb25pemUgd2l0aCkuXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9Mzk0PXN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vZmZsaW5lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDMtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQwNDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDUtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYz00MTM9c3RhdGljIHNzaXplX3QgY3B1aWRsZV9zdGF0ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMtNDI2LVxcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jOjQyNzpzdGF0aWMgc3NpemVfdCBjcHVpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQyOC1cXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmM9NDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3RhdGVfc3lzZnNfb3BzID0ge1xcbmRyaXZlcnMvY3B1aWRsZS9zeXNmcy5jLTQ0Ni1cXHQuc2hvdyA9IGNwdWlkbGVfc3RhdGVfc2hvdyxcXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYzo0NDc6XFx0LnN0b3JlID0gY3B1aWRsZV9zdGF0ZV9zdG9yZSxcXG5kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYy00NDgtfTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jPTE5PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jLTMwLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jOjMxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmMtMzItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM0My1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzQ0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9kYXgva21lbS5jLTM0NS1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmM9MjIxOT1zdGF0aWMgdm9pZCBleGVjbGlzdHNfY2FwdHVyZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0MS1cXHQvKiBQdWJsaXNoIHRoZSBlcnJvciBzdGF0ZSwgYW5kIGFubm91bmNlIGl0IHRvIHRoZSB3b3JsZCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmM6MjI0MjpcXHRpOTE1X2Vycm9yX3N0YXRlX3N0b3JlKGNhcC1cXHUwMDNlZXJyb3IpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMtMjI0My1cXHRpOTE1X2dwdV9jb3JlZHVtcF9wdXQoY2FwLVxcdTAwM2VlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyMTQ9aTkxNV9ncHVfY29yZWR1bXAoc3RydWN0IGludGVsX2d0ICpndCwgaW50ZWxfZW5naW5lX21hc2tfdCBlbmdpbmVfbWFzaywgdTMyIGR1bXBfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jLTIyMjgtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYzoyMjI5OnZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgaTkxNV9ncHVfY29yZWR1bXAgKmVycm9yKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jPTIyNjA9dm9pZCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGludGVsX2d0ICpndCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMtMjI3MC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jOjIyNzE6XFx0aTkxNV9lcnJvcl9zdGF0ZV9zdG9yZShlcnJvcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYy0yMjcyLVxcdGk5MTVfZ3B1X2NvcmVkdW1wX3B1dChlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oPTMwMz12b2lkIGk5MTVfdm1hX2NhcHR1cmVfZmluaXNoKHN0cnVjdCBpbnRlbF9ndF9jb3JlZHVtcCAqZ3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oLTMwNS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjMwNjp2b2lkIGk5MTVfZXJyb3Jfc3RhdGVfc3RvcmUoc3RydWN0IGk5MTVfZ3B1X2NvcmVkdW1wICplcnJvcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zMDctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oPTM5MT1zdGF0aWMgaW5saW5lIHZvaWRcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5oOjM5MjppOTE1X2Vycm9yX3N0YXRlX3N0b3JlKHN0cnVjdCBpOTE1X2dwdV9jb3JlZHVtcCAqZXJyb3IpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaC0zOTMte1xcbi0tXFxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00MC1cXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYz01MTM9c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2dyZXlidXMvaW50ZXJmYWNlLmMtNTIzLVxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYzo1MjQ6c3RhdGljIHNzaXplX3QgcG93ZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvZ3JleWJ1cy9pbnRlcmZhY2UuYy01MjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYz0zND1zdGF0aWMgc3NpemVfdCBwb3dlcl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jLTQ1LVxcbmRyaXZlcnMvaHdtb24vZW1jMTQwMy5jOjQ2OnN0YXRpYyBzc2l6ZV90IHBvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9od21vbi9lbWMxNDAzLmMtNDctXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jPTkzNz1zdGF0aWMgc3NpemVfdCBzZXFfY3Vycl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtM3gtc3lzZnMuYy05NjEtXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jOjk2MjpzdGF0aWMgc3NpemVfdCBzZXFfY3Vycl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1ldG0zeC1zeXNmcy5jLTk2My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM9MTQxND1zdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmMtMTQyNS1cXG5kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWV0bTR4LXN5c2ZzLmM6MTQyNjpzdGF0aWMgc3NpemVfdCBzZXFfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jlc2lnaHQtZXRtNHgtc3lzZnMuYy0xNDI3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jPTM1OT1zdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9pMmMvbXV4ZXMvaTJjLW11eC1wY2E5NTR4LmMtMzY5LVxcbmRyaXZlcnMvaTJjL211eGVzL2kyYy1tdXgtcGNhOTU0eC5jOjM3MDpzdGF0aWMgc3NpemVfdCBpZGxlX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2kyYy9tdXhlcy9pMmMtbXV4LXBjYTk1NHguYy0zNzEtXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYz0yNzI9c3RhdGljIGVudW0gaWlvX2V2ZW50X2luZm8gaWlvX2V2X2F0dHJfaW5mbyhzdHJ1Y3QgaWlvX2Rldl9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMtMjc2LVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jOjI3NzpzdGF0aWMgc3NpemVfdCBpaW9fZXZfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTI3OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM9Mzg1PXN0YXRpYyBpbnQgaWlvX2RldmljZV9hZGRfZXZlbnQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldixcXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxNi1cXHRcXHRcXHRzaG93ID0gaWlvX2V2X3N0YXRlX3Nob3c7XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmM6NDE3OlxcdFxcdFxcdHN0b3JlID0gaWlvX2V2X3N0YXRlX3N0b3JlO1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1ldmVudC5jLTQxOC1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYz0xMTk9c3RhdGljIHNzaXplX3QgdHJhbnNpZW50X3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xMjktXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYzoxMzA6c3RhdGljIHNzaXplX3QgdHJhbnNpZW50X3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jLTEzMS1cXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmM9MTUxPXN0YXRpYyBERVZJQ0VfQVRUUihkdXJhdGlvbiwgMDY0NCwgdHJhbnNpZW50X2R1cmF0aW9uX3Nob3csXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy10cmFuc2llbnQuYy0xNTItXFx0XFx0ICAgdHJhbnNpZW50X2R1cmF0aW9uX3N0b3JlKTtcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXRyYW5zaWVudC5jOjE1MzpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA2NDQsIHRyYW5zaWVudF9zdGF0ZV9zaG93LCB0cmFuc2llbnRfc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctdHJhbnNpZW50LmMtMTU0LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTMwNzk9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL21kL21kLmM6MzA4MDpzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zMDgxLXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zMjQ4PXN0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSByZGV2X3N0YXRlID1cXG5kcml2ZXJzL21kL21kLmM6MzI0OTpfX0FUVFJfUFJFQUxMT0Moc3RhdGUsIFNfSVJVR098U19JV1VTUiwgc3RhdGVfc2hvdywgc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbWQvbWQuYy0zMjUwLVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM3MzU9cmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTM3NTEtXFxuZHJpdmVycy9tZC9tZC5jOjM3NTI6XFx0aWYgKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSkge1xcbmRyaXZlcnMvbWQvbWQuYy0zNzUzLVxcdFxcdGlmIChjbWRfbWF0Y2gocGFnZSwgXFxcInJlbW92ZVxcXCIpKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQ2NDc9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL21kL21kLmM6NDY0ODphcnJheV9zdGF0ZV9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9tZC9tZC5jLTQ2NDkte1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQ3Nzg9c3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9hcnJheV9zdGF0ZSA9XFxuZHJpdmVycy9tZC9tZC5jOjQ3Nzk6X19BVFRSX1BSRUFMTE9DKGFycmF5X3N0YXRlLCBTX0lSVUdPfFNfSVdVU1IsIGFycmF5X3N0YXRlX3Nob3csIGFycmF5X3N0YXRlX3N0b3JlKTtcXG5kcml2ZXJzL21kL21kLmMtNDc4MC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz02MTEzPW1kX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjEyNS1cXG5kcml2ZXJzL21kL21kLmM6NjEyNjpcXHRpZiAoZW50cnktXFx1MDAzZXN0b3JlID09IGFycmF5X3N0YXRlX3N0b3JlIFxcdTAwMjZcXHUwMDI2IGNtZF9tYXRjaChwYWdlLCBcXFwiY2xlYXJcXFwiKSlcXG5kcml2ZXJzL21kL21kLmMtNjEyNy1cXHRcXHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtvYmosIGF0dHIpO1xcbi0tXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jPTU2OD1zdGF0aWMgaXJxcmV0dXJuX3QgYmgxNzcwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYyOC1cXG5kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmM6NjI5OnN0YXRpYyBzc2l6ZV90IGJoMTc3MF9wb3dlcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jLTYzMC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYz0xMTM2PXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGJoMTc3MF9wb3dlcl9zdGF0ZV9zaG93LFxcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYzoxMTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBiaDE3NzBfcG93ZXJfc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYy0xMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3N5c2ZzLmM9MTU9c3RhdGljIHNzaXplX3QgYnRfY29leF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jOjMwOnN0YXRpYyBzc2l6ZV90IGJ0X2NvZXhfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9zeXNmcy5jLTMxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTE4ODE9c3RhdGljIHNzaXplX3QgbnZtZXRfYW5hX2dyb3VwX2FuYV9zdGF0ZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzoxODk2OnN0YXRpYyBzc2l6ZV90IG52bWV0X2FuYV9ncm91cF9hbmFfc3RhdGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xODk3LVxcdFxcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA0Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA1NS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNTY6c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNTctXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jPTExMTM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2JkX3JnYl9tb2RlX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYy0xMTE3LS8qIFRVRiBMYXB0b3AgS2V5Ym9hcmQgUkdCIFN0YXRlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYzoxMTE4OnN0YXRpYyBzc2l6ZV90IGtiZF9yZ2Jfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMtMTExOS1cXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktYmFzZS5jPTI5NT1zdGF0aWMgc3NpemVfdCBsaWdodGluZ19jb250cm9sX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMDgtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYzozMDk6c3RhdGljIHNzaXplX3QgbGlnaHRpbmdfY29udHJvbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLWJhc2UuYy0zMTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jPTU1OT1zdGF0aWMgc3NpemVfdCBmbl9sb2NrX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaHVhd2VpLXdtaS5jLTU3MS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9odWF3ZWktd21pLmM6NTcyOnN0YXRpYyBzc2l6ZV90IGZuX2xvY2tfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2h1YXdlaS13bWkuYy01NzMtXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jPTEzNzM9c3RhdGljIHNzaXplX3Qgd2xzd19lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzctXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxMzc4OnN0YXRpYyBzc2l6ZV90IHdsc3dfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTEzNzktXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTM5Nj1zdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDAwLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM6MTQwMTpzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfZW11bHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmM9MTQxNj1zdGF0aWMgc3NpemVfdCB3d2FuX2VtdWxzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jOjE0MjE6c3RhdGljIHNzaXplX3Qgd3dhbl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQyMi1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYz0xNDM2PXN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vdGhpbmtwYWRfYWNwaS5jLTE0NDAtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL3RoaW5rcGFkX2FjcGkuYzoxNDQxOnN0YXRpYyBzc2l6ZV90IHV3Yl9lbXVsc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by90aGlua3BhZF9hY3BpLmMtMTQ0Mi1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYz00Mj1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jLTUyLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jOjUzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmMtNTQtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jPTE3OD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE4OC0vKiBDaGFuZ2UgcmVtb3RlIHByb2Nlc3NvciBzdGF0ZSB2aWEgc3lzZnMgKi9cXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jOjE4OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2Nfc3lzZnMuYy0xOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODA0PXN0YXRpYyBzc2l6ZV90IGRhc2RfcmVzZXJ2YXRpb25fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODI0LVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjE4MjU6c3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMTgyNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0xODQ3PXN0YXRpYyBERVZJQ0VfQVRUUihsYXN0X2tub3duX3Jlc2VydmF0aW9uX3N0YXRlLCAwNjQ0LFxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjE4NDg6XFx0XFx0ICAgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93LCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0xODQ5LVxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTMzMD1scGZjX29hc19zdXBwb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMTM0MS0vKipcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzoxMzQyOiAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnRcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0xMzQzLSAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0Llxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MTM1Mz1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjEzNTQ6bHBmY19saW5rX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMTM1NS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTMxMjA9c3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdyxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozMTIxOlxcdFxcdGxwZmNfbGlua19zdGF0ZV9zdG9yZSk7XFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzEyMi1zdGF0aWMgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQwNj1scGZjX29hc19sdW5fc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzQxNS0vKipcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDE2OiAqIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSAtIFN0b3JlIHRoZSBzdGF0ZSAoZW5hYmxlZCBvciBkaXNhYmxlZClcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYy0zNDE3LSAqXFx0XFx0XFx0ICAgIG9mIHdoZXRoZXIgbHVucyB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWRcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jPTM0Mjk9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYzozNDMwOmxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jLTM0MzEtXFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmM9MzQ1Mj1zdGF0aWMgREVWSUNFX0FUVFIobHBmY194bGFuZV9sdW5fc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jOjM0NTM6XFx0XFx0ICAgbHBmY19vYXNfbHVuX3N0YXRlX3Nob3csIGxwZmNfb2FzX2x1bl9zdGF0ZV9zdG9yZSk7XFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMtMzQ1NC1cXG4tLVxcbmRyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jPTMzNDQ9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYzozMzQ1OmZ3X2NyYXNoX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmNkZXYsXFxuZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMtMzM0Ni1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXlyYi5jPTE3NjA9c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvc2NzaS9teXJiLmMtMTgwNC1cXG5kcml2ZXJzL3Njc2kvbXlyYi5jOjE4MDU6c3RhdGljIHNzaXplX3QgcmFpZF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zY3NpL215cmIuYy0xODA2LVxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvc2NzaS9teXJzLmM9OTM0PXN0YXRpYyBzc2l6ZV90IHJhaWRfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk2OC1cXG5kcml2ZXJzL3Njc2kvbXlycy5jOjk2OTpzdGF0aWMgc3NpemVfdCByYWlkX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3Njc2kvbXlycy5jLTk3MC1cXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jPTI0ND12b2lkIGFwYl9jdHJsX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjQ4LVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jLTI1MC1cXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM9MjgxPWFyY2hlX3BsYXRmb3JtX3Bvd2Vyb2ZmX3NlcShzdHJ1Y3QgYXJjaGVfcGxhdGZvcm1fZHJ2ZGF0YSAqYXJjaGVfcGRhdGEpXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNS1cXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jOjMwNjpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYy0zMDctXFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jPTI5NjA9c3RhdGljIHNzaXplX3QgdGFyZ2V0X3RnX3B0X2dwX2FsdWFfYWNjZXNzX3N0YXRlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYy0yOTY2LVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmM6Mjk2NzpzdGF0aWMgc3NpemVfdCB0YXJnZXRfdGdfcHRfZ3BfYWx1YV9hY2Nlc3Nfc3RhdGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMtMjk2OC1cXHRcXHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jPTUzMT1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmM6NTMyOmN1cl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmMtNTMzLVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0zNjY9c3RhdGljIERFVklDRV9BVFRSKGN1cnJlbnRfdnR5LFxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0zNjgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzozNjk6c3RhdGljIHNzaXplX3QgaHZjc192dGVybV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0zNzAtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz00MTk9c3RhdGljIERFVklDRV9BVFRSKHZ0ZXJtX3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUixcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjQyMDpcXHRcXHRodmNzX3Z0ZXJtX3N0YXRlX3Nob3csIGh2Y3NfdnRlcm1fc3RhdGVfc3RvcmUpO1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtNDIxLVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMzA1PXN0YXRpYyBEUklWRVJfQVRUUl9STyhpcnFfaGFuZGxlcnMpO1xcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtMTMwNi1cXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEzMDc6c3RhdGljIHNzaXplX3QgaXJxX2hhbmRsZXJfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydixcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEzMDgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzY0PWludCBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zNjktICpcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozNzA6ICogUGFpcmVkIHdpdGggaW5ldF9za19zdGF0ZV9zdG9yZSgpLiBVc2VkIGluIHBsYWNlcyB3ZSBkb24ndCBob2xkIHNvY2tldCBsb2NrOlxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM3MS0gKiB0Y3BfZGlhZ19nZXRfaW5mbygpLCB0Y3BfZ2V0X2luZm8oKSwgdGNwX3BvbGwoKSwgZ2V0X3RjcDRfc29jaygpIC4uLlxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9MzczPXN0YXRpYyBpbmxpbmUgaW50IGluZXRfc2tfc3RhdGVfbG9hZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zNzktLyoqXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6MzgwOiAqIGluZXRfc2tfc3RhdGVfc3RvcmUgLSB1cGRhdGUgc2stXFx1MDAzZXNrX3N0YXRlXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtMzgxLSAqIEBzazogc29ja2V0IHBvaW50ZXJcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTM4Ni0gKi9cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDozODc6dm9pZCBpbmV0X3NrX3N0YXRlX3N0b3JlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ld3N0YXRlKTtcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC0zODgtXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mj1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxua2VybmVsL3Bvd2VyL21haW4uYy03OTgtXFxua2VybmVsL3Bvd2VyL21haW4uYzo3OTk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMC1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTAtXFxubW0vZGFtb24vc3lzZnMuYzoyMzkxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTE1OD1zdGF0aWMgaW50IHNldF9zdHBfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy0xNjMtXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjE2NDpzdGF0aWMgc3NpemVfdCBzdHBfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZCxcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtMTY1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTEzNTY9RVhQT1JUX1NZTUJPTChpbmV0X3NrX3NldF9zdGF0ZSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTEzNTctXFxubmV0L2lwdjQvYWZfaW5ldC5jOjEzNTg6dm9pZCBpbmV0X3NrX3N0YXRlX3N0b3JlKHN0cnVjdCBzb2NrICpzaywgaW50IG5ld3N0YXRlKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzU5LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTMyMT1pbnQgaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM0MC1cXHQgKi9cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzNDE6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgVENQX0xJU1RFTik7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzQyLVxcdGVyciA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VnZXRfcG9ydChzaywgaW5ldC1cXHUwMDNlaW5ldF9udW0pO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9Mjk2MD12b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMDI2LVxcdCAqL1xcbm5ldC9pcHY0L3RjcC5jOjMwMjc6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgc3RhdGUpO1xcbm5ldC9pcHY0L3RjcC5jLTMwMjgtfVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDQtXFx0ICogdW5kZXIgdGhlIG1zayBzb2NrZXQgbG9jay4gRm9yIHRoZSBtb21lbnQsIHRoYXQgd2lsbCBub3QgYnJpbmdcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTA1OlxcdCAqIGFueXRoaW5nIG1vcmUgdGhhbiBvbmx5IGNhbGxpbmcgaW5ldF9za19zdGF0ZV9zdG9yZSgpLCBiZWNhdXNlIHRoZVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MDYtXFx0ICogb2xkIHN0YXR1cyBpcyBrbm93biAoVENQX0NMT1NFKS5cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTA3LVxcdCAqL1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo5MDg6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShuZXdzaywgVENQX0xJU1RFTik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwOS1cXHRsb2NrX3NvY2soc3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxNjk9dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTg4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxODk6XFx0aW5ldF9za19zdGF0ZV9zdG9yZShzaywgc3RhdGUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxOTAtfVxcbi0tXFxubmV0L3Jma2lsbC9jb3JlLmM9ODA4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9yZmtpbGwvY29yZS5jLTgxOS1cXG5uZXQvcmZraWxsL2NvcmUuYzo4MjA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjM4LjkwNTI5NzcyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA0MDA1ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIHBhdHRlcm4gaGVyZSB3aXRoIHRoZSBgc3RhdGVfc3RvcmVgIGFuZCBpdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBEQVggS01FTSBob3RwbHVnLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYW5kIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbGwgaGFuZGxlZCBncmFjZWZ1bGx5LlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYCBieSBkaXJlY3RseSBjaGVja2luZyBgZHJpdmVycy9kYXgva21lbS5jYC4gWWVzLCBpdCdzIHRoZXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQXJlIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgIHN1ZmZpY2llbnQ/IEkga25vdyBgREVWX0RBWGAgaXMgYWxzbyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZSwgc28gbGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLiBcblxuSGFuZyBvbiwgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBkb2Vzbid0IHF1aXRlIG1ha2Ugc2Vuc2UuIEFjY29yZGluZyB0byB0aGUgS2NvbmZpZywgYERFVl9EQVhfS01FTWAgZG9lcyBkZXBlbmQgb24gYERFVl9EQVhgIGJ1dCBhbHNvIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gSXMgdGhlIEtjb25maWcgY29ycmVjdD8gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjQ0LjIwOTMwNzg5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2ODg5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVl9EQVhfS01FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L0tjb25maWc9Njg9Y29uZmlnIERFVl9EQVhfRlNERVZcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzItXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3Mzpjb25maWcgREVWX0RBWF9LTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiS01FTSBEQVg6IG1hcCBkYXgtZGV2aWNlcyBhcyBTeXN0ZW0tUkFNXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNDoyOTo0NC4yNzEwMDQ2NDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTk1OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcy4gV2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgXCJpdFwiIGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5P1xuXG5cbiIsIklucHV0VG9rZW5zIjozNTkyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6NDguNjAwOTY3NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kYXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuICA3MTpcXHRcXHRkZWZhdWx0IERFVl9EQVhcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIERFVl9EQVhfS01FTVxcbiAgNzQ6XFx0XFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG4gIDc1OlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBTdXBwb3J0IGFjY2VzcyB0byBwZXJzaXN0ZW50LCBvciBvdGhlciBwZXJmb3JtYW5jZVxcbiAgODA6XFx0XFx0ICBkaWZmZXJlbnRpYXRlZCBtZW1vcnkgYXMgaWYgaXQgd2VyZSBTeXN0ZW0gUkFNLiBUaGlzIGFsbG93c1xcbiAgODE6XFx0XFx0ICBlYXNpZXIgdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGJ5IHVubW9kaWZpZWQgYXBwbGljYXRpb25zLCBvclxcbiAgODI6XFx0XFx0ICBhZGRzIGNvcmUga2VybmVsIG1lbW9yeSBzZXJ2aWNlcyB0byBoZXRlcm9nZW5lb3VzIG1lbW9yeSB0eXBlc1xcbiAgODM6XFx0XFx0ICAoSE1FTSkgbWFya2VkIFxcXCJyZXNlcnZlZFxcXCIgYnkgcGxhdGZvcm0gZmlybXdhcmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCAgVG8gdXNlIHRoaXMgZmVhdHVyZSwgYSBEQVggZGV2aWNlIG11c3QgYmUgdW5ib3VuZCBmcm9tIHRoZVxcbiAgODY6XFx0XFx0ICBkZXZpY2VfZGF4IGRyaXZlciBhbmQgYm91bmQgdG8gdGhpcyBrbWVtIGRyaXZlciBvbiBlYWNoIGJvb3QuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiAgODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjQ4LjYwMTA1OTE2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIyNzY4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgREVWX0RBWF9LTUVNIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYERFVl9EQVhfS01FTWAgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpdCBpbmhlcmVudGx5IHJlbGllcyBvbiBgREVWX0RBWGAsIHRoYXQgbXVjaCBpcyBjbGVhciwgYW5kIGFsc28gYE1FTU9SWV9IT1RQTFVHYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiBEQVguIE5vdywgaGVyZSdzIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBNRU1PUllfSE9UUkVNT1ZFYCBpc24ndCAqc3RyaWN0bHkqIGVzc2VudGlhbCBmb3IganVzdCBlbmFibGluZyBgREVWX0RBWF9LTUVNYCBpdHNlbGYuIEJ1dCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3aXRob3V0IGl0LCB0aGUgKmhvdHJlbW92ZSogZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4gU28sIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIGNoZWNrIGlmIGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSByZXNpZGVzLCBzbyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6Mjk6NTIuNzIzODMwMDk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE4NjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RheC9rbWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTE2Nz1zdGF0aWMgaW50IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTIxMS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MjEyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTMtLyoqXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MjcyPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI3Ni19XFxuZHJpdmVycy9kYXgva21lbS5jOjI3NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc4LVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTM5MT1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjUwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTAyLS8qXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9NTc2PXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTkwLX1cXG5kcml2ZXJzL2RheC9rbWVtLmM6NTkxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYy01OTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjI5OjUyLjc4MzAyNDU0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU3Mzk4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggYW5kIE1lbW9yeSBIb3RwbHVnL0hvdHJlbW92ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgaG90LXJlbW92YWwsIGNvbmZpcm1lZCBieSBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBUaGUgY29yZSBjb25maWdzIGludm9sdmVkIGFyZSBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgbmVlZCBgREVWX0RBWF9QTUVNYCwgYERFVl9EQVhfSE1FTWAsIG9yIGV2ZW4gYERFVl9EQVhfQ1hMYCBmb3IgREFYIGRldmljZSBjcmVhdGlvbi4gVGhlIHRlc3Qgc2NyaXB0LCB3aXRoIGl0cyBgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mYCBjb21tYW5kLCBzdWdnZXN0cyBhdCBsZWFzdCBgREVWX0RBWF9QTUVNYCBvciBwb3NzaWJseSBgTkRfQlRUYCBhcmUgaW4gcGxheS4gSG93ZXZlciwgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBEQVggZGV2aWNlcywgcGVyaGFwcyBieSBzeXNmcywgYXNzdW1pbmcgdGhlIHVuZGVybHlpbmcgZHJpdmVycyBhcmUgcHJlc2VudC4gVG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgSSdsbCBpbmNsdWRlIGBERVZfREFYX1BNRU1gIGFuZCBgREVWX0RBWF9ITUVNYCBmb3Igbm93LiBVbHRpbWF0ZWx5LCBgREVWX0RBWGAgYW5kIGBERVZfREFYX0tNRU1gIGFyZSB0aGUgZXNzZW50aWFscywgYWxvbmcgd2l0aCB0aGUgaG90cGx1Zy9ob3RyZW1vdmUgb3B0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ3ZlIGdvdCBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGlzIHJlYWNoYWJsZS4gQW5kLCB5ZXMsIGl0J3MgY2FsbGVkIGZyb20gYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5YC4gTGlrZXdpc2UsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBgZGF4X2ttZW1fZG9faG90cGx1Z2AgYW5kIGBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlIG5vdCBtaXNzZWQgYW55dGhpbmcsIEknbGwgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlcmUgYXJlIGBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHJgLCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYW5kIGBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZWAuIEknbGwgZm9jdXMgb24gYG1ocF9vbmxpbmVfdHlwZV90b19zdHJgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDk4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjAwLjQ0MDQyNTU5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzU5MDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NDk9RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTAtXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjUxOmNvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Mi17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTYtfVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo1NzpFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTgtXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzI3PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTMzOC1cXHRlbHNlXFxuZHJpdmVycy9kYXgva21lbS5jOjMzOTpcXHRcXHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXFx1MDAzZXN0YXRlKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTEyOT1leHRlcm4gaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoxMzA6Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0xMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjAyLjU1ODAyNjM3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0OTY5NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZWZsZWN0aW5nIG9uIFJlY2VudCBBZGRpdGlvbnMgYW5kIGEgUG90ZW50aWFsIEFyZWEgZm9yIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSd2ZSBnb3QgdGhlIG5ldyBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgZnVuY3Rpb24gaW50ZWdyYXRlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgZXhjZWxsZW50LCBgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyYCBpcyBub3cgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RlcCBmb3J3YXJkLlxuXG5Ob3csIHdpdGggdGhvc2UgZnVuZGFtZW50YWwgcGllY2VzIGluIHBsYWNlLCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWxsIGFib3V0LiBUaGVyZSdzIGEgZGVjZW50IGNoYW5jZSBpdCBoYXMgYSByZWxhdGlvbnNoaXAgdG8gdGhlIHByaW9yIGZ1bmN0aW9ucywgaW4gc29tZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDQ6MzA6MDUuNjEyOTk4NDUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxMTUzNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9MzE9c3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNS1cXG5kcml2ZXJzL2RheC9rbWVtLmM6MzY6XFx0KnIgPSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShyYW5nZSk7XFxuZHJpdmVycy9kYXgva21lbS5jLTM3LVxcdGlmIChyLVxcdTAwM2VzdGFydCBcXHUwMDNlPSByLVxcdTAwM2VlbmQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5Lmg9MTAyPWludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LmgtMTA0LS8qKlxcbmluY2x1ZGUvbGludXgvbWVtb3J5Lmg6MTA1OiAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTEwNi0gKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnblxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnkuaC0xMTQtICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnkuaDoxMTU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcXG5pbmNsdWRlL2xpbnV4L21lbW9yeS5oLTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjA3LjUwNDE1ODQ5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE0NzUzOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggS01FTSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UndmUgY29uZmlybWVkIHRoZSBpbmNsdXNpb24gb2YgYG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBob3RwbHVnIGltcGxlbWVudGF0aW9uLiBJJ3ZlIGlkZW50aWZpZWQgYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCwgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCwgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAsIGFuZCBgbWhwX29ubGluZV90eXBlX3RvX3N0cmAgYXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2UgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgIGFyZSBhbGwgc3RhdGljLiBUaGF0J3MgcmVsZXZhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlLiBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBtaHBfb25saW5lX3R5cGVfdG9fc3RyYCBhcmUgZ2xvYmFsLCBpbXBseWluZyB0aGV5J3JlIGFjY2Vzc2libGUgYWNyb3NzIHRoZSBzeXN0ZW0uXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgREVWX0RBWGAsIGBERVZfREFYX0tNRU1gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBBaCwgYW5kIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjb25maWcgaXMgZXhhY3RseSBgQ09ORklHX0RFVl9EQVhfS01FTWAuIFllcywgaXQgaXMuXG5cblRoZSBsb2dpYyBzZWVtcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgc2V0dGluZyB1cCBhIGAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVgIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoZSBob3RwbHVnIHN0YXRlIGZvciBEQVgga21lbSBkZXZpY2VzLiBJdCdzIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGNvZGUgdG8gaGFuZGxlIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2Vzc2VzIGZvciBtZW1vcnkgcmFuZ2VzLCB1c2luZyB0aG9zZSBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQncyBhbGwgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIE9rYXksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5ODQsIk91dHB1dFRva2VucyI6MjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA0OjMwOjE1LjgxODkxNjczOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTg2OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCIsXG4gICAgXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc1wiLFxuICAgIFwiX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkXCIsXG4gICAgXCJtaHBfb25saW5lX3R5cGVfdG9fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgbWVtb3J5IGhvdHBsdWcgc3RhdGUgb2YgREFYIGttZW0gZGV2aWNlcy4gSXQgYWRkcyBsb2dpYyB0byBoYW5kbGUgaG90cGx1Z2dpbmcgYW5kIGhvdHJlbW92aW5nIG1lbW9yeSByYW5nZXMsIGluY2x1ZGluZyBuZXcgY29yZSBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbnMgbGlrZSBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgIGFuZCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGRldmljZSBiaW5kaW5nL3VuYmluZGluZywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwibWhwX29ubGluZV90eXBlX3RvX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBob3RwbHVnIHN0YXRlIG9mIERBWCBrbWVtIGRldmljZXMuIEl0IGFkZHMgbG9naWMgdG8gaGFuZGxlIGhvdHBsdWdnaW5nIGFuZCBob3RyZW1vdmluZyBtZW1vcnkgcmFuZ2VzLCBpbmNsdWRpbmcgbmV3IGNvcmUgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25zIGxpa2UgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhbmQgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBkZXZpY2UgYmluZGluZy91bmJpbmRpbmcsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsk6g2[1] Phase: Succeeded StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 04:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 04:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2] Phase: Succeeded StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 04:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 04:30:39 +0000 UTC FinishedAt: 2026-07-01 04:30:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowsk6g2/series-workflowsk6g2-convert-artifact-2635381062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 04:31:00 +0000 UTC FinishedAt: 2026-07-01 04:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 04:31:00 +0000 UTC FinishedAt: 2026-07-01 04:57:06 +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:*2fbea023-c8a9-48b5-bcda-2ed16cd7928c,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-workflowsk6g2/series-workflowsk6g2-convert-artifact-2635381062/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": "7943052a-5fba-43b3-ba3b-3b1b1f110288", "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-workflowsk6g2/series-workflowsk6g2-build-action-3909191388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 04:31:00 +0000 UTC FinishedAt: 2026-07-01 04:56:56 +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:*2fbea023-c8a9-48b5-bcda-2ed16cd7928c,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-workflowsk6g2/series-workflowsk6g2-convert-artifact-2635381062/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": "7943052a-5fba-43b3-ba3b-3b1b1f110288", "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-workflowsk6g2/series-workflowsk6g2-build-action-3909191388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 04:57:06 +0000 UTC FinishedAt: 2026-07-01 04:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 04:57:06 +0000 UTC FinishedAt: 2026-07-01 04:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 04:57:06 +0000 UTC FinishedAt: 2026-07-01 04:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 04:57:06 +0000 UTC FinishedAt: 2026-07-01 04:57:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowsk6g2/series-workflowsk6g2-convert-artifact-92626585/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 04:57:26 +0000 UTC FinishedAt: 2026-07-01 04:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 04:57:26 +0000 UTC FinishedAt: 2026-07-01 04:59:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7943052a-5fba-43b3-ba3b-3b1b1f110288,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-workflowsk6g2/series-workflowsk6g2-build-action-3909191388/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-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 04:59:38 +0000 UTC FinishedAt: 2026-07-01 04:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 04:59:38 +0000 UTC FinishedAt: 2026-07-01 04:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 04:59:38 +0000 UTC FinishedAt: 2026-07-01 05:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 04:59:38 +0000 UTC FinishedAt: 2026-07-01 05:20:02 +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:*2fbea023-c8a9-48b5-bcda-2ed16cd7928c,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-workflowsk6g2/series-workflowsk6g2-convert-artifact-92626585/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": "4814aec6-4c4f-4cb1-81c4-fbabb598be11", "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-workflowsk6g2/series-workflowsk6g2-build-action-2037345781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 04:59:38 +0000 UTC FinishedAt: 2026-07-01 05:19:52 +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:*2fbea023-c8a9-48b5-bcda-2ed16cd7928c,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-workflowsk6g2/series-workflowsk6g2-convert-artifact-92626585/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": "4814aec6-4c4f-4cb1-81c4-fbabb598be11", "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-workflowsk6g2/series-workflowsk6g2-build-action-2037345781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 05:20:02 +0000 UTC FinishedAt: 2026-07-01 05:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 05:20:02 +0000 UTC FinishedAt: 2026-07-01 05:20:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 05:20:02 +0000 UTC FinishedAt: 2026-07-01 05:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 05:20:02 +0000 UTC FinishedAt: 2026-07-01 05:22:03 +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:*4814aec6-4c4f-4cb1-81c4-fbabb598be11,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-workflowsk6g2/series-workflowsk6g2-build-action-2037345781/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-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},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:*7943052a-5fba-43b3-ba3b-3b1b1f110288,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4814aec6-4c4f-4cb1-81c4-fbabb598be11,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-workflowsk6g2/series-workflowsk6g2-build-action-3909191388/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-workflowsk6g2/series-workflowsk6g2-build-action-2037345781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 05:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 05:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},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-workflowsk6g2/series-workflowsk6g2-convert-artifact-545405582/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 05:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 05:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 05:22:13 +0000 UTC FinishedAt: 2026-07-01 05:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 05:22:33 +0000 UTC FinishedAt: 2026-07-01 08:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsk6g2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dax_kmem_do_hotplug","dax_kmem_do_hotremove","dax_kmem_init_resources","dax_kmem_cleanup_resources","dax_kmem_parse_state","offline_and_remove_memory_ranges","__add_memory_driver_managed","mhp_online_type_to_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"ef315e77-1437-483f-bad9-cf29c3edcd11","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 05:22:33 +0000 UTC FinishedAt: 2026-07-01 08:27:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7943052a-5fba-43b3-ba3b-3b1b1f110288,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4814aec6-4c4f-4cb1-81c4-fbabb598be11,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-workflowsk6g2/series-workflowsk6g2-build-action-3909191388/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-workflowsk6g2/series-workflowsk6g2-build-action-2037345781/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-workflowsk6g2/series-workflowsk6g2-convert-artifact-545405582/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,}