Name: series-workflownmk6q Phase: Succeeded StartedAt: 2026-06-24 15:09:17 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[0] Phase: Succeeded StartedAt: 2026-06-24 15:09:17 +0000 UTC FinishedAt: 2026-06-24 15:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 15:09:17 +0000 UTC FinishedAt: 2026-06-24 15:20:51 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "1f06fb13-e5f6-49c2-8f02-5240b7e057e5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dax_kmem_do_hotplug", "dax_kmem_init_resources", "dax_kmem_do_hotremove", "dax_kmem_cleanup_resources", "dax_kmem_parse_state", "dev_dax_kmem_probe", "dev_dax_kmem_remove", "__add_memory_driver_managed", "offline_and_remove_memory_ranges" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2X2RheF9rbWVtX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZTQzMThjNTE1MGQxN2EyNzBmZmQ4NjY4NmM1ZTBjZDU3NzU4N2UwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTU6MTg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuQEAgLTE1MSwzICYjNDM7MTUxLDI5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRtZW1tYXBfb25fbWVtb3J5IHBhcmFtZXRlciBmb3IgbWVtb3J5X2hvdHBsdWcuIFRoaXMgaXNcbiBcdFx0dHlwaWNhbGx5IHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAtXG4gXHRcdG1lbW9yeV9ob3RwbHVnLm1lbW1hcF9vbl9tZW1vcnkgc2V0IHRvICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7Zm9yY2UmIzM5Oy5cJiMzNDtcbiYjNDM7XG4mIzQzO1doYXQ6XHRcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxuJiM0MztEYXRlOlx0XHRKdW5lLCAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHR2Ni4yMVxuJiM0MztDb250YWN0Olx0bnZkaW1tQGxpc3RzLmxpbnV4LmRldlxuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgQ29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBtZW1vcnkgcmVnaW9uLlxuJiM0MztcdFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbiYjNDM7XHRcdE9ubHkgYXBwbGllcyB0byBkYXhfa21lbSBkZXZpY2VzLlxuJiM0MztcbiYjNDM7XHRcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcbiYjNDM7XHRcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxuJiM0MztcbiYjNDM7XHRcdCAgXCYjMzQ7dW5wbHVnZ2VkXCYjMzQ7OiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudFxuJiM0MztcdFx0ICBcJiMzNDtvbmxpbmVcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUsIHpvbmUgY2hvc2VuIGJ5IHRoZSBrZXJuZWxcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lX2tlcm5lbFwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTFxuJiM0MztcdFx0ICBcJiMzNDtvbmxpbmVfbW92YWJsZVwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEVcbiYjNDM7XG4mIzQzO1x0XHRcJiMzNDtvZmZsaW5lXCYjMzQ7IChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZVxuJiM0MztcdFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxuJiM0MztcdFx0YXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyBcJiMzNDtvZmZsaW5lXCYjMzQ7LiAgSXQgY2Fubm90IGJlIHdyaXR0ZW4sXG4mIzQzO1x0XHRhcyBpdCYjMzk7cyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cbiYjNDM7XG4mIzQzO1x0XHRBIGRldmljZSBjYW4gb25seSBiZSBvbmxpbmVkIGZyb20gdGhlIFwmIzM0O3VucGx1Z2dlZFwmIzM0OyBzdGF0ZSwgc28gYVxuJiM0MztcdFx0ZGV2aWNlIG11c3QgYmUgcmV0dXJuZWQgdG8gXCYjMzQ7dW5wbHVnZ2VkXCYjMzQ7IGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZFxuJiM0MztcdFx0aW50byBhIGRpZmZlcmVudCBzdGF0ZS5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGIzMTgzNDQ0MjZmYWJjLi4zYTJmNjlkM2FmN2I1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5AQCAtNDYsNiAmIzQzOzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKVxuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIDAgfHwgb25saW5lX3R5cGUgXHUwMDNlPSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xuIFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2J1cy5jIGIvZHJpdmVycy9kYXgvYnVzLmNcbmluZGV4IDQ5MjU3M2I0N2Y2NjI0Li40YTAzYjMyM2IwMDM3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9idXMuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbkBAIC0zOTQsNiAmIzQzOzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdC5zaXplID0gMCxcbiBcdFx0XHQuaWQgPSAtMSxcbiBcdFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuJiM0MztcdFx0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuIFxuQEAgLTE1MjcsNiAmIzQzOzE1MjksNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKVxuIFx0aWRhX2luaXQoXHUwMDI2ZGV2X2RheC1cdTAwM2VpZGEpO1xuIFxuIFx0ZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5ID0gZGF0YS1cdTAwM2VtZW1tYXBfb25fbWVtb3J5O1xuJiM0MztcdGRldl9kYXgtXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVx1MDAzZW9ubGluZV90eXBlO1xuIFxuIFx0aW5vZGUgPSBkYXhfaW5vZGUoZGF4X2Rldik7XG4gXHRkZXYtXHUwMDNlZGV2dCA9IGlub2RlLVx1MDAzZWlfcmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXG5pbmRleCA1OTA5MTcxYTQ0MjhiNy4uZjNjOWRhZTVkZTZiYTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmhcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjaWZuZGVmIF9fREFYX0JVU19IX19cbiAjZGVmaW5lIF9fREFYX0JVU19IX19cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbkBAIC0xNiw2ICYjNDM7MTcsMTMgQEAgc3RydWN0IGRheF9yZWdpb247XG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBvbmxpbmVfdHlwZSBzZW50aW5lbDogdGhlIGRldmljZSB3YXMgY3JlYXRlZCB3aXRob3V0IGFuIGV4cGxpY2l0IG9ubGluZVxuJiM0MzsgKiBwb2xpY3ksIHNvIHRoZSBzeXN0ZW0gZGVmYXVsdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBrbWVtIGRyaXZlciBiaW5kcyxcbiYjNDM7ICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgREFYX09OTElORV9ERUZBVUxUXHQoLTEpXG4mIzQzO1xuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcbiBcdFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuQEAgLTI2LDYgJiM0MzszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEge1xuIFx0cmVzb3VyY2Vfc2l6ZV90IHNpemU7XG4gXHRpbnQgaWQ7XG4gXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XG4mIzQzO1x0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xuIH07XG4gXG4gc3RydWN0IGRldl9kYXggKmRldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvY3hsLmMgYi9kcml2ZXJzL2RheC9jeGwuY1xuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvY3hsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2N4bC5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuaW5kZXggODFlNGFmNDllMzljMTAuLmNjZDc3OTY1ZmUzZWQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiAmIzQzOzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xuICAqIEBkZXY6IGRldmljZSBjb3JlXG4gICogQHBnbWFwOiBwZ21hcCBmb3IgbWVtbWFwIHNldHVwIC8gbGlmZXRpbWUgKGRyaXZlciBvd25lZClcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XG4mIzQzOyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXG4mIzQzOyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICYjNDM7OTgsNyBAQCBzdHJ1Y3QgZGV2X2RheCB7XG4gXHRzdHJ1Y3QgZGV2aWNlIGRldjtcbiBcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4gXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XG4mIzQzO1x0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xuIFx0aW50IG5yX3JhbmdlO1xuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZXJhbmdlc1tpXTtcbiBcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcdTAwMjZkYXhfcmFuZ2UtXHUwMDNlcmFuZ2U7XG4gXG4tXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cbi1cdHItXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4tXHRyLVx1MDAzZWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbiYjNDM7XG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbiYjNDM7XHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuJiM0MztcdGludCBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucyAqL1xuIFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcbiB9O1xuIFxuQEAgLTY1LDE1ICYjNDM7NjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuJiM0MztcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcbiYjNDM7XHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgYWRkZWQgPSAwO1xuJiM0MztcdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4mIzQzO1x0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuJiM0MztcdFx0XHRtaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYyYjMzk7ZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4mIzQzO1x0XHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuJiM0MztcdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdG9ubGluZV90eXBlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVsZWFzZSB0aGUgcmVzZXJ2YXRpb24gZm9yIHRoZSByYW5nZSB0aGF0IGZhaWxlZCB0b1xuJiM0MztcdFx0XHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcbiYjNDM7XHRcdFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pIHtcbiYjNDM7XHRcdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGFkZGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRhZGRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWRkZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgbWFwcGVkID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXG4mIzQzO1x0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4mIzQzO1x0XHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSksXG4mIzQzO1x0XHRcdFx0XHQgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIXJlcykge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dFxuJiM0MztcdFx0XHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAobWFwcGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbiYjNDM7XHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuJiM0MztcdFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcbiYjNDM7XHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVzLVx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xuJiM0MztcdFx0bWFwcGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hcHBlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICpcbiYjNDM7ICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxuJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxuJiM0MzsgKiB0aGUgZGV2aWNlIGlzIHJldHVybmVkIHRvIGl0cyBwcmlvciBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCBpLCBucl9yYW5nZXMgPSAwLCByYztcbiYjNDM7XG4mIzQzO1x0cmFuZ2VzID0ga21hbGxvY19hcnJheShkZXZfZGF4LVx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFuZ2VzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTm90aGluZyBhZGRlZCBtZWFucyBub3RoaW5nIHRvIHJlbW92ZS4gKi9cbiYjNDM7XHRpZiAoIW5yX3Jhbmdlcykge1xuJiM0MztcdFx0a2ZyZWUocmFuZ2VzKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7XG4mIzQzO1x0a2ZyZWUocmFuZ2VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGFueV9ob3RyZW1vdmVfZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtob3RyZW1vdmUgZmFpbGVkLCBkZXZpY2UgbGVmdCBvbmxpbmU6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXNcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXG4mIzQzO1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4mIzQzO1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTigoKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4mIzQzO1x0XHQgXCYjMzQ7SG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9ubGluZV90eXBlO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xuJiM0MztcdGlmIChzeXNmc19zdHJlcShidWYsIFwmIzM0O3VucGx1Z2dlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xuJiM0MztcdC8qIERpc2FsbG93IFwmIzM0O29mZmxpbmVcJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4mIzQzO1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbiYjNDM7XHRcdHN0YXRlX3N0ciA9IFwmIzM0O3VucGx1Z2dlZFwmIzM0OztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBzdGF0ZV9zdHIgPzogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IG9ubGluZV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkge1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4mIzQzO1x0XHRyZXR1cm4gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xuJiM0MztcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcbiBcdGludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFO1xuIFxuIFx0LypcbkBAIC0xMzMsNjggJiM0Mzs0NDUsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4mIzQzO1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4mIzQzO1x0ZGF0YS1cdTAwM2VkZXZfZGF4ID0gZGV2X2RheDtcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbi1cdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbi1cdFx0ICovXG4tXHRcdHJjID0gYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xuJiM0MztcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuJiM0MztcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKVxuJiM0MztcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UocmVzKTtcbi1cdFx0XHRrZnJlZShyZXMpO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0bWFwcGVkJiM0MzsmIzQzOztcbi1cdH1cbiYjNDM7XHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ob3RwbHVnO1xuJiM0MztcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuJiM0MztcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVxdWVzdF9tZW06XG4mIzQzO2Vycl9ob3RwbHVnOlxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztlcnJfcmVzb3VyY2VzOlxuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDgsNjMgJiM0Mzs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4gXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXG4mIzQzO1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuIFx0Lypcbi1cdCAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90XG4tXHQgKiBvZmZsaW5lIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiByZW1vdmVfbWVtb3J5KCkgd2lsbCBmYWlsLCBhbmRcbi1cdCAqIHRoZXJlIGlzIG5vIHdheSB0byBob3RyZW1vdmUgdGhpcyBtZW1vcnkgdW50aWwgcmVib290IGJlY2F1c2UgZGV2aWNlXG4tXHQgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuXG4mIzQzO1x0ICogT25saW5lIG1lbW9yeSBjYW5ub3Qgc2FmZWx5IGJlIHJlbW92ZWQgKG9mZmxpbmluZyBkdXJpbmcgdW5iaW5kIGNhblxuJiM0MztcdCAqIGRlYWRsb2NrIGEgdGFzayBhcyB1bmJpbmQgY2Fubm90IGJlIGludGVycnVwdGVkKS4gIFVuZm9ydHVuYXRlbHkgd2VcbiYjNDM7XHQgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbFxuJiM0MztcdCAqIHRoZSBuZXh0IHJlYm9vdCAtIGFuZCB0aGUgbWVtb3J5IHdpbGwgc3RheSBvbmxpbmUgdW50aWwgdGhlbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuXG4gXHQgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbi1cdFx0aW50IHJjO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRyYyA9IHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSkpO1xuLVx0XHRpZiAocmMgPT0gMCkge1xuLVx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4tXHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuJiM0MztcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7SG90cGx1ZyByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXG5cJiMzNDspO1xuIFx0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4tXHRcdGRldl9lcnIoZGV2LFxuLVx0XHRcdFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxuXCYjMzQ7LFxuLVx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpKSB7XG4mIzQzO1x0XHRkZXZfd2FybihkZXYsIFwmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChzdWNjZXNzIFx1MDAzZT0gZGV2X2RheC1cdTAwM2Vucl9yYW5nZSkge1xuLVx0XHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVx1MDAzZW1naWQpO1xuLVx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbi1cdFx0a2ZyZWUoZGF0YSk7XG4tXHRcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuLVx0XHQvKlxuLVx0XHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbi1cdFx0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcbi1cdFx0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxuLVx0XHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4tXHRcdCAqIHRpbGwgbmV4dCByZWJvb3QuXG4tXHRcdCAqL1xuLVx0XHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuLVx0fVxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4mIzQzO1x0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4mIzQzO1x0a2ZyZWUoZGF0YSk7XG4mIzQzO1x0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbiYjNDM7XHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuJiM0MztcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbiYjNDM7XHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4mIzQzO1x0ICogdGlsbCBuZXh0IHJlYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXG4gXHQgKiBkZXZpY2UtZGF4IHJhbmdlIGFuZCByZXR1cm4gJiMzOTswJiMzOTsgdG8gLVx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L3BtZW0uYyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9wbWVtLmNcbkBAIC02Myw2ICYjNDM7NjMsNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGF4X3BtZW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQucGdtYXAgPSBcdTAwMjZwZ21hcCxcbiBcdFx0LnNpemUgPSByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuJiM0MztcdFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxuIFx0fTtcbiBcbiBcdHJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG5pbmRleCA0NjNkYzAyZjZjZmYwNS4uOWY1ZWYwMzA5Zjc3MzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUlOX01FTU9SWV9CTE9DS19TSVpFICAgICAoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcbiBcbkBAIC0xMDAsNiAmIzQzOzEwMSwyNyBAQCBpbnQgYXJjaF9nZXRfbWVtb3J5X3BoeXNfZGV2aWNlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuKTtcbiB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKHZvaWQpO1xuIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcbiYjNDM7ICogQHJhbmdlOiB0aGUgaW5wdXQgcmFuZ2UgdG8gYWxpZ25cbiYjNDM7ICpcbiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2tcbiYjNDM7ICogYm91bmRhcmllcy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB3aGljaCBtdXN0XG4mIzQzOyAqIG9wZXJhdGUgb24gbWVtb3J5LWJsb2NrIGFsaWduZWQgcmFuZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBhbGlnbmVkIHJhbmdlLiBDYWxsZXJzIHNob3VsZCBjaGVjayB0aGF0IHRoZSByZXR1cm5lZFxuJiM0MzsgKiByYW5nZSBpcyB2YWxpZCAoYWxpZ25lZC5zdGFydCBcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcbiYjNDM7XG4mIzQzO1x0YWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbiYjNDM7XHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsaWduZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xuIFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcbkBAIC0yNjcsNiAmIzQzOzI2OCw3IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKTtcbiBcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5AQCAtMjgzLDYgJiM0MzsyODUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgaW50IG5yX3JhbmdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRUJVU1k7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5AQCAtMjk0LDYgJiM0MzszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxuIFx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuJiM0MztpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXG4gXHRcdFx0XHQgICAgIG1ocF90IG1ocF9mbGFncyk7XG5AQCAtMzE2LDYgJiM0MzszMjcsOCBAQCBleHRlcm4gc3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsXG4gZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XG4gdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0yMzksNiAmIzQzOzIzOSw3IEBAIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZClcbiBcbiBcdHJldHVybiBtaHBfZGVmYXVsdF9vbmxpbmVfdHlwZTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XG4gXG4gdm9pZCBtaHBfc2V0X2RlZmF1bHRfb25saW5lX3R5cGUoZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbkBAIC0xMzM3LDcgJiM0MzsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIFxuIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiB7XG4tXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiYjNDM7XHRlbnVtIG1tb3AgKm9ubGluZV90eXBlID0gYXJnO1xuJiM0MztcbiYjNDM7XHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XG4gXHRyZXR1cm4gZGV2aWNlX29ubGluZShcdTAwMjZtZW0tXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtMTQ5MSw3ICYjNDM7MTQ5NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gICpcbiAgKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHXG4gICovXG4taW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7c3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbiYjNDM7XHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG4gXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiBcdFx0bWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpO1xuIFxuIFx0Lyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqL1xuLVx0aWYgKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpICE9IE1NT1BfT0ZGTElORSlcbi1cdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBOVUxMLCBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxuJiM0MztcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZvbmxpbmVfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gZXJyb3I6XG5AQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbkBAIC0xNjI2LDcgJiM0MzsxNjM3LDE1IEBAIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gXG4tLypcbiYjNDM7LyoqXG4mIzQzOyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxuJiM0MzsgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4mIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbiYjNDM7ICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFwmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpXCYjMzQ7XG4mIzQzOyAqIEBtaHBfZmxhZ3M6IE1lbW9yeSBob3RwbHVnIGZsYWdzXG4mIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKVxuJiM0MzsgKlxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cbiAgKiBSQU0sIGluc3RlYWQsIGl0IGlzIGRldGVjdGVkIGFuZCBhZGRlZCBieSBhIGRyaXZlciAtIGR1cmluZyBjb2xkIGJvb3QsXG5AQCAtMTYzNCw2ICYjNDM7MTY1Myw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogUmVhc29ucyB3aHkgdGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZW1tYXAgb2YgYVxuICAqIGtleGVjIGtlcm5lbCBvciBmb3IgcGxhY2luZyBrZXhlYyBpbWFnZXM6XG4mIzQzOyAqXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcbiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnlcbkBAIC0xNjQ2LDkgJiM0MzsxNjY2LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XG4gICogXCYjMzQ7U3lzdGVtIFJBTSAoJERSSVZFUilcJiMzNDsuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4taW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbi1cdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbiYjNDM7XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiBcdGludCByYztcbkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICYjMzk7KSYjMzk7KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdHJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7XG5AQCAtMTY2Niw3ICYjNDM7MTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbiYjNDM7XHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XG4gXG5AQCAtMTY3NCw2ICYjNDM7MTcwMCwzMCBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCYjMzQ7a21lbVwmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnlcbiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuJiM0MzsgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgbWVtb3J5IHJhbmdlIGluIGJ5dGVzXG4mIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKVwmIzM0O1xuJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBBZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggdGhlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSB0eXBlIHNldCBieVxuJiM0MzsgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG4mIzQzO1x0XHRcdG1ocF9mbGFncyxcbiYjNDM7XHRcdFx0bWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XG4gXG4gLypcbkBAIC0yMzc5LDU4ICYjNDM7MjQyOSw5OCBAQCBzdGF0aWMgaW50IHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG4gICovXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4mIzQzO1x0c3RydWN0IHJhbmdlIHJhbmdlID0geyAuc3RhcnQgPSBzdGFydCwgLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xuJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbiYjNDM7ICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xuJiM0MzsgKlxuJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcbiYjNDM7ICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxuJiM0MzsgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXG4mIzQzOyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcbiYjNDM7ICogYmVlbiByZW1vdmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7XG4gXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XG4tXHRpbnQgcmM7XG4mIzQzO1x0aW50IGksIHJjID0gMDtcbiBcbi1cdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbi1cdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcbiYjNDM7XHRpZiAoIXJhbmdlcyB8fCBucl9yYW5nZXMgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4mIzQzO1x0XHR1NjQgc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbiYjNDM7XHRcdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRtYl90b3RhbCAmIzQzOz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4tXHQgKiBXZSYjMzk7bGwgcmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBlYWNoIG1lbW9yeSBibG9jaywgc28gd2UgY2FuXG4tXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXG4tXHQgKiBhZnRlciBvZmZsaW5pbmcgc29tZSBvdGhlcnMgc3VjY2VlZGVkLlxuJiM0MztcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxuJiM0MztcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuJiM0MztcdCAqIGFzIE1NT1BfT0ZGTElORSBzbyBibG9ja3Mgd2UgbmV2ZXIgdG91Y2hlZCBhcmUgc2tpcHBlZCBvbiByb2xsYmFjay5cbiBcdCAqL1xuLVx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxuJiM0MztcdG9ubGluZV90eXBlcyA9IGttYWxsb2NfYXJyYXkobWJfdG90YWwsIHNpemVvZigqb25saW5lX3R5cGVzKSxcbiBcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIW9ubGluZV90eXBlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHQvKlxuLVx0ICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluXG4tXHQgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UmIzM5O2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4tXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbiYjNDM7XHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX3RvdGFsKTtcbiBcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiYjNDM7XHQvKiBQaGFzZSAxOiBvZmZsaW5lIGV2ZXJ5IGJsb2NrIGluIGV2ZXJ5IHJhbmdlLiAqL1xuIFx0dG1wID0gb25saW5lX3R5cGVzO1xuLVx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhyYW5nZXNbaV0uc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4gXHQvKlxuLVx0ICogSW4gY2FzZSB3ZSBzdWNjZWVkZWQgdG8gb2ZmbGluZSBhbGwgbWVtb3J5LCByZW1vdmUgaXQuXG4tXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXG4mIzQzO1x0ICogUGhhc2UgMjogUmVtb3ZlIGVhY2ggcmFuZ2UuIFRoaXMgZXNzZW50aWFsbHkgY2Fubm90IGZhaWwgYXMgd2UgaG9sZFxuJiM0MztcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cbiBcdCAqL1xuIFx0aWYgKCFyYykge1xuLVx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSk7XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OX09OQ0UocmMpKSB7XG4mIzQzO1x0XHRcdFx0cHJfZXJyKFwmIzM0OyVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fZnVuY19fLCByYyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuJiM0MztcdC8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi9cbiBcdGlmIChyYykge1xuIFx0XHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLFxuLVx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFx0fVxuIFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4gXHRrZnJlZShvbmxpbmVfdHlwZXMpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDZlNTliOGY2M2U0MTYzLi44YzJiNGY5NzYxOWNlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIFRBUkdFVFMgJiM0Mzs9IGNvcmVcbiBUQVJHRVRTICYjNDM7PSBjcHVmcmVxXG4gVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICYjNDM7PSBkYW1vblxuJiM0MztUQVJHRVRTICYjNDM7PSBkYXhcbiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3NcbiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL3Byb2JlXG4gVEFSR0VUUyAmIzQzOz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzthbGw6XG4mIzQzO1xuJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzO2luY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGM5YWFlYjZjZWI0MWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcbkBAIC0wLDAgJiM0MzsxLDQgQEBcbiYjNDM7Q09ORklHX0RFVl9EQVg9bVxuJiM0MztDT05GSUdfREVWX0RBWF9LTUVNPW1cbiYjNDM7Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICYjNDM7MSwyMDcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgRXhlcmNpc2UgdGhlIGRheC9rbWVtIFwmIzM0O3N0YXRlXCYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZTpcbiYjNDM7IyAgIC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZSAgLVx1MDAzZSAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX21vdmFibGVcbiYjNDM7I1xuJiM0MzsjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuXG4mIzQzOyNcbiYjNDM7IyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbiYjNDM7IyAgIG1lbW1hcD0yRyE0R1xuJiM0MzsjXG4mIzQzOyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4mIzQzOyNcbiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuJiM0MzsjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4mIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0MztESVI9XCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWYgXCYjMzQ7JDBcJiMzNDspXCYjMzQ7KVwmIzM0O1xuJiM0MzsuIFwmIzM0OyRESVJcJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7REFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbiYjNDM7XG4mIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH1cbiYjNDM7Z2V0X3N0YXRlKCkgeyBjYXQgXCYjMzQ7JEhQXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IH1cbiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuJiM0MzsjIHdyaXRlJiMzOTtzIGV4aXQgc3RhdHVzICgwID0gYWNjZXB0ZWQgYnkgdGhlIGtlcm5lbClcbiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskSFBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgfVxuJiM0MztcbiYjNDM7ZmluZF9rbWVtX2RheCgpIHtcbiYjNDM7XHRsb2NhbCBkIGRydlxuJiM0MztcdGZvciBkIGluIFwmIzM0OyREQVhfQkFTRVwmIzM0Oy9kYXgqOyBkb1xuJiM0MztcdFx0WyAtZSBcJiMzNDskZC9zdGF0ZVwmIzM0OyBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0XHRkcnY9JChyZWFkbGluayBcJiMzNDskZC9kcml2ZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRcdFsgXCYjMzQ7JChiYXNlbmFtZSBcJiMzNDske2RydjotfVwmIzM0OylcJiMzNDsgPSBrbWVtIF0gfHwgY29udGludWVcbiYjNDM7XHRcdGJhc2VuYW1lIFwmIzM0OyRkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMFxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskVUlEXCYjMzQ7ICE9IDAgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7REFYPSQoZmluZF9rbWVtX2RheClcbiYjNDM7aWYgWyAteiBcJiMzNDskREFYXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4mIzQzO09SSUc9JChnZXRfc3RhdGUpXG4mIzQzO1xuJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSB8fCBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVwmIzM0O1xuJiM0MztcdFsgLW4gXCYjMzQ7JE9SSUdcJiMzNDsgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwmIzM0OyRPUklHXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuJiM0MztcbiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9tc2cgXCYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwmIzM0O1xuJiM0MztrdGFwX3NldF9wbGFuIDExXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lOyByYz0kP1xuJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X29ubGluZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lOiBzdGF0ZT1vbmxpbmUsIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVx1MDAzZSAkbXRfb25saW5lIGtCXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZSBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lIGlkZW1wb3RlbnRcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZSBpZGVtcG90ZW50OiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBvbmxpbmUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3JlamVjdCBvbmxpbmVfbW92YWJsZSB3aXRob3V0IGludGVydmVuaW5nIHVucGx1Z1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lLVx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfb25saW5lXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDt1bnBsdWcgZnJvbSBvbmxpbmU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLVx1MDAzZSAkbXQga0JcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3VucGx1ZyBmcm9tIG9ubGluZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfb25saW5lIC1cdTAwM2UgJG10XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4mIzQzO210X21vdmFibGU9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskbXRfbW92YWJsZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X21vdmFibGUga0JcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBUaGUgb25saW5lIC1cdTAwM2UgdW5wbHVnIC1cdTAwM2Ugb25saW5lX21vdmFibGUgLVx1MDAzZSB1bnBsdWcgY3ljbGUgb25jZSByZWdyZXNzZWQ6XG4mIzQzOyMgYSByZS1vbmxpbmUgZmFpbGVkIHRvIHJlLXJlc2VydmUgdGhlIHBlci1yYW5nZSByZXNvdXJjZXMsIHNvIHRoZSBmaW5hbCB1bnBsdWdcbiYjNDM7IyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgaXQgaXMgcmVhbGx5IGZyZWVkLlxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuJiM0MzttdD0kKG1lbXRvdGFsX2tiKVxuJiM0MztpZiBbIFwmIzM0OyRyY1wmIzM0OyAhPSAwIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDt1bnBsdWcgZnJvbSBtb3ZhYmxlIG5vdCBhY2NlcHRlZCAobWVtb3J5IGluIHVzZT8pIHJjPSRyY1wmIzM0O1xuJiM0MztlbGlmIFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfbW92YWJsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10IGtCXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDt1bnBsdWcgZnJvbSBtb3ZhYmxlIHJlcG9ydGVkIHN1Y2Nlc3MgYnV0IG1lbW9yeSByZW1haW5lZDogc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX2tlcm5lbDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX2tlcm5lbCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRtdFwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdCBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lX2tlcm5lbDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZFxuJiM0MztcbiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKVxuJiM0MztzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBcJiMzNDskYmVmb3JlXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFJ1biBzZXZlcmFsIG9ubGluZS91bnBsdWcgY3ljbGVzIGFuZCByZXF1aXJlIHRoYXQgZWFjaCBvbmUgYWRkcy9yZW1vdmVzIG1lbW9yeVxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkXG4mIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wXG4mIzQzO2ZvciBpIGluIDEgMiAzOyBkb1xuJiM0MztcdGlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuJiM0MztcdG9uPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0aWYgISBzZXRfc3RhdGUgdW5wbHVnZ2VkOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXG4mIzQzO1x0b2ZmPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0aWYgWyBcJiMzNDskb25cJiMzNDsgLWxlIFwmIzM0OyRtdF91bnBsdWdnZWRcJiMzNDsgXSB8fCBbIFwmIzM0OyRvZmZcJiMzNDsgLWdlIFwmIzM0OyRvblwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrXG4mIzQzO1x0ZmlcbiYjNDM7ZG9uZVxuJiM0MztpZiBbIFwmIzM0OyRjeWNsZV9va1wmIzM0OyA9IDEgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogbWVtb3J5IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIGNoYW5nZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgcG9saWN5IHdoaWxlIHRoZSBkZXZpY2UgaXMgdW5ib3VuZCwgYW5kIHNob3dcbiYjNDM7IyB0aGUgbmV3IHN5c3RlbSBkZWZhdWx0IHBvbGljeSBpcyB1dGlsaXplZCBhY3Jvc3MgYmluZGluZ3MuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWRcbiYjNDM7aWYgWyAtdyBcJiMzNDskQU9CXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyAtdyBcJiMzNDskRFJWL2JpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdG9yaWdfYW9iPSQoY2F0IFwmIzM0OyRBT0JcJiMzNDspXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBvZmZsaW5lIFx1MDAzZSBcJiMzNDskQU9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRlY2hvIFwmIzM0OyREQVhcJiMzNDsgXHUwMDNlIFwmIzM0OyREUlYvYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0c2xlZXAgMVxuJiM0MztcdHN0PSQoZ2V0X3N0YXRlKVxuJiM0MztcdGVjaG8gXCYjMzQ7JG9yaWdfYW9iXCYjMzQ7IFx1MDAzZSBcJiMzNDskQU9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHN5c3RlbSBwb2xpY3lcbiYjNDM7XHRpZiBbIFwmIzM0OyRzdFwmIzM0OyA9IG9mZmxpbmUgXTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lIHBvbGljeSByZXNvbHZlZCBhdCBiaW5kOiBhdXRvX29ubGluZV9ibG9ja3M9b2ZmbGluZSAtXHUwMDNlIHN0YXRlPW9mZmxpbmVcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtiaW5kLXRpbWUgcG9saWN5IG5vdCBob25vcmVkOiBzdGF0ZT0kc3QgKGV4cGVjdGVkIG9mZmxpbmUpXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHRzZXRfc3RhdGUgdW5wbHVnZ2VkIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9za2lwIFwmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztbIC1uIFwmIzM0OyRPUklHXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcJiMzNDskT1JJR1wmIzM0O1xuJiM0MztcbiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xuJiM0MzsjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XG4mIzQzOyMgd2l0aCBhIHNpbmdsZSBcJiMzNDtzdWNrIG9ubGluZVwmIzM0OyB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXG4mIzQzOyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVcbiYjNDM7aWYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBvbmxpbmUgXSBcdTAwMjZcdTAwMjYgWyAtdyBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0bXRfb249JChtZW10b3RhbF9rYilcbiYjNDM7XHRkbWVzZyAtQyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0bXRfYWZ0ZXI9JChtZW10b3RhbF9rYilcbiYjNDM7XHQjIFRoZSBsZWFrZWQgXCYjMzQ7U3lzdGVtIFJBTSAoa21lbSlcJiMzNDsgcmVnaW9ucyBzdGF5IGluIHRoZSBpb21lbSB0cmVlOyByZWFkaW5nXG4mIzQzO1x0IyB0aGVpciBuYW1lcyBkZXJlZmVyZW5jZXMgcmVzX25hbWUsIHdoaWNoIGEgYnVnZ3kgdW5iaW5kIGFscmVhZHkgZnJlZWQuXG4mIzQzO1x0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cbiYjNDM7XHRjYXQgL3Byb2MvaW9tZW0gXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNwbGF0PSQoZG1lc2cgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcJiMzNDtLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3RcJiMzNDspXG4mIzQzO1x0aWYgWyBcJiMzNDskc3BsYXRcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X2FmdGVyXCYjMzQ7IC1nZSBcJiMzNDskbXRfb25cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZTogbWVtb3J5IGxlZnQgb25saW5lLCBubyBVQUYvb29wcyAoTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCKVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9za2lwIFwmIzM0O2NvdWxkIG5vdCBvbmxpbmUgZGV2aWNlIGZvciB1bmJpbmQtd2hpbGUtb25saW5lIHRlc3RcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmE0ZDg1Zjc0Y2Q2Yjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5nc1xuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7dGltZW91dD05MFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2X2RheF9rbWVtX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRlNDMxOGM1MTUwZDE3YTI3MGZmZDg2Njg2YzVlMGNkNTc3NTg3ZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxNToxODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheAppbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXgKQEAgLTE1MSwzICYjNDM7MTUxLDI5IEBAIERlc2NyaXB0aW9uOgogCQltZW1tYXBfb25fbWVtb3J5IHBhcmFtZXRlciBmb3IgbWVtb3J5X2hvdHBsdWcuIFRoaXMgaXMKIAkJdHlwaWNhbGx5IHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAtCiAJCW1lbW9yeV9ob3RwbHVnLm1lbW1hcF9vbl9tZW1vcnkgc2V0IHRvICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7Zm9yY2UmIzM5Oy4mIzM0OwomIzQzOwomIzQzO1doYXQ6CQkvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUKJiM0MztEYXRlOgkJSnVuZSwgMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CXY2LjIxCiYjNDM7Q29udGFjdDoJbnZkaW1tQGxpc3RzLmxpbnV4LmRldgomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBDb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeSByZWdpb24uCiYjNDM7CQlBcHBsaWVzIHRvIGFsbCBtZW1vcnkgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLgomIzQzOwkJT25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuCiYjNDM7CiYjNDM7CQlSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yCiYjNDM7CQl0aGUgcGVyLWJsb2NrIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGUgQUJJOjoKJiM0MzsKJiM0MzsJCSAgJiMzNDt1bnBsdWdnZWQmIzM0OzogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnQKJiM0MzsJCSAgJiMzNDtvbmxpbmUmIzM0OzogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbAomIzQzOwkJICAmIzM0O29ubGluZV9rZXJuZWwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTAomIzQzOwkJICAmIzM0O29ubGluZV9tb3ZhYmxlJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFCiYjNDM7CiYjNDM7CQkmIzM0O29mZmxpbmUmIzM0OyAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmUKJiM0MzsJCXJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGUKJiM0MzsJCWF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgJiMzNDtvZmZsaW5lJiMzNDsuICBJdCBjYW5ub3QgYmUgd3JpdHRlbiwKJiM0MzsJCWFzIGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgZGV2aWNlIGRlc3RydWN0aW9uIHJhY2VzLgomIzQzOwomIzQzOwkJQSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSAmIzM0O3VucGx1Z2dlZCYjMzQ7IHN0YXRlLCBzbyBhCiYjNDM7CQlkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byAmIzM0O3VucGx1Z2dlZCYjMzQ7IGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZAomIzQzOwkJaW50byBhIGRpZmZlcmVudCBzdGF0ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCBiMzE4MzQ0NDI2ZmFiYy4uM2EyZjY5ZDNhZjdiNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTQ2LDYgJiM0Mzs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cikKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSkKJiM0Mzt7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IDAgfHwgb25saW5lX3R5cGUgJmd0Oz0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIG9ubGluZV90eXBlX3RvX3N0cltvbmxpbmVfdHlwZV07CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpOwogCiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmMgYi9kcml2ZXJzL2RheC9idXMuYwppbmRleCA0OTI1NzNiNDdmNjYyNC4uNGEwM2IzMjNiMDAzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQoYykgMjAxNy0yMDE4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CkBAIC0zOTQsNiAmIzQzOzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJLnNpemUgPSAwLAogCQkJLmlkID0gLTEsCiAJCQkubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLAomIzQzOwkJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAkJfTsKIAkJc3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoJmFtcDtkYXRhKTsKIApAQCAtMTUyNyw2ICYjNDM7MTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpCiAJaWRhX2luaXQoJmFtcDtkZXZfZGF4LSZndDtpZGEpOwogCiAJZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSA9IGRhdGEtJmd0O21lbW1hcF9vbl9tZW1vcnk7CiYjNDM7CWRldl9kYXgtJmd0O29ubGluZV90eXBlID0gZGF0YS0mZ3Q7b25saW5lX3R5cGU7CiAKIAlpbm9kZSA9IGRheF9pbm9kZShkYXhfZGV2KTsKIAlkZXYtJmd0O2RldnQgPSBpbm9kZS0mZ3Q7aV9yZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaAppbmRleCA1OTA5MTcxYTQ0MjhiNy4uZjNjOWRhZTVkZTZiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2J1cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5oCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpZm5kZWYgX19EQVhfQlVTX0hfXwogI2RlZmluZSBfX0RBWF9CVVNfSF9fCiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKQEAgLTE2LDYgJiM0MzsxNywxMyBAQCBzdHJ1Y3QgZGF4X3JlZ2lvbjsKICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKQogI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKQogCiYjNDM7LyoKJiM0MzsgKiBvbmxpbmVfdHlwZSBzZW50aW5lbDogdGhlIGRldmljZSB3YXMgY3JlYXRlZCB3aXRob3V0IGFuIGV4cGxpY2l0IG9ubGluZQomIzQzOyAqIHBvbGljeSwgc28gdGhlIHN5c3RlbSBkZWZhdWx0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGttZW0gZHJpdmVyIGJpbmRzLAomIzQzOyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBEQVhfT05MSU5FX0RFRkFVTFQJKC0xKQomIzQzOwogc3RydWN0IGRheF9yZWdpb24gKmFsbG9jX2RheF9yZWdpb24oc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgcmVnaW9uX2lkLAogCQlzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgdGFyZ2V0X25vZGUsIHVuc2lnbmVkIGludCBhbGlnbiwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC0yNiw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAlpbnQgaWQ7CiAJYm9vbCBtZW1tYXBfb25fbWVtb3J5OwomIzQzOwllbnVtIG1tb3Agb25saW5lX3R5cGU7CiB9OwogCiBzdHJ1Y3QgZGV2X2RheCAqZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmMKaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9jeGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9jeGwuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCS5pZCA9IC0xLAogCQkuc2l6ZSA9IHJhbmdlX2xlbigmYW1wO2N4bHJfZGF4LSZndDtocGFfcmFuZ2UpLAogCQkubWVtbWFwX29uX21lbW9yeSA9IHRydWUsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZGV2bV9jcmVhdGVfZGV2X2RheCgmYW1wO2RhdGEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi5jY2Q3Nzk2NWZlM2VkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAKIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovCiBzdHJ1Y3QgZGF4X2RldmljZTsKQEAgLTc5LDYgJiM0Mzs4MCw4IEBAIHN0cnVjdCBkZXZfZGF4X3JhbmdlIHsKICAqIEBkZXY6IGRldmljZSBjb3JlCiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKQogICogQG1lbW1hcF9vbl9tZW1vcnk6IGFsbG93IGttZW0gdG8gcHV0IHRoZSBtZW1tYXAgaW4gdGhlIG1lbW9yeQomIzQzOyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUCiYjNDM7ICoJCSB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzCiAgKiBAbnJfcmFuZ2U6IHNpemUgb2YgQHJhbmdlcwogICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkCiAgKi8KQEAgLTk1LDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwogCWJvb2wgbWVtbWFwX29uX21lbW9yeTsKJiM0MzsJZW51bSBtbW9wIG9ubGluZV90eXBlOwogCWludCBucl9yYW5nZTsKIAlzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqcmFuZ2VzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMKaW5kZXggYWYyMWY2NmJmODcyYzYuLjJkZTNiYzkyNTE3MjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RhdGljIGludCBkYXhfaG1lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQkuaWQgPSAtMSwKIAkJLnNpemUgPSByZWdpb25faWRsZSA/IDAgOiByYW5nZV9sZW4oJmFtcDttcmktJmd0O3JhbmdlKSwKIAkJLm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSwKJiM0MzsJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAl9OwogCiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgva21lbS5jIGIvZHJpdmVycy9kYXgva21lbS5jCmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgva21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2ttZW0uYwpAQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcikKIAlzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gJmFtcDtkZXZfZGF4LSZndDtyYW5nZXNbaV07CiAJc3RydWN0IHJhbmdlICpyYW5nZSA9ICZhbXA7ZGF4X3JhbmdlLSZndDtyYW5nZTsKIAotCS8qIG1lbW9yeS1ibG9jayBhbGlnbiB0aGUgaG90cGx1ZyByYW5nZSAqLwotCXItJmd0O3N0YXJ0ID0gQUxJR04ocmFuZ2UtJmd0O3N0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTsKLQlyLSZndDtlbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtlbmQgJiM0MzsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgLSAxOwomIzQzOwkqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTsKIAlpZiAoci0mZ3Q7c3RhcnQgJmd0Oz0gci0mZ3Q7ZW5kKSB7CiAJCXItJmd0O3N0YXJ0ID0gcmFuZ2UtJmd0O3N0YXJ0OwogCQlyLSZndDtlbmQgPSByYW5nZS0mZ3Q7ZW5kOwpAQCAtNDQsOSAmIzQzOzQyLDE1IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsjZGVmaW5lIERBWF9LTUVNX1VOUExVR0dFRAkoLTEpCiYjNDM7CiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7CiAJY29uc3QgY2hhciAqcmVzX25hbWU7CiAJaW50IG1naWQ7CiYjNDM7CWludCBudW1hX25vZGU7CiYjNDM7CXN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4OwomIzQzOwlpbnQgc3RhdGU7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovCiAJc3RydWN0IHJlc291cmNlICpyZXNbXTsKIH07CiAKQEAgLTY1LDE1ICYjNDM7NjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKQogCW10X3B1dF9tZW1vcnlfdHlwZXMoJmFtcDtrbWVtX21lbW9yeV90eXBlcyk7CiB9CiAKJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8CiYjNDM7CSAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHwKJiM0MzsJICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlCiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlCiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nCiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzCiYjNDM7ICoKJiM0MzsgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlCiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsCiYjNDM7CQkJICAgICAgIGludCBvbmxpbmVfdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7ZGV2X2RheC0mZ3Q7ZGV2OwomIzQzOwlpbnQgaSwgcmMsIGFkZGVkID0gMDsKJiM0MzsJbWhwX3QgbWhwX2ZsYWdzOwomIzQzOwomIzQzOwlpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAob25saW5lX3R5cGUgJmx0OyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgJmd0OyBNTU9QX09OTElORV9NT1ZBQkxFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7CiYjNDM7CQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKJiM0MzsJCQltaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXQKJiM0MzsJCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAomIzQzOwkJCQlyYW5nZV9sZW4oJmFtcDtyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLAomIzQzOwkJCQlvbmxpbmVfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJCSBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG8KJiM0MzsJCQkgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnkKJiM0MzsJCQkgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKSB7CiYjNDM7CQkJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoYWRkZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYWRkZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbQomIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZQomIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZwomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVgKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJaW50IGksIHJjLCBtYXBwZWQgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovCiYjNDM7CQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KJiM0MzsJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLAomIzQzOwkJCQkJIGRhdGEtJmd0O3Jlc19uYW1lKTsKJiM0MzsJCWlmICghcmVzKSB7CiYjNDM7CQkJZGV2X3dhcm4oZGV2LCAmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dAomIzQzOwkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobWFwcGVkKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCiYjNDM7CQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKJiM0MzsJCSAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzCiYjNDM7CQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcy0mZ3Q7ZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07CiYjNDM7CQltYXBwZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXBwZWQ7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb24KJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZAomIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CXN0cnVjdCByYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC0mZ3Q7bnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFuZ2VzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7CiYjNDM7CiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovCiYjNDM7CWlmICghbnJfcmFuZ2VzKSB7CiYjNDM7CQlrZnJlZShyYW5nZXMpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7CiYjNDM7CWtmcmVlKHJhbmdlcyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlOwomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7aG90cmVtb3ZlIGZhaWxlZCwgZGV2aWNlIGxlZnQgb25saW5lOiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXMKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgZGV2aWNlIHVuYmluZCBvY2N1cnMgYmVmb3JlIG1lbW9yeSBpcyBob3RyZW1vdmVkLCB3ZSBjYW4gbmV2ZXIKJiM0MzsJICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uCiYjNDM7CSAqIGhlcmUgbWF5IGNhdXNlIGRlYWRsb2NrIGFuZCBhIGZhaWx1cmUgdG8gZmluaXNoIHRoZSB1bmJpbmQuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOKCgoZGF0YS0mZ3Q7c3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSAmYW1wOyZhbXA7CiYjNDM7CQkgIChkYXRhLSZndDtzdGF0ZSAhPSBNTU9QX09GRkxJTkUpKSwKJiM0MzsJCSAmIzM0O0hvdHBsdWcgbWVtb3J5IHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJaW50IG9ubGluZV90eXBlOwomIzQzOwomIzQzOwkvKiAmIzM0O3VucGx1Z2dlZCYjMzQ7IGlzIGttZW0tc3BlY2lmaWMgLSB0aGUgcmVzdCBtYXAgdG8gTU1PUF8gKi8KJiM0MzsJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgJiMzNDt1bnBsdWdnZWQmIzM0OykpCiYjNDM7CQlyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwomIzQzOwlvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpOwomIzQzOwkvKiBEaXNhbGxvdyAmIzM0O29mZmxpbmUmIzM0OzogaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi8KJiM0MzsJaWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gb25saW5lX3R5cGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJY29uc3QgY2hhciAqc3RhdGVfc3RyOwomIzQzOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJc3RhdGVfc3RyID0gJiMzNDt1bnBsdWdnZWQmIzM0OzsKJiM0MzsJZWxzZQomIzQzOwkJc3RhdGVfc3RyID0gbWhwX29ubGluZV90eXBlX3RvX3N0cihkYXRhLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslc1xuJiMzNDssIHN0YXRlX3N0ciA/OiAmIzM0O3Vua25vd24mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTsKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IG9ubGluZV90eXBlOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmICghZGF0YSkKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CiYjNDM7CW9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTsKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJcmV0dXJuIG9ubGluZV90eXBlOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtkYXRhLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBpbiByZXF1ZXN0ZWQgc3RhdGUgKi8KJiM0MzsJaWYgKGRhdGEtJmd0O3N0YXRlID09IG9ubGluZV90eXBlKQomIzQzOwkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJaWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkgewomIzQzOwkJcmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJZGF0YS0mZ3Q7c3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7CiYjNDM7CQlyZXR1cm4gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9ubGluaW5nIGlzIG9ubHkgYWxsb3dlZCBmcm9tIHRoZSB1bnBsdWdnZWQgc3RhdGUuICovCiYjNDM7CWlmIChkYXRhLSZndDtzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovCiYjNDM7CXJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWRhdGEtJmd0O3N0YXRlID0gb25saW5lX3R5cGU7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzO3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7CiYjNDM7CiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2xlbiA9IDAsIG9yaWdfbGVuID0gMDsKIAlzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTsKLQlpbnQgaSwgcmMsIG1hcHBlZCA9IDA7Ci0JbWhwX3QgbWhwX2ZsYWdzOwomIzQzOwlpbnQgaSwgcmM7CiAJaW50IG51bWFfbm9kZTsKJiM0MzsJaW50IG9ubGluZV90eXBlOwogCWludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFOwogCiAJLyoKQEAgLTEzMyw2OCAmIzQzOzQ0NSwzOCBAQCBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCkKIAlpZiAocmMgJmx0OyAwKQogCQlnb3RvIGVycl9yZWdfbWdpZDsKIAlkYXRhLSZndDttZ2lkID0gcmM7CiYjNDM7CWRhdGEtJmd0O251bWFfbm9kZSA9IG51bWFfbm9kZTsKJiM0MzsJZGF0YS0mZ3Q7ZGV2X2RheCA9IGRldl9kYXg7CiYjNDM7CWRhdGEtJmd0O3N0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0KLQkJcmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKTsKLQkJaWYgKHJjKQotCQkJY29udGludWU7Ci0KLQkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KLQkJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZSksIGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWRldl93YXJuKGRldiwgJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxuJiMzNDssCi0JCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCQkJLyoKLQkJCSAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4mIzM5O3QKLQkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KLQkJCSAqLwotCQkJaWYgKG1hcHBlZCkKLQkJCQljb250aW51ZTsKLQkJCXJjID0gLUVCVVNZOwotCQkJZ290byBlcnJfcmVxdWVzdF9tZW07Ci0JCX0KLQkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwotCi0JCS8qCi0JCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCi0JCSAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdAotCQkgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFncwotCQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCi0JCSAqLwotCQlyZXMtJmd0O2ZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTsKIAotCQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7Ci0JCWlmIChkZXZfZGF4LSZndDttZW1tYXBfb25fbWVtb3J5KQotCQkJbWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZOwomIzQzOwlyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzb3VyY2VzOwogCi0JCS8qCi0JCSAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYyYjMzk7ZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0Ci0JCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCi0JCSAqLwotCQlyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS0mZ3Q7bWdpZCwgcmFuZ2Uuc3RhcnQsCi0JCQkJcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyk7CiYjNDM7CS8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqLwomIzQzOwlvbmxpbmVfdHlwZSA9IGRldl9kYXgtJmd0O29ubGluZV90eXBlOwomIzQzOwlpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKQomIzQzOwkJb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTsKIAotCQlpZiAocmMpIHsKLQkJCWRldl93YXJuKGRldiwgJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXG4mIzM0OywKLQkJCQkJaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Ci0JCQlyZW1vdmVfcmVzb3VyY2UocmVzKTsKLQkJCWtmcmVlKHJlcyk7Ci0JCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwotCQkJaWYgKG1hcHBlZCkKLQkJCQljb250aW51ZTsKLQkJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOwotCQl9Ci0JCW1hcHBlZCYjNDM7JiM0Mzs7Ci0JfQomIzQzOwkvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovCiYjNDM7CXJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9ob3RwbHVnOwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IG9ubGluZV90eXBlOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZGF0YSk7CiYjNDM7CXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHN0YXRlIHN5c2ZzIGVudHJ5XG4mIzM0Oyk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX3JlcXVlc3RfbWVtOgomIzQzO2Vycl9ob3RwbHVnOgomIzQzOwlkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTsKJiM0MztlcnJfcmVzb3VyY2VzOgomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAltZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLSZndDttZ2lkKTsKIGVycl9yZWdfbWdpZDoKIAlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CkBAIC0yMDgsNjMgJiM0Mzs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiB7Ci0JaW50IGksIHN1Y2Nlc3MgPSAwOwogCWludCBub2RlID0gZGV2X2RheC0mZ3Q7dGFyZ2V0X25vZGU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiAJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAomIzQzOwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmYW1wO2Rldl9hdHRyX3N0YXRlKTsKIAkvKgotCSAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90Ci0JICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kCi0JICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2UKLQkgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuCiYjNDM7CSAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW4KJiM0MzsJICogZGVhZGxvY2sgYSB0YXNrIGFzIHVuYmluZCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQpLiAgVW5mb3J0dW5hdGVseSB3ZQomIzQzOwkgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbAomIzQzOwkgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uCiYjNDM7CSAqCiYjNDM7CSAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuCiAJICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0JCWludCByYzsKLQotCQlyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksICZhbXA7cmFuZ2UpOwotCQlpZiAocmMpCi0JCQljb250aW51ZTsKLQotCQkvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovCi0JCWlmICghZGF0YS0mZ3Q7cmVzW2ldKSB7Ci0JCQlzdWNjZXNzJiM0MzsmIzQzOzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZSkpOwotCQlpZiAocmMgPT0gMCkgewotCQkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7Ci0JCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwotCQkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKLQkJCXN1Y2Nlc3MmIzQzOyYjNDM7OwotCQkJY29udGludWU7Ci0JCX0KJiM0MzsJaWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLSZndDtzdGF0ZSkpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxuJiMzNDspOwogCQlhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7Ci0JCWRldl9lcnIoZGV2LAotCQkJJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxuJiMzNDssCi0JCQkJaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0gZWxzZSBpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gTU1PUF9PRkZMSU5FICZhbXA7JmFtcDsKJiM0MzsJICAgIGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKSkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiAJfQogCi0JaWYgKHN1Y2Nlc3MgJmd0Oz0gZGV2X2RheC0mZ3Q7bnJfcmFuZ2UpIHsKLQkJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7Ci0JCWtmcmVlKGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCQkvKgotCQkgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy4KLQkJICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmUKLQkJICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZQotCQkgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kCi0JCSAqIHRpbGwgbmV4dCByZWJvb3QuCi0JCSAqLwotCQljbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpOwotCX0KJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CW1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtJmd0O21naWQpOwomIzQzOwlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CiYjNDM7CWtmcmVlKGRhdGEpOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuCiYjNDM7CSAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlCiYjNDM7CSAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGUKJiM0MzsJICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZAomIzQzOwkgKiB0aWxsIG5leHQgcmVib290LgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CiAJLyoKIAkgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZQogCSAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAmIzM5OzAmIzM5OyB0byAtJmd0O3JlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jCmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L3BtZW0uYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLnBnbWFwID0gJmFtcDtwZ21hcCwKIAkJLnNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCA0NjNkYzAyZjZjZmYwNS4uOWY1ZWYwMzA5Zjc3MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKIAogI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgJmx0OyZsdDsgU0VDVElPTl9TSVpFX0JJVFMpCiAKQEAgLTEwMCw2ICYjNDM7MTAxLDI3IEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTsKIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTsKIAomIzQzOy8qKgomIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3MKJiM0MzsgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnbgomIzQzOyAqCiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2sKJiM0MzsgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3QKJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkCiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgJmx0OyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDsKJiM0MzsKJiM0MzsJYWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLSZndDtzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7CiYjNDM7CWFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7ZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsaWduZWQ7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbW9yeV9ub3RpZnkgewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTsKIAogZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7CiAKIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi8KIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkOwpAQCAtMjY3LDYgJiM0MzsyNjgsNyBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKTsKIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9CkBAIC0yODMsNiAmIzQzOzI4NSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywKJiM0MzsJCQkJCQkgICBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjk0LDYgJiM0MzszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7CiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwKIAkJCSAgICAgICBtaHBfdCBtaHBfZmxhZ3MpOwomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkJY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQllbnVtIG1tb3Agb25saW5lX3R5cGUpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiAJCQkJICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLAogCQkJCSAgICAgbWhwX3QgbWhwX2ZsYWdzKTsKQEAgLTMxNiw2ICYjNDM7MzI3LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLAogZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCSAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjdkNTZlMGM2ZWRlMGNjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKQogCiAJcmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7CiAKIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpCiAKIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKIHsKLQltZW0tJmd0O29ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiYjNDM7CWVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7CiYjNDM7CiYjNDM7CW1lbS0mZ3Q7b25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7CiAJcmV0dXJuIGRldmljZV9vbmxpbmUoJmFtcDttZW0tJmd0O2Rldik7CiB9CiAKQEAgLTE0OTEsNyAmIzQzOzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogICoKICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcKICAqLwotaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQkgZW51bSBtbW9wIG9ubGluZV90eXBlKQogewogCXN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07CiAJZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7CkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKIAkJbWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpOwogCiAJLyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqLwotCWlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpCi0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpCiYjNDM7CQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7b25saW5lX3R5cGUsCiYjNDM7CQkJCSAgIG9ubGluZV9tZW1vcnlfYmxvY2spOwogCiAJcmV0dXJuIHJldDsKIGVycm9yOgpAQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi8KJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLAomIzQzOwkJCQkgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovCiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAKLS8qCiYjNDM7LyoqCiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlCiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZAomIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlCiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlcwomIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsKJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFncwomIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKQomIzQzOyAqCiAgKiBBZGQgc3BlY2lhbCwgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0gYXMgc3lzdGVtIFJBTS4gU3VjaAogICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW0KICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCwKQEAgLTE2MzQsNiAmIzQzOzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKICAqCiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhCiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOgomIzQzOyAqCiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmUKICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pCiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnkKQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAgKgogICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0CiAgKiAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAotCQkJICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCWNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncywKJiM0MzsJCWVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmM7CkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAmIzM5OykmIzM5OykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlICZndDsgTU1PUF9PTkxJTkVfTU9WQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7CkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTsKJiM0MzsJcmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpOwogCWlmIChyYyAmbHQ7IDApCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKQEAgLTE2NzQsNiAmIzQzOzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAl1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAlyZXR1cm4gcmM7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsICYjMzQ7a21lbSYjMzQ7KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeQomIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWQKJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZQomIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXMKJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKSYjMzQ7CiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3MKJiM0MzsgKgomIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5CiYjNDM7ICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci4KJiM0MzsgKgomIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsCiYjNDM7CQkJbWhwX2ZsYWdzLAomIzQzOwkJCW1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTsKIAogLyoKQEAgLTIzNzksNTggJiM0MzsyNDI5LDk4IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKICAqLwogaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7CiYjNDM7CXN0cnVjdCByYW5nZSByYW5nZSA9IHsgLnN0YXJ0ID0gc3RhcnQsIC5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSB9OwomIzQzOwomIzQzOwlyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoJmFtcDtyYW5nZSwgMSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXMKJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmUKJiM0MzsgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzCiYjNDM7ICoKJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWQKJiM0MzsgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueQomIzQzOyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC4KJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXMKJiM0MzsgKiBiZWVuIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7CiAJdWludDhfdCAqb25saW5lX3R5cGVzLCAqdG1wOwotCWludCByYzsKJiM0MzsJaW50IGksIHJjID0gMDsKIAotCWlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwKLQkgICAgIUlTX0FMSUdORUQoc2l6ZSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwgIXNpemUpCiYjNDM7CWlmICghcmFuZ2VzIHx8IG5yX3JhbmdlcyAmbHQ7PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0OwomIzQzOwkJdTY0IHNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pOwomIzQzOwomIzQzOwkJaWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fAomIzQzOwkJICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJbWJfdG90YWwgJiM0Mzs9IHNpemUgLyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpOwomIzQzOwl9CiYjNDM7CiAJLyoKLQkgKiBXZSYjMzk7bGwgcmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBlYWNoIG1lbW9yeSBibG9jaywgc28gd2UgY2FuCi0JICogdHJ5IHRvIHJldmVydCB3aGF0ZXZlciB3ZSBkaWQgd2hlbiBvZmZsaW5pbmcgb25lIG1lbW9yeSBibG9jayBmYWlscwotCSAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuCiYjNDM7CSAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLAomIzQzOwkgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnQKJiM0MzsJICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLgogCSAqLwotCW9ubGluZV90eXBlcyA9IGttYWxsb2NfYXJyYXkobWJfY291bnQsIHNpemVvZigqb25saW5lX3R5cGVzKSwKJiM0MzsJb25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl90b3RhbCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvbmxpbmVfdHlwZXMpCiAJCXJldHVybiAtRU5PTUVNOwotCS8qCi0JICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluCi0JICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJiMzOTtsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW4KLQkgKiB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKCkuCi0JICovCi0JbWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7CiYjNDM7CW1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpOwogCiAJbG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiYjNDM7CS8qIFBoYXNlIDE6IG9mZmxpbmUgZXZlcnkgYmxvY2sgaW4gZXZlcnkgcmFuZ2UuICovCiAJdG1wID0gb25saW5lX3R5cGVzOwotCXJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCAmYW1wO3RtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKSwKJiM0MzsJCQkJCSZhbXA7dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiAKIAkvKgotCSAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LgotCSAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS4KJiM0MzsJICogUGhhc2UgMjogUmVtb3ZlIGVhY2ggcmFuZ2UuIFRoaXMgZXNzZW50aWFsbHkgY2Fubm90IGZhaWwgYXMgd2UgaG9sZAomIzQzOwkgKiB0aGUgaG90cGx1ZyBsb2NrIC4gV0FSTiBpZiB0aGF0IGFzc3VtcHRpb24gaXMgZXZlciBicm9rZW4uCiAJICovCiAJaWYgKCFyYykgewotCQlyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCYjMzQ7JXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZCYjMzQ7LCBfX2Z1bmNfXywgcmMpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCwKJiM0MzsJCQkJCSAgICAgICByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pKTsKJiM0MzsJCQlpZiAoV0FSTl9PTl9PTkNFKHJjKSkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkJiMzNDssCiYjNDM7CQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCi0JLyoKLQkgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbAotCSAqIChuYWNrZWQgYnkgYSBub3RpZmllciksIGl0IGJhcmVseSBldmVyIGhhcHBlbnMuCi0JICovCiYjNDM7CS8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi8KIAlpZiAocmMpIHsKIAkJdG1wID0gb25saW5lX3R5cGVzOwotCQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7dG1wLAotCQkJCSAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwKJiM0MzsJCQkJCSAgIHJhbmdlX2xlbigmYW1wO3Jhbmdlc1tpXSksICZhbXA7dG1wLAomIzQzOwkJCQkJICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7CiAJfQogCXVubG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiAJa2ZyZWUob25saW5lX3R5cGVzKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKaW5kZXggNmU1OWI4ZjYzZTQxNjMuLjhjMmI0Zjk3NjE5Y2VjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZQogVEFSR0VUUyAmIzQzOz0gY3B1ZnJlcQogVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWcKIFRBUkdFVFMgJiM0Mzs9IGRhbW9uCiYjNDM7VEFSR0VUUyAmIzQzOz0gZGF4CiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3MKIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmUKIFRBUkdFVFMgJiM0Mzs9IGRtYWJ1Zi1oZWFwcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO2FsbDoKJiM0MzsKJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZwpAQCAtMCwwICYjNDM7MSw0IEBACiYjNDM7Q09ORklHX0RFVl9EQVg9bQomIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bQomIzQzO0NPTkZJR19NRU1PUllfSE9UUExVRz15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwyMDcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gJiMzNDtzdGF0ZSYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZToKJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtJmd0OyAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX21vdmFibGUKJiM0MzsjCiYjNDM7IyBUaGUgdGVzdCBuZWVkcyBhIGRheCBkZXZpY2UgYWxyZWFkeSBib3VuZCB0byB0aGUga21lbSBkcml2ZXIuCiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuCiYjNDM7IwomIzQzOyMgQSBkYXggZGV2aWNlIGNhbiBiZSBwcm92aXNpb25lZCB3aXRoIHRoZSBtZW1tYXA9IGJvb3QgcGFyYW0sIGUuZy46CiYjNDM7IyAgIG1lbW1hcD0yRyE0RwomIzQzOyMKJiM0MzsjIHRoZW4sIGluIHRoZSBib290ZWQgc3lzdGVtOgomIzQzOyMKJiM0MzsjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mCiYjNDM7IyAgIGRheGN0bCByZWNvbmZpZ3VyZS1kZXZpY2UgLU4gLW0gc3lzdGVtLXJhbSBkYXgwLjAgICAjIGJpbmQga21lbQomIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTEKJiM0MztESVI9JiMzNDskKGRpcm5hbWUgJiMzNDskKHJlYWRsaW5rIC1mICYjMzQ7JDAmIzM0OykmIzM0OykmIzM0OwomIzQzOy4gJiMzNDskRElSJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzOwomIzQzO0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzCiYjNDM7CiYjNDM7bWVtdG90YWxfa2IoKSB7IGF3ayAmIzM5Oy9eTWVtVG90YWw6LyB7cHJpbnQgJDJ9JiMzOTsgL3Byb2MvbWVtaW5mbzsgfQomIzQzO2dldF9zdGF0ZSgpIHsgY2F0ICYjMzQ7JEhQJiMzNDsgMiZndDsvZGV2L251bGw7IH0KJiM0MzsjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlCiYjNDM7IyB3cml0ZSYjMzk7cyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpCiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvICYjMzQ7JDEmIzM0OyAmZ3Q7ICYjMzQ7JEhQJiMzNDsgMiZndDsvZGV2L251bGw7IH0KJiM0MzsKJiM0MztmaW5kX2ttZW1fZGF4KCkgewomIzQzOwlsb2NhbCBkIGRydgomIzQzOwlmb3IgZCBpbiAmIzM0OyREQVhfQkFTRSYjMzQ7L2RheCo7IGRvCiYjNDM7CQlbIC1lICYjMzQ7JGQvc3RhdGUmIzM0OyBdIHx8IGNvbnRpbnVlCiYjNDM7CQlkcnY9JChyZWFkbGluayAmIzM0OyRkL2RyaXZlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwkJWyAmIzM0OyQoYmFzZW5hbWUgJiMzNDske2RydjotfSYjMzQ7KSYjMzQ7ID0ga21lbSBdIHx8IGNvbnRpbnVlCiYjNDM7CQliYXNlbmFtZSAmIzM0OyRkJiMzNDsKJiM0MzsJCXJldHVybiAwCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7a3RhcF9wcmludF9oZWFkZXIKJiM0MzsKJiM0MztpZiBbICYjMzQ7JFVJRCYjMzQ7ICE9IDAgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO0RBWD0kKGZpbmRfa21lbV9kYXgpCiYjNDM7aWYgWyAteiAmIzM0OyREQVgmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDtubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlCiYjNDM7T1JJRz0kKGdldF9zdGF0ZSkKJiM0MzsKJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhbgomIzQzOyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC4KJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyAhPSAwIF0gfHwgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ICE9IHVucGx1Z2dlZCBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskREFYOiBjYW5ub3QgcmVhY2ggJiMzOTt1bnBsdWdnZWQmIzM5OyBiYXNlbGluZSAobWVtb3J5IGluIHVzZT8pJiMzNDsKJiM0MzsJWyAtbiAmIzM0OyRPUklHJiMzNDsgXSAmYW1wOyZhbXA7IHNldF9zdGF0ZSAmIzM0OyRPUklHJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO2ZpCiYjNDM7bXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpCiYjNDM7CiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW0KJiM0MztBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzCiYjNDM7CiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDt1c2luZyAkREFYIChpbml0aWFsIHN0YXRlIHdhczogJE9SSUcpJiMzNDsKJiM0MztrdGFwX3NldF9wbGFuIDExCiYjNDM7CiYjNDM7c2V0X3N0YXRlIG9ubGluZTsgcmM9JD8KJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmUgXSAmYW1wOyZhbXA7IFsgJiMzNDskbXRfb25saW5lJiMzNDsgLWd0ICYjMzQ7JG10X3VucGx1Z2dlZCYjMzQ7IF07IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmU6IHN0YXRlPW9ubGluZSwgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lIGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLSZndDsgJG10X29ubGluZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lIGlkZW1wb3RlbnQmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/CiYjNDM7aWYgWyAmIzM0OyRyYyYjMzQ7ICE9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7cmVqZWN0IG9ubGluZV9tb3ZhYmxlIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lLSZndDtvbmxpbmVfbW92YWJsZSBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MzttdD0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IHVucGx1Z2dlZCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1sdCAmIzM0OyRtdF9vbmxpbmUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lOiBNZW1Ub3RhbCAkbXRfb25saW5lIC0mZ3Q7ICRtdCBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VucGx1ZyBmcm9tIG9ubGluZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfb25saW5lIC0mZ3Q7ICRtdCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/CiYjNDM7bXRfbW92YWJsZT0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10X21vdmFibGUmIzM0OyAtZ3QgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfbW92YWJsZSBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MzsjIFRoZSBvbmxpbmUgLSZndDsgdW5wbHVnIC0mZ3Q7IG9ubGluZV9tb3ZhYmxlIC0mZ3Q7IHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDoKJiM0MzsjIGEgcmUtb25saW5lIGZhaWxlZCB0byByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyB0aGUgZmluYWwgdW5wbHVnCiYjNDM7IyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgaXQgaXMgcmVhbGx5IGZyZWVkLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/CiYjNDM7bXQ9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7dW5wbHVnIGZyb20gbW92YWJsZSBub3QgYWNjZXB0ZWQgKG1lbW9yeSBpbiB1c2U/KSByYz0kcmMmIzM0OwomIzQzO2VsaWYgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gdW5wbHVnZ2VkIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10JiMzNDsgLWx0ICYjMzQ7JG10X21vdmFibGUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC0mZ3Q7ICRtdCBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLSZndDsgJG10JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kPwomIzQzO210PSQobWVtdG90YWxfa2IpCiYjNDM7aWYgWyAmIzM0OyRyYyYjMzQ7ID0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gb25saW5lX2tlcm5lbCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1ndCAmIzM0OyRtdF91bnBsdWdnZWQmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXQga0ImIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmVfa2VybmVsOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsPSRtdCYjMzQ7CiYjNDM7ZmkKJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkCiYjNDM7CiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKQomIzQzO3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gJiMzNDskYmVmb3JlJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O3JlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgUnVuIHNldmVyYWwgb25saW5lL3VucGx1ZyBjeWNsZXMgYW5kIHJlcXVpcmUgdGhhdCBlYWNoIG9uZSBhZGRzL3JlbW92ZXMgbWVtb3J5CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZAomIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wCiYjNDM7Zm9yIGkgaW4gMSAyIDM7IGRvCiYjNDM7CWlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaQomIzQzOwlvbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmkKJiM0MzsJb2ZmPSQobWVtdG90YWxfa2IpCiYjNDM7CWlmIFsgJiMzNDskb24mIzM0OyAtbGUgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXSB8fCBbICYjMzQ7JG9mZiYjMzQ7IC1nZSAmIzM0OyRvbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7aWYgWyAmIzM0OyRjeWNsZV9vayYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lL3VucGx1ZyBjeWNsZSByZS1hY3F1aXJlcyByZXNvdXJjZXMgKDN4OiBtZW1vcnkgYWRkZWQgYW5kIGZyZWVkIGVhY2ggdGltZSkmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvdwomIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQKJiM0MztpZiBbIC13ICYjMzQ7JEFPQiYjMzQ7IF0gJmFtcDsmYW1wOyBbIC13ICYjMzQ7JERSVi91bmJpbmQmIzM0OyBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJb3JpZ19hb2I9JChjYXQgJiMzNDskQU9CJiMzNDspCiYjNDM7CWVjaG8gJiMzNDskREFYJiMzNDsgJmd0OyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBvZmZsaW5lICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi9iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJc2xlZXAgMQomIzQzOwlzdD0kKGdldF9zdGF0ZSkKJiM0MzsJZWNobyAmIzM0OyRvcmlnX2FvYiYjMzQ7ICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwJCSMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5CiYjNDM7CWlmIFsgJiMzNDskc3QmIzM0OyA9IG9mZmxpbmUgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC0mZ3Q7IHN0YXRlPW9mZmxpbmUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O2JpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSkmIzM0OwomIzQzOwlmaQomIzQzOwlzZXRfc3RhdGUgdW5wbHVnZ2VkIDImZ3Q7L2Rldi9udWxsCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO1sgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlcwomIzQzOyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXQKJiM0MzsjIHdpdGggYSBzaW5nbGUgJiMzNDtzdWNrIG9ubGluZSYjMzQ7IHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGUKJiM0MzsjIGRldmljZSB1bmJvdW5kIHVudGlsIHJlYm9vdCwgc28gaXQgcnVucyBsYXN0LgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmUKJiM0MztpZiBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmUgXSAmYW1wOyZhbXA7IFsgLXcgJiMzNDskRFJWL3VuYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJbXRfb249JChtZW10b3RhbF9rYikKJiM0MzsJZG1lc2cgLUMgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi91bmJpbmQmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwltdF9hZnRlcj0kKG1lbXRvdGFsX2tiKQomIzQzOwkjIFRoZSBsZWFrZWQgJiMzNDtTeXN0ZW0gUkFNIChrbWVtKSYjMzQ7IHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZwomIzQzOwkjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC4KJiM0MzsJIyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS4KJiM0MzsJY2F0IC9wcm9jL2lvbWVtICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CXNwbGF0PSQoZG1lc2cgMiZndDsvZGV2L251bGwgfCBncmVwIC1jaUUgJiMzNDtLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3QmIzM0OykKJiM0MzsJaWYgWyAmIzM0OyRzcGxhdCYjMzQ7ID0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdF9hZnRlciYjMzQ7IC1nZSAmIzM0OyRtdF9vbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZTogbWVtb3J5IGxlZnQgb25saW5lLCBubyBVQUYvb29wcyAoTWVtVG90YWwgJG10X29uIC0mZ3Q7ICRtdF9hZnRlciBrQikmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC0mZ3Q7ICRtdF9hZnRlciBrQiYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2NvdWxkIG5vdCBvbmxpbmUgZGV2aWNlIGZvciB1bmJpbmQtd2hpbGUtb25saW5lIHRlc3QmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7a3RhcF9maW5pc2hlZApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5ncwpAQCAtMCwwICYjNDM7MSBAQAomIzQzO3RpbWVvdXQ9OTAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2OTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQVggS21lbSBIb3RwbHVnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG1lbW9yeSBob3RwbHVnZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIGFuZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBjb25zaWRlcmluZyB0aGlzIGZvciBmdXp6aW5nLgoKSXQgbG9va3MgbGlrZSB0aGUga2V5IHBpZWNlIGlzIHRoaXMgbmV3IHN5c2ZzIGF0dHJpYnV0ZSwgYC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZWAuICBUaGlzIGlzIGhvdyB0aGUgdXNlciB3aWxsIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24mIzM5O3Mgc3RhdGXigJR1bnBsdWdnZWQsIG9ubGluZSwgdGhlIGtlcm5lbCwgYW5kIG1vdmFibGUuICBBIGNsZWFyIGNvbnRyb2wgbWVjaGFuaXNtIGlzIGFsd2F5cyBzb21ldGhpbmcgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGFscmVhZHkgc3RhcnRlZCB0byBpZGVudGlmeSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSBhcmVhcyBiZWluZyBpbXBhY3RlZDoKCiogICAqKmBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgKio6IEZ1bmN0aW9ucyByZWxhdGVkIHRvIG1hcHBpbmcgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYW4gb25saW5lIHR5cGUsIGFuZCB2aWNlIHZlcnNhLgoqICAgKipgZHJpdmVycy9kYXgvYnVzLmMsIGN4bC5jLCBobWVtLmMsIHBtZW0uY2AqKjogV2UgaGF2ZSBzZXZlcmFsIHByb2JlcyBiZWluZyBtb2RpZmllZCB0byBhZGQgREFYIGNhcGFiaWxpdGllcyBmb3IgdmFyaW91cyBEQVggZGV2aWNlcy4KKiAgICoqYGRyaXZlcnMvZGF4L2ttZW0uY2AqKjogVGhpcyBpcyB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBpcyBoYXBwZW5pbmcuIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBzdGF0ZV9zaG93YCwgYHN0YXRlX3N0b3JlYCwgYGRldl9kYXhfa21lbV9wcm9iZWAsIGBkZXZfZGF4X2ttZW1fcmVtb3ZlYCBhcHBlYXIgdG8gYmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLCBhcyB0aGV5IGFyZSBsaWtlbHkgdG8gYmUgZW50cnkgcG9pbnRzIGZvciB0aGUgaG90cGx1ZyBmdW5jdGlvbmFsaXR5LgoqICAgKipgbW0vbWVtb3J5X2hvdHBsdWcuY2AqKjogQ29yZSBob3RwbHVnZ2luZyBpbmZyYXN0cnVjdHVyZSBmdW5jdGlvbnMgbGlrZSBhZGRpbmcgYW5kIHJlbW92aW5nIG1lbW9yeSByYW5nZXMuCgpOb3csIGZyb20gdGhlIGxvb2sgb2YgaXQsIHRoZSBjb2RlIHNlZW1zIHdlbGwtc3RydWN0dXJlZCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBpbW11bmUgdG8gYnVncy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcy4gQmFzZWQgb24gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnYCBmaWxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVzZSBzZXQ6IGBDT05GSUdfREVWX0RBWGAsIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCk9rYXksIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc2hhcGVzIHVwLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgc3RhcnQgZm9ybXVsYXRpbmcgc29tZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX0RBWF9LTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWc9MzA9Y29uZmlnIERFVl9EQVhfSE1FTVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNDMtXHQgIGRldmljZS1kYXggaW5zdGFuY2VzIGZvciB0aGVzZSBtZW1vcnkgcmFuZ2VzLCBhbmQgdGhhdCBhbHNvXG5kcml2ZXJzL2RheC9LY29uZmlnOjQ0Olx0ICBlbmFibGVzIHRoZSBwb3NzaWJpbGl0eSB0byBhc3NpZ24gdGhlbSB0byB0aGUgREVWX0RBWF9LTUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTQ1LVx0ICBkcml2ZXIgdG8gb3ZlcnJpZGUgdGhlIHJlc2VydmF0aW9uIGFuZCBhZGQgdGhlbSB0byBrZXJuZWxcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnPTY4PWNvbmZpZyBERVZfREFYX0ZTREVWXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0tNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0RFVl9EQVgpICYjNDM7PSBkZXZpY2VfZGF4Lm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RFVl9EQVhfS01FTSkgJiM0Mzs9IGttZW0ub1xuZHJpdmVycy9kYXgvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREVWX0RBWF9QTUVNKSAmIzQzOz0gZGF4X3BtZW0ub1xuLS1cbmRyaXZlcnMvZGF4L2J1cy5jPTY4PXN0YXRpYyBpbnQgZGF4X21hdGNoX3R5cGUoY29uc3Qgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyICpkYXhfZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9kYXgvYnVzLmMtODAtXHRpZiAoZGF4X2Rydi1cdTAwM2V0eXBlID09IERBWERSVl9ERVZJQ0VfVFlQRSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZGF4L2J1cy5jOjgxOlx0ICAgICFJU19FTkFCTEVEKENPTkZJR19ERVZfREFYX0tNRU0pKVxuZHJpdmVycy9kYXgvYnVzLmMtODItXHRcdHJldHVybiAxO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9MT1DT05GSUdfREVWX0RBWD1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjI6Q09ORklHX0RFVl9EQVhfS01FTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnLTMtQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMsIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbWVtb3J5IHNpdHVhdGlvbi4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmZXcga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QgdXAsIEkgbmVlZCB0byBjaGVjayBgQ09ORklHX0RFVl9EQVhgLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IGlmIERBWCBpcyBlbmFibGVkLCBnaXZlbiB0aGF0IEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBvciBwZXJzaXN0ZW50IG1lbW9yeS4gVGhlIGRldGFpbHMgd2lsbCBhbGxvdyBtZSB0byBkZWNpZGUgd2hldGhlciBEQVggd2lsbCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBteSBjb2RlLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19NRU1PUllfSE9UUExVR2AgaXMgc2V0LiBHaXZlbiB0aGUgd2F5IG1lbW9yeSBpcyBjaGFuZ2luZyBvdmVyIHRpbWUgd2l0aCB0aGUgcmlzZSBvZiBzZXJ2ZXJzLCB0aGlzIGlzIGltcG9ydGFudC4gVGhlbiwgSSB3aWxsIGFsc28gaGF2ZSB0byBjaGVjayBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBUaGVzZSB0d28gb3B0aW9ucyBnbyBoYW5kIGluIGhhbmQsIGRlZmluaW5nIGlmIEkgY2FuIGFkZCBhbmQgcmVtb3ZlIG1lbW9yeSBhdCBydW50aW1lLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSBob3cgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBtYW5hZ2UgdGhlIG92ZXJhbGwgbWVtb3J5IHBvb2wgZHluYW1pY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX0RBWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NjQ3PUNPTkZJR19WSE9TVF9WRFBBPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo2NDg6Q09ORklHX0RFVl9EQVg9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTY0OS1DT05GSUdfRVhUNF9GUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTYzNz1DT05GSUdfVkhPU1RfVkRQQT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NjM4OkNPTkZJR19ERVZfREFYPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy02MzktQ09ORklHX0VYVDRfRlM9eVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYz04NTk9c3RhdGljIHZvaWQgaG1hdF9yZWdpc3Rlcl90YXJnZXRfZGV2aWNlcyhzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGFyZ2V0KVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NjYtXHQgKi9cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYzo4Njc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSkpXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmMtODY4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo4OmNvbmZpZyBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0xOC1cbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XCYjMzQ7XG5kcml2ZXJzL2RheC9LY29uZmlnOjIxOlx0ZGVwZW5kcyBvbiBMSUJOVkRJTU0gXHUwMDI2XHUwMDI2IE5WRElNTV9EQVggXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6MjI6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cbmRyaXZlcnMvZGF4L0tjb25maWc6MzA6Y29uZmlnIERFVl9EQVhfSE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0hNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvICYjMzk7c3BlY2lmaWMgcHVycG9zZSYjMzk7IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctMzMtXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQV9NRU1CTEtTXG5kcml2ZXJzL2RheC9LY29uZmlnOjM0Olx0ZGVmYXVsdCBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTM1LVx0ZGVwZW5kcyBvbiBDWExfQUNQSSB8fCAhQ1hMX0FDUElcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnLTQzLVx0ICBkZXZpY2UtZGF4IGluc3RhbmNlcyBmb3IgdGhlc2UgbWVtb3J5IHJhbmdlcywgYW5kIHRoYXQgYWxzb1xuZHJpdmVycy9kYXgvS2NvbmZpZzo0NDpcdCAgZW5hYmxlcyB0aGUgcG9zc2liaWxpdHkgdG8gYXNzaWduIHRoZW0gdG8gdGhlIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy00NS1cdCAgZHJpdmVyIHRvIG92ZXJyaWRlIHRoZSByZXNlcnZhdGlvbiBhbmQgYWRkIHRoZW0gdG8ga2VybmVsXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy00OS1cbmRyaXZlcnMvZGF4L0tjb25maWc6NTA6Y29uZmlnIERFVl9EQVhfQ1hMXG5kcml2ZXJzL2RheC9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7Q1hMIERBWDogZGlyZWN0IGFjY2VzcyB0byBDWEwgUkFNIHJlZ2lvbnNcJiMzNDtcbmRyaXZlcnMvZGF4L0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIENYTF9CVVMgXHUwMDI2XHUwMDI2IENYTF9SRUdJT04gXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NTM6XHRkZWZhdWx0IENYTF9SRUdJT04gXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NTQ6XHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSB8fCAhREVWX0RBWF9ITUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNjMtXG5kcml2ZXJzL2RheC9LY29uZmlnOjY0OmNvbmZpZyBERVZfREFYX0hNRU1fREVWSUNFU1xuZHJpdmVycy9kYXgvS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gREVWX0RBWF9ITUVNIFx1MDAyNlx1MDAyNiBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNjYtXHRkZWZfYm9vbCB5XG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo2ODpjb25maWcgREVWX0RBWF9GU0RFVlxuZHJpdmVycy9kYXgvS2NvbmZpZy02OS1cdHRyaXN0YXRlXG5kcml2ZXJzL2RheC9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBERVZfREFYIFx1MDAyNlx1MDAyNiBGU19EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NzE6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNzItXG5kcml2ZXJzL2RheC9LY29uZmlnOjczOmNvbmZpZyBERVZfREFYX0tNRU1cbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cJiMzNDtcbmRyaXZlcnMvZGF4L0tjb25maWc6NzU6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNzctXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuLS1cbmRyaXZlcnMvZGF4L01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0RBWCkgJiM0Mzs9IGRheC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ERVZfREFYKSAmIzQzOz0gZGV2aWNlX2RheC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19ERVZfREFYX0tNRU0pICYjNDM7PSBrbWVtLm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgJiM0Mzs9IGRheF9wbWVtLm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0RFVl9EQVhfQ1hMKSAmIzQzOz0gZGF4X2N4bC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ERVZfREFYX0ZTREVWKSAmIzQzOz0gZnNkZXZfZGF4Lm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlLTktXG4tLVxuZHJpdmVycy9kYXgvYnVzLmM9Njg9c3RhdGljIGludCBkYXhfbWF0Y2hfdHlwZShjb25zdCBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgKmRheF9kcnYsIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2RheC9idXMuYy04MC1cdGlmIChkYXhfZHJ2LVx1MDAzZXR5cGUgPT0gREFYRFJWX0RFVklDRV9UWVBFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9kYXgvYnVzLmM6ODE6XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfS01FTSkpXG5kcml2ZXJzL2RheC9idXMuYy04Mi1cdFx0cmV0dXJuIDE7XG4tLVxuZHJpdmVycy9kYXgvYnVzLmg9NzM9dG9faG1lbV9wbGF0Zm9ybV9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2RheC9idXMuaC03Ny1cbmRyaXZlcnMvZGF4L2J1cy5oOjc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ERVZfREFYX0hNRU0pXG5kcml2ZXJzL2RheC9idXMuaC03OS12b2lkIGRheF9obWVtX2ZsdXNoX3dvcmsodm9pZCk7XG4tLVxuZHJpdmVycy9kYXgvaG1lbS9NYWtlZmlsZS0yLSMgZGV2aWNlX2htZW0ubyBkZWxpYmVyYXRlbHkgcHJlY2VkZXMgZGF4X2htZW0ubyBmb3IgaW5pdGNhbGwgb3JkZXJpbmdcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfREVWX0RBWF9ITUVNX0RFVklDRVMpICYjNDM7PSBkZXZpY2VfaG1lbS5vXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVhfSE1FTSkgJiM0Mzs9IGRheF9obWVtLm9cbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGUtNS1cbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYz0xNjY9c3RhdGljIGludCBobWVtX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpob3N0LCBpbnQgdGFyZ2V0X25pZCxcbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYy0xNzEtXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYzoxNzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9DWEwpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTczLVx0ICAgIHJlZ2lvbl9pbnRlcnNlY3RzKHJlcy1cdTAwM2VzdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBJT1JFU09VUkNFX01FTSxcbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYz0yMDg9c3RhdGljIF9faW5pdCBpbnQgZGF4X2htZW1faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxNi1cdCAqL1xuZHJpdmVycy9kYXgvaG1lbS9obWVtLmM6MjE3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfQ1hMKSkge1xuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMjE4LVx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtjeGxfYWNwaVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZz0xPWNvbmZpZyBETV9QQ0FDSEVcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIEJMS19ERVZfRE1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWc6NDpcdGRlcGVuZHMgb24gREVWX0RBWFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZy01LVx0aGVscFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctODAtXG5mcy9LY29uZmlnOjgxOiAgICAgICAgICBGb3IgbmRjdGwgdG8gd29yayBDT05GSUdfREVWX0RBWCBuZWVkcyB0byBiZSBlbmFibGVkIGFzIHdlbGwuIEZvciBtb3N0XG5mcy9LY29uZmlnLTgyLVx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxuLS1cbmluY2x1ZGUvbGludXgvZGF4Lmg9MzA5PXN0YXRpYyBpbmxpbmUgaW50IGRheF9tZW0yYmxrX2VycihpbnQgZXJyKVxuLS1cbmluY2x1ZGUvbGludXgvZGF4LmgtMzEzLVxuaW5jbHVkZS9saW51eC9kYXguaDozMTQ6I2lmZGVmIENPTkZJR19ERVZfREFYX0hNRU1fREVWSUNFU1xuaW5jbHVkZS9saW51eC9kYXguaC0zMTUtdm9pZCBobWVtX3JlZ2lzdGVyX3Jlc291cmNlKGludCB0YXJnZXRfbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpO1xuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0zND1lbmRpZlxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjM1Om9iai0kKENPTkZJR19ERVZfREFYKSAmIzQzOz0gZGV2aWNlX2RheC5vXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MzY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgJiM0Mzs9IGRheF9wbWVtLm9cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0zNy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYz00PXZvaWQgY2hlY2sodm9pZClcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYy0xNS1cdFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0FDUElfTkZJVCkpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTY6XHRCVUlMRF9CVUdfT04oIUlTX01PRFVMRShDT05GSUdfREVWX0RBWCkpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTc6XHRCVUlMRF9CVUdfT04oIUlTX01PRFVMRShDT05GSUdfREVWX0RBWF9QTUVNKSk7XG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYy0xOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoxOkNPTkZJR19ERVZfREFYPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6MjpDT05GSUdfREVWX0RBWF9LTUVNPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTMzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBIb3RwbHVnIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbWVtb3J5LXJlbGF0ZWQgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxldmFudCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIHRvIGdyYXNwIGhvdyB0aGVzZSBmZWF0dXJlcyBpbXBhY3Qgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEhvdyBkbyB0aGV5IGludGVyYWN0PyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzNj1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zNzctXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozNzg6XHRcdCAgICBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3OS1cdFx0ICAgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cbi0tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTEzMT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxMzI6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xMzMtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0yMjQxPXN0YXRpYyBpbnQgX19pbml0IHByZXZlbnRfbWVtb3J5X3JlbW92ZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMjQ0LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMjQ1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSlcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjI0Ni1cdFx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTEwMT1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTAzLSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTA0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTA1LUNPTkZJR19LU009eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTE2PUNPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUTz15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMTgtIyBDT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEUgaXMgbm90IHNldFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxMTk6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMjAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9NTg9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjU5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTYwLUNPTkZJR19LU009eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz04OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05MC1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz0yMjI9c3RhdGljIGludCBkbHBhcl9vbmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzoyMjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjgtc3RhdGljIGludCBkbHBhcl9vZmZsaW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9NTU4PXN0YXRpYyBpbnQgZGxwYXJfbWVtb3J5X3JlbW92ZV9ieV9pYyh1MzIgbG1ic190b19yZW1vdmUsIHUzMiBkcmNfaW5kZXgpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYxLX1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU2My1cbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTAxPUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk0PUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTU6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTk2LUNPTkZJR19LU009eVxuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzEtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jPTI3MD1pbnQgY291bnRfaW1tb3ZhYmxlX21lbV9yZWdpb25zKHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0zMTYtfVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYzozMTc6I2VuZGlmIC8qIENPTkZJR19SQU5ET01JWkVfQkFTRSBcdTAwMjZcdTAwMjYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTU9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjAwLVx0LypcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjYwMTpcdCAqIElmIG5vIGltbW92YWJsZSBtZW1vcnkgZm91bmQsIG9yIE1FTU9SWV9IT1RSRU1PVkUgZGlzYWJsZWQsXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDItXHQgKiB1c2UgQHJlZ2lvbiBkaXJlY3RseS5cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTMtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MTQ6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjE1LVx0Lypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oPTE3MT1zdGF0aWMgaW5saW5lIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmg6MTc0OiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNjc9c3RhdGljIHNzaXplX3QgcGh5c19pbmRleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc2LSAqIExlZ2FjeSBpbnRlcmZhY2UgdGhhdCB3ZSBjYW5ub3QgcmVtb3ZlLiBBbHdheXMgaW5kaWNhdGUgXCYjMzQ7cmVtb3ZhYmxlXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTc3OiAqIHdpdGggQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgLSBiYWQgaGV1cmlzdGljLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3OC0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTgxLXtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCAoaW50KUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz00NTA9c3RhdGljIHNzaXplX3QgcGh5c19kZXZpY2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQ1OS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0NjA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjcxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfbWVtYmxrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3NS1cdFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjY3NjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzctXHRcdTAwMjZkZXZfYXR0cl92YWxpZF96b25lcy5hdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAwLVxuZHJpdmVycy9kYXgva21lbS5jOjIwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDItLyoqXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTI2MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjY1LX1cbmRyaXZlcnMvZGF4L2ttZW0uYzoyNjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kcml2ZXJzL2RheC9rbWVtLmMtMjY3LVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTQ4OS1cbmRyaXZlcnMvZGF4L2ttZW0uYzo0OTA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2RheC9rbWVtLmMtNDkxLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTUzMT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01NDUtfVxuZHJpdmVycy9kYXgva21lbS5jOjU0NjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy01NDctXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMjM9Y29uZmlnIFZJUlRJT19NRU1cbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyNy1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbmRyaXZlcnMvdmlydGlvL0tjb25maWc6MTI4Olx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4tLVxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTItXHRcdFx0XHRyZXNvdXJjZV9zaXplX3QpO1xuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTM5NC1leHRlcm4gdm9pZCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjYyLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjQtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI4OT1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkzLX1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTQ6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk1LVxuLS1cbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc6MTY6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxua2VybmVsL2NvbmZpZ3MveGVuLmNvbmZpZy0xNy1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTE0NDY9RVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9uKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDctXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxua2VybmVsL3Jlc291cmNlLmMtMTQ0OS1zdGF0aWMgdm9pZCBhcHBlbmRfY2hpbGRfdG9fcGFyZW50KHN0cnVjdCByZXNvdXJjZSAqbmV3X3BhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXdfY2hpbGQpXG4tLVxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTU5Ni19XG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmtlcm5lbC9yZXNvdXJjZS5jLTE1OTgtXG4tLVxubW0vS2NvbmZpZz01MzY9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTUzNy1cbm1tL0tjb25maWc6NTM4OmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTUzOS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTgzPWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTE4NS1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6MTE4NjpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuLS1cbm1tL2tzbS5jPTMyNjk9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2tzbS5jLTMyOTItXG5tbS9rc20uYzozMjkzOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0va3NtLmMtMzI5NC1zdGF0aWMgdm9pZCB3YWl0X3doaWxlX29mZmxpbmluZyh2b2lkKVxuLS1cbm1tL2tzbS5jPTM0MTc9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcbi0tXG5tbS9rc20uYy0zNDE5LX1cbm1tL2tzbS5jOjM0MjA6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5tbS9rc20uYy0zNDIxLVxuLS1cbm1tL2tzbS5jPTM5Nzc9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcbi0tXG5tbS9rc20uYy00MDA5LVxubW0va3NtLmM6NDAxMDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbm1tL2tzbS5jLTQwMTEtXHQvKiBUaGVyZSBpcyBubyBzaWduaWZpY2FuY2UgdG8gdGhpcyBwcmlvcml0eSAxMDAgKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3NzE9Ym9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3ODQ6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODUtLypcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1MjU9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTI2OiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Mzc0PXN0YXRpYyB1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9iZWdpbih2b2lkKVxubW0vcGFnZV9hbGxvYy5jLTQzNzUte1xubW0vcGFnZV9hbGxvYy5jOjQzNzY6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5tbS9wYWdlX2FsbG9jLmMtNDM3Ny1cdFx0cmV0dXJuIHJlYWRfc2VxYmVnaW4oXHUwMDI2em9uZWxpc3RfdXBkYXRlX3NlcSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzODI9c3RhdGljIHVuc2lnbmVkIGludCBjaGVja19yZXRyeV96b25lbGlzdCh1bnNpZ25lZCBpbnQgc2VxKVxubW0vcGFnZV9hbGxvYy5jLTQzODMte1xubW0vcGFnZV9hbGxvYy5jOjQzODQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5tbS9wYWdlX2FsbG9jLmMtNDM4NS1cdFx0cmV0dXJuIHJlYWRfc2VxcmV0cnkoXHUwMDI2em9uZWxpc3RfdXBkYXRlX3NlcSwgc2VxKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzUxNz12b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NTM1LVxubW0vcGFnZV9hbGxvYy5jOjc1MzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9wYWdlX2FsbG9jLmMtNzUzNy0vKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND05MD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjkxOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NC05Mi1DT05GSUdfTkFNRVNQQUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD03Nj1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweDo3NzpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTc4LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnPTM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6NDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnPTM9Q09ORklHX01FTU9SWV9OT1RJRklFUl9FUlJPUl9JTkpFQ1Q9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTExMS1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBWCBLTUVNIEhvdHBsdWcgYW5kIEhvdHJlbW92ZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVmaW5lIHRoaXMgREFYIEtNRU0gZnVuY3Rpb25hbGl0eTogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gIEdvdCBpdC4gTm93IEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2VzcyBmb3IgREFYIEtNRU0uIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDogYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYHN0YXRlX3Nob3dgLCBgc3RhdGVfc3RvcmVgLCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AuCgpSaWdodCwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZnVuY3Rpb24gdmlzaWJpbGl0eS4gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoaXMgY29tcG9uZW50LiBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGltcGxpZXMgdGhleSBhcmUgbGlrZWx5IGNvcmUga2VybmVsIGZ1bmN0aW9ucy4gYHN0YXRlX3N0b3JlYCBhbmQgYGRldl9kYXhfa21lbV9wcm9iZWAgYXJlIGFsc28gc3RhdGljLCBzbyBpbnRlcm5hbCB0byB0aGlzIGttZW0gaW1wbGVtZW50YXRpb24uIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYCB0byBzZWUgaWYgSSBtaXNzZWQgYW55IGZ1bmN0aW9uIG5hbWVzLiBBbHdheXMgd29ydGggYSBsb29rIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYXhfa21lbV9kb19ob3RwbHVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYz03Mz1zdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy05MC0gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzo5MTpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ3NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gYHN0YXRlX3N0b3JlYCBpbiBgZHJpdmVycy9kYXgva21lbS5jYCoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiByZXNpZGVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kYXgva21lbS5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBEQVggYW5kIGttZW0sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaG93IGl0cyBzdGF0ZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgaW1wbGVtZW50YXRpb24gZm9yIGtlcm5lbCBtZW1vcnkuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGluZ3MgbGlrZSBwb3dlciBzdGF0ZSwgZXJyb3Igc3RhdGUsIG9yIHBlcmhhcHMgZXZlbiBwcm92aXNpb25pbmcvZGVwcm92aXNpb25pbmcgb2YgREFYLW1hbmFnZWQgbWVtb3J5IHJlZ2lvbnMuIFRpbWUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIERBWCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIHN0YXRlX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz0zOTQ9c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29mZmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDMtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDA1LVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jPTE5PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMC1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jOjMxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMi1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzE2PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zMzItXG5kcml2ZXJzL2RheC9rbWVtLmM6MzMzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2RheC9rbWVtLmMtMzM0LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYz0zMD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jLTQwLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jOjQxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYz00Mj1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01Mi1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jOjUzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01NC1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jPTE3OD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2Nfc3lzZnMuYy0xODgtLyogQ2hhbmdlIHJlbW90ZSBwcm9jZXNzb3Igc3RhdGUgdmlhIHN5c2ZzICovXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jOjE4OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE5MC1cdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jPTI0ND12b2lkIGFwYl9jdHJsX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jLTI0OC1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjUwLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM9MjgxPWFyY2hlX3BsYXRmb3JtX3Bvd2Vyb2ZmX3NlcShzdHJ1Y3QgYXJjaGVfcGxhdGZvcm1fZHJ2ZGF0YSAqYXJjaGVfcGRhdGEpXG4tLVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYy0zMDUtXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jOjMwNjpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNy1cdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5rZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mj1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmMtNzk4LVxua2VybmVsL3Bvd2VyL21haW4uYzo3OTk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbmtlcm5lbC9wb3dlci9tYWluLmMtODAwLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzQxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzgwLVxubW0vZGFtb24vc3lzZnMuYzoyMzgxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm5ldC9yZmtpbGwvY29yZS5jPTgwOD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxubmV0L3Jma2lsbC9jb3JlLmM6ODIwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDQzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgRHluYW1pYyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIERBWCBrbWVtLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IG9uZXMgdG8gaW5zdHJ1bWVudCBmb3IgZHluYW1pYyBhbmFseXNpcy4gSSYjMzk7dmUgaW5pdGlhbGx5IGlkZW50aWZpZWQgYSBsaXN0LCBidXQgSSBuZWVkIHRvIHJlZmluZSBpdCB0byBlbnN1cmUgZWZmZWN0aXZlIGNvdmVyYWdlIGFuZCBhdm9pZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKRmlyc3QsIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBjYW5kaWRhdGVzOiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBhbmQgYHN0YXRlX3N0b3JlYCAoIHNwZWNpZmljYWxseSB0aGUgb25lIGluIGBkcml2ZXJzL2RheC9rbWVtLmNgKSwgYWxvbmcgd2l0aCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC4KCk5vdywgdGhlIGNvbmNlcm4gaXMgdGhhdCBgc3RhdGVfc3RvcmVgIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZS4gU3RhdGljIGZ1bmN0aW9ucyB3aXRoIGNvbW1vbiBuYW1lcyBsaWtlIHRoYXQgYXJlIGEgcmVkIGZsYWcuIFN5emthbGxlciBtaWdodCBoYXZlIHRyb3VibGUgcmVzb2x2aW5nIGl0IGNvcnJlY3RseSwgb3IsIHdvcnNlLCBpdCBtaWdodCBpbnN0cnVtZW50ICpldmVyeSogYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiBpbiB0aGUga2VybmVsLCBsZWFkaW5nIHRvIG1hc3NpdmUgbm9pc2UgYW5kIHBvdGVudGlhbGx5IHNrZXdlZCByZXN1bHRzLiBUaGF0JiMzOTtzIGEgd2FzdGUgb2YgdGltZS4gSSBuZWVkIHNwZWNpZmljaXR5LiBJJiMzOTttIGFpbWluZyBmb3IgdW5pcXVlIGVudHJ5IHBvaW50cy4KClNvLCBkaXRjaGluZyBgc3RhdGVfc3RvcmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBJIHNob3VsZCBjaG9vc2UgdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMuIEkgdGhpbmsgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCBvciBgZGF4X2ttZW1fZG9faG90cGx1Z2Agd291bGQgYmUgYmV0dGVyIGNob2ljZXMuCgpUaGVyZWZvcmUsIGFmdGVyIGEgbGl0dGxlIHJlZmluZW1lbnQsIEkgd2FudCB0byB1c2UgdGhpcyBsaXN0IGFzIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHM6Ci0gYGRheF9rbWVtX2RvX2hvdHBsdWdgCi0gYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYAotIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgCi0gYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYAotIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAKLSBgZGV2X2RheF9rbWVtX3Byb2JlYAotIGBkZXZfZGF4X2ttZW1fcmVtb3ZlYAotIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgCi0gYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCBpcyBhY3R1YWxseSB3aGF0IEkgdGhpbmsgaXQgaXMuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1fcGFyc2Vfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTI3NT1zdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzAwLVxuZHJpdmVycy9kYXgva21lbS5jOjMwMTpzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1ZilcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMDIte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zMzM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQzLVxuZHJpdmVycy9kYXgva21lbS5jOjM0NDpcdG9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QsIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIFByZXNlbmNlKioKClJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB0aGluZy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbXkgbmV4dCBzdGVwIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIHJlbGV2YW50LCBidXQgYmVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1fZG9faG90cGx1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9NzM9c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtODAtLyoqXG5kcml2ZXJzL2RheC9rbWVtLmM6ODE6ICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbmRyaXZlcnMvZGF4L2ttZW0uYy04Mi0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTkyLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM3MC1cbmRyaXZlcnMvZGF4L2ttZW0uYzozNzE6XHRyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpO1xuZHJpdmVycy9kYXgva21lbS5jLTM3Mi1cdGlmIChyYyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy00NjQtXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG5kcml2ZXJzL2RheC9rbWVtLmM6NDY1Olx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy00NjYtXHRpZiAocmMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgRXhpc3RlbmNlIGFuZCBQcm9jZWVkaW5nIHdpdGggVmVyaWZpY2F0aW9uKioKClllcywgSSBrbm93IHRoaXMgaXMgcmVhbCwgdGhlIGNvbmNlcHQgaXMgdmFsaWQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24sIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBhY3R1YWxseSBleGlzdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGRlZmluZWQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcmVsZXZhbmNlIHRvIHRoZSBwcm9ibGVtIGF0IGhhbmQuIEdvdHRhIG1ha2Ugc3VyZSBpdCYjMzk7cyAqdGhlcmUqIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byAqd2hhdCogaXQgZG9lcy4gU28sIGxldCYjMzk7cyBjaGVjayBpdHMgcHJlc2VuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MTU2PXN0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTIwMi0vKipcbmRyaXZlcnMvZGF4L2ttZW0uYzoyMDM6ICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxuZHJpdmVycy9kYXgva21lbS5jLTIwNC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjEyLSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjIxMzpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTQtXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTI2MC0jZWxzZVxuZHJpdmVycy9kYXgva21lbS5jOjI2MTpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjItXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zNTQtXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XG5kcml2ZXJzL2RheC9rbWVtLmM6MzU1Olx0XHRyYyA9IGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNTYtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9NDkxPXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTUxMC1cdH0gZWxzZSBpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2RheC9rbWVtLmM6NTExOlx0ICAgIGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKSkge1xuZHJpdmVycy9kYXgva21lbS5jLTUxMi1cdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSBrbm93IHRoaXMgY29uY2VwdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIGluIHBsYXkuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyBob3cgdGhpcyB0aGluZyBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aGUgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBleGlzdHMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlYmFzZSBvciBmcmFtZXdvcmsuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgZHJpdmVyIGlzIG1hbmFnZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYz05MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTExOS1cdFx0ICovXG5kcml2ZXJzL2RheC9rbWVtLmM6MTIwOlx0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuZHJpdmVycy9kYXgva21lbS5jLTEyMS1cdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDM9ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA0LVx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNTppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA2LVx0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTYzOD1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDAtLyoqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDItICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3MS0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY3MjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzMtXHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDItfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzAzOkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcJiMzNDtrbWVtXCYjMzQ7KTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcwNC1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTUtICpcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcxNjogKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTctICpcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3MjA9aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjIte1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzIzOlx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI0LVx0XHRcdG1ocF9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBDaGVjayoqCgpSaWdodCwgSSYjMzk7dmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHByZW1pc2Ug4oCTIGl0ICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBhbmQgcGFydGljdWxhcmx5IGJlZm9yZSBJIHN0YXJ0IG1hbmlwdWxhdGluZyBvciByZWx5aW5nIG9uIGFueSBwb3RlbnRpYWxseSBkZWxpY2F0ZSBtZW1vcnkgcmFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24sIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGlzIGluZGVlZCBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBjb250aW51aW5nIGRvd24gdGhpcyBwYXRoIGlmIHRoYXQgY29yZSBmdW5jdGlvbmFsaXR5IGlzbiYjMzk7dCBwcmVzZW50LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4gSSB3aWxsIG5vdCBwcm9jZWVkIHdpdGhvdXQgYmVpbmcgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTIxMz1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjQwLVxuZHJpdmVycy9kYXgva21lbS5jOjI0MTpcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xuZHJpdmVycy9kYXgva21lbS5jLTI0Mi1cdGtmcmVlKHJhbmdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI3MD1leHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MjcxOmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjcyLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yODc9c3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI4OC1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyODk6c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkwLVx0XHRcdFx0XHRcdCAgIGludCBucl9yYW5nZXMpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDMwPWludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDMzLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM0Olx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFx1MDAyNnJhbmdlLCAxKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzNS19XG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDM4LS8qKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM5OiAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ0MC0gKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTQtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI0NTU6aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU2LXtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjQtfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTI1OkVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyNi0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyOTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFYIEtNRU0gSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGNvbmZpcm1hdGlvbi4gVGhpcyBEQVggS01FTSB0aGluZyBpcyBhIHJlYWwgdGhpbmcsIGl0IGRvZXMgZXhpc3QuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eToKCiogICBgZGF4X2ttZW1fZG9faG90cGx1Z2AKKiAgIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AKKiAgIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgCiogICBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgCiogICBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgCiogICBgZGV2X2RheF9rbWVtX3Byb2JlYAoqICAgYGRldl9kYXhfa21lbV9yZW1vdmVgCiogICBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYAoqICAgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gREFYIEtNRU0uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdgLiBJdCBsb29rcyBsaWtlIHRoZXNlIGNvbmZpZ3MgYXJlIHRoZSBvbmVzIHdlIG5lZWQ6CgpgYGAKQ09ORklHX0RFVl9EQVg9bQpDT05GSUdfREVWX0RBWF9LTUVNPW0KQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpgYGAKCkkmIzM5O2xsIHByb2NlZWQgYnkgY3Jvc3MtcmVmZXJlbmNpbmcgYW5kIHZlcmlmeWluZyB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AuIFRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTkxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTQ3LS8qKlxuZHJpdmVycy9kYXgva21lbS5jOjE0ODogKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbmRyaXZlcnMvZGF4L2ttZW0uYy0xNDktICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTE1NS0gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzoxNTY6c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xNTctXHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM2Ni1cdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzozNjc6XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTM2OC1cdGlmIChyYyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy00NTQtXG5kcml2ZXJzL2RheC9rbWVtLmM6NDU1Olx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy00NTYtXHRpZiAocmMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpdCBjb25jaXNlIGFuZCByZWxldmFudDoKCioqQ29uZmlybWluZyBhbmQgVmVyaWZ5aW5nIEZ1bmN0aW9uIEV4aXN0ZW5jZSoqCgpZZXMsIHRoYXQgY3J1Y2lhbCBlbGVtZW50IGlzIGluZGVlZCBwcmVzZW50LiBOb3csIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25maXJtIHRoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIEkgcmVxdWlyZSwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYWN0dWFsbHkgZXhpc3RzIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGVjayBJIGNhbiYjMzk7dCBza2lwIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MjYxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjgtLyoqXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY5OiAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xuZHJpdmVycy9kYXgva21lbS5jLTI3MC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjI3NTpzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzYtXHRcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNDc2LWVycl9ob3RwbHVnOlxuZHJpdmVycy9kYXgva21lbS5jOjQ3NzpcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTQ3OC1lcnJfcmVzb3VyY2VzOlxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTE1LVxuZHJpdmVycy9kYXgva21lbS5jOjUxNjpcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTUxNy1cdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTI2CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFuZCBJIGNhbiBjb25maXJtLCAqeWVzKiwgdGhpcyB3YXJyYW50cyBteSBhdHRlbnRpb24uIEl0IGludHJvZHVjZXMgbW9kaWZpY2F0aW9ucyB0aGF0IGRpcmVjdGx5IGltcGFjdCBjcnVjaWFsIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIERBWCBrbWVtIGRyaXZlciBhbmQgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbS4KClRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEkgc2VlIGl0JiMzOTtzIGFkZGVkIGEgbmV3IHN5c2ZzIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSAmIzM5O3N0YXRlJiMzOTsgaW50ZXJmYWNlIGZvciBEQVgga21lbSBkZXZpY2VzLCB3aGljaCBtZWFucyB3ZSBub3cgaGF2ZSB0aGUgYWJpbGl0eSB0byBjb250cm9sIG1lbW9yeSByZWdpb24gc3RhdGVzICh1bnBsdWdnZWQsIG9ubGluZSwgZXRjLikgZGlyZWN0bHkuIEZ1cnRoZXIsIHRoZSBwYXRjaCBnb2VzIGV2ZW4gZnVydGhlciwgYW5kIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzeXN0ZW0gdG8gaGFuZGxlIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSEgVGhhdCBhbG9uZSBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2Ugd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuCgpHaXZlbiB0aGVzZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCB0aGlzIGNsZWFybHkgcHJlc2VudHMgc2V2ZXJhbCBrZXkgYXJlYXMgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AuCgpBbmQgSSYjMzk7bGwgYmUgc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlc2UgY29uZmlncyBzZXQ6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIGFyZSBrZXksIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGV5IGRlZmluZSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIG5ld2x5IGludHJvZHVjZWQgY29kZSBvcGVyYXRlcy4KClRoaXMgaXMgYSB3ZWxsLWRlZmluZWQgc2V0IG9mIGNoYW5nZXMsIGludHJvZHVjaW5nIG5ldyBwYXRod2F5cyBhbmQgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMsIHNvIGl0JiMzOTtzIHJpcGUgZm9yIGZ1enplciBhdHRlbnRpb24uIEl0IGlzIGEgZ29vZCB0aW1lIHRvIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O2Rldl9kYXhfa21lbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcmVtb3ZlJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O2Rldl9kYXhfa21lbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcmVtb3ZlJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE4OjQ1LjQ5Nzc2ODI0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDMzMjI0MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTg6NDUuNDk3NzczNTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjEyNTc5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZTQzMThjNTE1MGQxN2EyNzBmZmQ4NjY4NmM1ZTBjZDU3NzU4N2UwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDE1OjE4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxcbmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG5AQCAtMTUxLDMgKzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXFxuIFxcdFxcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxcbiBcXHRcXHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAndHJ1ZScgb3IgJ2ZvcmNlJy5cXFwiXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxcbitEYXRlOlxcdFxcdEp1bmUsIDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHR2Ni4yMVxcbitDb250YWN0OlxcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcXG4rRGVzY3JpcHRpb246XFxuK1xcdFxcdChSVykgQ29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBtZW1vcnkgcmVnaW9uLlxcbitcXHRcXHRBcHBsaWVzIHRvIGFsbCBtZW1vcnkgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLlxcbitcXHRcXHRPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy5cXG4rXFxuK1xcdFxcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcXG4rXFx0XFx0dGhlIHBlci1ibG9jayAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlIEFCSTo6XFxuK1xcbitcXHRcXHQgIFxcXCJ1bnBsdWdnZWRcXFwiOiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudFxcbitcXHRcXHQgIFxcXCJvbmxpbmVcXFwiOiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXFxuK1xcdFxcdCAgXFxcIm9ubGluZV9rZXJuZWxcXFwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMXFxuK1xcdFxcdCAgXFxcIm9ubGluZV9tb3ZhYmxlXFxcIjogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEVcXG4rXFxuK1xcdFxcdFxcXCJvZmZsaW5lXFxcIiAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcXG4rXFx0XFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxcbitcXHRcXHRhdXRvX29ubGluZV9ibG9ja3MgcG9saWN5IGlzIFxcXCJvZmZsaW5lXFxcIi4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLFxcbitcXHRcXHRhcyBpdCdzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgZGV2aWNlIGRlc3RydWN0aW9uIHJhY2VzLlxcbitcXG4rXFx0XFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcXFwidW5wbHVnZ2VkXFxcIiBzdGF0ZSwgc28gYVxcbitcXHRcXHRkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byBcXFwidW5wbHVnZ2VkXFxcIiBiZWZvcmUgaXQgY2FuIGJlIG9ubGluZWRcXG4rXFx0XFx0aW50byBhIGRpZmZlcmVudCBzdGF0ZS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuaW5kZXggYjMxODM0NDQyNmZhYmMuLjNhMmY2OWQzYWY3YjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbkBAIC00Niw2ICs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcXG4gXFx0fVxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xcbitcXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXFxuK3tcXG4rXFx0aWYgKG9ubGluZV90eXBlIFxcdTAwM2MgMCB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlPSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xcbiBcXG4gI2RlZmluZSB0b19tZW1vcnlfYmxvY2soZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWVtb3J5X2Jsb2NrLCBkZXYpXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXFxuaW5kZXggNDkyNTczYjQ3ZjY2MjQuLjRhMDNiMzIzYjAwMzdkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbkBAIC0zOTQsNiArMzk1LDcgQEAgc3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdFxcdFxcdC5zaXplID0gMCxcXG4gXFx0XFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdFxcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpO1xcbiBcXG5AQCAtMTUyNyw2ICsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcXG4gXFx0aWRhX2luaXQoXFx1MDAyNmRldl9kYXgtXFx1MDAzZWlkYSk7XFxuIFxcbiBcXHRkZXZfZGF4LVxcdTAwM2VtZW1tYXBfb25fbWVtb3J5ID0gZGF0YS1cXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0ZGV2X2RheC1cXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4gXFxuIFxcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xcbiBcXHRkZXYtXFx1MDAzZWRldnQgPSBpbm9kZS1cXHUwMDNlaV9yZGV2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLmYzYzlkYWU1ZGU2YmE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5oXFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmhcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2lmbmRlZiBfX0RBWF9CVVNfSF9fXFxuICNkZWZpbmUgX19EQVhfQlVTX0hfX1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuQEAgLTE2LDYgKzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xcbiAjZGVmaW5lIElPUkVTT1VSQ0VfREFYX1NUQVRJQyBCSVQoMClcXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxcbiBcXG4rLypcXG4rICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcXG4rICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXFxuKyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuXFxuKyAqL1xcbisjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFxcdCgtMSlcXG4rXFxuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcXG4gXFx0XFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbkBAIC0yNiw2ICszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEge1xcbiBcXHRyZXNvdXJjZV9zaXplX3Qgc2l6ZTtcXG4gXFx0aW50IGlkO1xcbiBcXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XFxuK1xcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXFxuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXFxuKysrIGIvZHJpdmVycy9kYXgvY3hsLmNcXG5AQCAtMjcsNiArMjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmFuZ2VfbGVuKFxcdTAwMjZjeGxyX2RheC1cXHUwMDNlaHBhX3JhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSB0cnVlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uY2NkNzc5NjVmZTNlZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiBcXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cXG4gc3RydWN0IGRheF9kZXZpY2U7XFxuQEAgLTc5LDYgKzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xcbiAgKiBAZGV2OiBkZXZpY2UgY29yZVxcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XFxuKyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXFxuKyAqXFx0XFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcXG4gICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkXFxuICAqL1xcbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcXG4gXFx0c3RydWN0IGRldmljZSBkZXY7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xcbiBcXHRpbnQgbnJfcmFuZ2U7XFxuIFxcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcXG5pbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcXG4rKysgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbkBAIC0zNyw2ICszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFxcdTAwMjZtcmktXFx1MDAzZXJhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcXG4rXFx0XFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFxcdTAwMjZkYXRhKSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2ttZW0uYyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9rbWVtLmNcXG4rKysgYi9kcml2ZXJzL2RheC9rbWVtLmNcXG5AQCAtMzMsOSArMzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxcbiBcXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZXJhbmdlc1tpXTtcXG4gXFx0c3RydWN0IHJhbmdlICpyYW5nZSA9IFxcdTAwMjZkYXhfcmFuZ2UtXFx1MDAzZXJhbmdlO1xcbiBcXG4tXFx0LyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovXFxuLVxcdHItXFx1MDAzZXN0YXJ0ID0gQUxJR04ocmFuZ2UtXFx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4tXFx0ci1cXHUwMDNlZW5kID0gQUxJR05fRE9XTihyYW5nZS1cXHUwMDNlZW5kICsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgLSAxO1xcbitcXHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcXG4gXFx0aWYgKHItXFx1MDAzZXN0YXJ0IFxcdTAwM2U9IHItXFx1MDAzZWVuZCkge1xcbiBcXHRcXHRyLVxcdTAwM2VzdGFydCA9IHJhbmdlLVxcdTAwM2VzdGFydDtcXG4gXFx0XFx0ci1cXHUwMDNlZW5kID0gcmFuZ2UtXFx1MDAzZWVuZDtcXG5AQCAtNDQsOSArNDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VEXFx0KC0xKVxcbitcXG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xcbiBcXHRjb25zdCBjaGFyICpyZXNfbmFtZTtcXG4gXFx0aW50IG1naWQ7XFxuK1xcdGludCBudW1hX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xcbitcXHRpbnQgc3RhdGU7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovXFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzW107XFxuIH07XFxuIFxcbkBAIC02NSwxNSArNjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxcbiBcXHRtdF9wdXRfbWVtb3J5X3R5cGVzKFxcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XFxuIH1cXG4gXFxuKy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xcbitzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxcbitcXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfS0VSTkVMIHx8XFxuK1xcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9NT1ZBQkxFO1xcbit9XFxuK1xcbisvKipcXG4rICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xcbisgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3NcXG4rICpcXG4rICogSG90cGx1Z3MgYWxsIHJhbmdlcyBpbiB0aGUgZGV2X2RheCByZWdpb24gYXMgc3lzdGVtIG1lbW9yeSB3aXRoIHRoZVxcbisgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgaW50IG9ubGluZV90eXBlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdGludCBpLCByYywgYWRkZWQgPSAwO1xcbitcXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcbitcXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAob25saW5lX3R5cGUgXFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4rXFxuK1xcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4rXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuK1xcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYydkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcXG4rXFx0XFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdG9ubGluZV90eXBlKTtcXG4rXFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG9cXG4rXFx0XFx0XFx0ICogYWRkIHNvIGEgbGF0ZXIgaG90cmVtb3ZlIGRvZXMgbm90IHRyeSB0byByZW1vdmUgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIHRoYXQgd2FzIG5ldmVyIGFkZGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXJlc1tpXSkge1xcbitcXHRcXHRcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoYWRkZWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YWRkZWQrKztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGFkZGVkO1xcbit9XFxuK1xcbisvKipcXG4rICogZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMgLSBjcmVhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGRheCBrbWVtXFxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcXG4rICpcXG4rICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVhcXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdGludCBpLCByYywgbWFwcGVkID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuK1xcbitcXHRcXHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFxcdTAwMjZyYW5nZSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXFxuK1xcdFxcdGlmIChkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4rXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSxcXG4rXFx0XFx0XFx0XFx0XFx0IGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG4rXFx0XFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XFxuK1xcdFxcdFxcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChtYXBwZWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcXG4rXFx0XFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XFxuK1xcdFxcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXFxuK1xcdFxcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlcy1cXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XFxuK1xcdFxcdG1hcHBlZCsrO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXBwZWQ7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbisvKipcXG4rICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb25cXG4rICogYXRvbWljYWxseTogZWl0aGVyIGFsbCByYW5nZXMgYXJlIG9mZmxpbmVkIGFuZCByZW1vdmVkLCBvciBub25lIGFyZSBhbmRcXG4rICogdGhlIGRldmljZSBpcyByZXR1cm5lZCB0byBpdHMgcHJpb3Igc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xcbitcXHRpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7XFxuK1xcbitcXHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHQvKiBDb2xsZWN0IHRoZSByYW5nZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IGFkZGVkIGR1cmluZyBwcm9iZS4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbitcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJhbmdlc1tucl9yYW5nZXMrK10gPSByYW5nZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogTm90aGluZyBhZGRlZCBtZWFucyBub3RoaW5nIHRvIHJlbW92ZS4gKi9cXG4rXFx0aWYgKCFucl9yYW5nZXMpIHtcXG4rXFx0XFx0a2ZyZWUocmFuZ2VzKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xcbitcXHRrZnJlZShyYW5nZXMpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbitcXG4rLyoqXFxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXFxuK1xcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxcbitcXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTigoKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAoZGF0YS1cXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXFxuK1xcdFxcdCBcXFwiSG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXG4rXFx0LyogXFxcInVucGx1Z2dlZFxcXCIgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xcbitcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcXFwidW5wbHVnZ2VkXFxcIikpXFxuK1xcdFxcdHJldHVybiBEQVhfS01FTV9VTlBMVUdHRUQ7XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xcbitcXHQvKiBEaXNhbGxvdyBcXFwib2ZmbGluZVxcXCI6IGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi9cXG4rXFx0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcXG4rXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXFxuK1xcdFxcdHN0YXRlX3N0ciA9IFxcXCJ1bnBsdWdnZWRcXFwiO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHN0YXRlX3N0ciA/OiBcXFwidW5rbm93blxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcXG4rXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIG9ubGluZV90eXBlO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cXG4rXFx0aWYgKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0ZGF0YS1cXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbitcXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7XFxuIFxcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcXG4tXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbi1cXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcdGludCBpLCByYztcXG4gXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbiBcXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzMyw2OCArNDQ1LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWdfbWdpZDtcXG4gXFx0ZGF0YS1cXHUwMDNlbWdpZCA9IHJjO1xcbitcXHRkYXRhLVxcdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XFxuK1xcdGRhdGEtXFx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xcbitcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4tXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbi1cXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4tXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRpZiAoIXJlcykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxcbi1cXHRcXHRcXHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAobWFwcGVkKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXFxuLVxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbi1cXHRcXHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xcbi1cXHRcXHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXMtXFx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4gXFxuLVxcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4tXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuLVxcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzb3VyY2VzO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbi1cXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbi1cXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xcbitcXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cXG4rXFx0b25saW5lX3R5cGUgPSBkZXZfZGF4LVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4rXFx0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcXG4rXFx0XFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4gXFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4tXFx0XFx0XFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XFxuLVxcdFxcdFxcdGtmcmVlKHJlcyk7XFxuLVxcdFxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdGlmIChtYXBwZWQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXBwZWQrKztcXG4tXFx0fVxcbitcXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuK1xcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2hvdHBsdWc7XFxuK1xcdGRhdGEtXFx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XFxuIFxcbi1cXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4rXFx0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc3RhdGUgc3lzZnMgZW50cnlcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVxdWVzdF9tZW06XFxuK2Vycl9ob3RwbHVnOlxcbitcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rZXJyX3Jlc291cmNlczpcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuIFxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbiBlcnJfcmVnX21naWQ6XFxuIFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG5AQCAtMjA4LDYzICs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiB7XFxuLVxcdGludCBpLCBzdWNjZXNzID0gMDtcXG4gXFx0aW50IG5vZGUgPSBkZXZfZGF4LVxcdTAwM2V0YXJnZXRfbm9kZTtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFxuK1xcdGRldmljZV9yZW1vdmVfZmlsZShkZXYsIFxcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XFxuIFxcdC8qXFxuLVxcdCAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90XFxuLVxcdCAqIG9mZmxpbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHJlbW92ZV9tZW1vcnkoKSB3aWxsIGZhaWwsIGFuZFxcbi1cXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxcbi1cXHQgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuXFxuK1xcdCAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW5cXG4rXFx0ICogZGVhZGxvY2sgYSB0YXNrIGFzIHVuYmluZCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQpLiAgVW5mb3J0dW5hdGVseSB3ZVxcbitcXHQgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbFxcbitcXHQgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uXFxuK1xcdCAqXFxuK1xcdCAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuXFxuIFxcdCAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuLVxcdFxcdGludCByYztcXG4tXFxuLVxcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdC8qIHJhbmdlIHdhcyBuZXZlciBhZGRlZCBkdXJpbmcgcHJvYmUgKi9cXG4tXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pIHtcXG4tXFx0XFx0XFx0c3VjY2VzcysrO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSk7XFxuLVxcdFxcdGlmIChyYyA9PSAwKSB7XFxuLVxcdFxcdFxcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbi1cXHRcXHRcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbi1cXHRcXHRcXHRkYXRhLVxcdTAwM2VyZXNbaV0gPSBOVUxMO1xcbi1cXHRcXHRcXHRzdWNjZXNzKys7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkhvdHBsdWcgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG4gXFx0XFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xcbi1cXHRcXHRkZXZfZXJyKGRldixcXG4tXFx0XFx0XFx0XFxcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9IGVsc2UgaWYgKGRhdGEtXFx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3VjY2VzcyBcXHUwMDNlPSBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZSkge1xcbi1cXHRcXHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVxcdTAwM2VtZ2lkKTtcXG4tXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRrZnJlZShkYXRhKTtcXG4tXFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxcbi1cXHRcXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxcbi1cXHRcXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXFxuLVxcdFxcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcXG4tXFx0XFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XFxuLVxcdH1cXG4rXFx0ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XFxuK1xcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbitcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNfbmFtZSk7XFxuK1xcdGtmcmVlKGRhdGEpO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXFxuK1xcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXFxuK1xcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcXG4rXFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxcbitcXHQgKiB0aWxsIG5leHQgcmVib290LlxcbitcXHQgKi9cXG4rXFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcXG4gfVxcbiAjZWxzZVxcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogV2l0aG91dCBob3RyZW1vdmUgcHVycG9zZWx5IGxlYWsgdGhlIHJlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciB0aGVcXG4gXFx0ICogZGV2aWNlLWRheCByYW5nZSBhbmQgcmV0dXJuICcwJyB0byAtXFx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcXG5pbmRleCBiZWU5MzA2NmE4NDk3Ny4uZTdhZGFjZTY5MTk1MDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXFxuKysrIGIvZHJpdmVycy9kYXgvcG1lbS5jXFxuQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LnBnbWFwID0gXFx1MDAyNnBnbWFwLFxcbiBcXHRcXHQuc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLFxcbiBcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcXHUwMDI2ZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjlmNWVmMDMwOWY3NzM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmdlLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAgICAgKDFVTCBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcXG4gXFxuQEAgLTEwMCw2ICsxMDEsMjcgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XFxuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXModm9pZCk7XFxuIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcXG4gXFxuKy8qKlxcbisgKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXFxuKyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXFxuKyAqXFxuKyAqIEFsaWducyB0aGUgc3RhcnQgYWRkcmVzcyB1cCBhbmQgdGhlIGVuZCBhZGRyZXNzIGRvd24gdG8gbWVtb3J5IGJsb2NrXFxuKyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxcbisgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcXG4rICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXFx1MDAzYyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcXG4rXFxuK1xcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xcbitcXHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZWVuZCArIDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcXG4rXFxuK1xcdHJldHVybiBhbGlnbmVkO1xcbit9XFxuK1xcbiBzdHJ1Y3QgbWVtb3J5X25vdGlmeSB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG5pbmRleCA3YzlkNjY3MjljNjA5NS4uNDZjNzk2NTcwNjkyNmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXFxuQEAgLTEyNyw2ICsxMjcsNyBAQCBleHRlcm4gaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTtcXG4gXFxuIGV4dGVybiBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cik7XFxuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcXG4gXFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cXG4gZXh0ZXJuIGJvb2wgbW92YWJsZV9ub2RlX2VuYWJsZWQ7XFxuQEAgLTI2Nyw2ICsyNjgsNyBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuIGV4dGVybiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuK2ludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XFxuIFxcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fVxcbkBAIC0yODMsNiArMjg1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBucl9yYW5nZXMpXFxuK3tcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5AQCAtMjk0LDYgKzMwMiw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSxcXG4gXFx0XFx0XFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpO1xcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuQEAgLTMxNiw2ICszMjcsOCBAQCBleHRlcm4gc3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsXFxuIGV4dGVybiBpbnQgYXJjaF9jcmVhdGVfbGluZWFyX21hcHBpbmcoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XFxuIHZvaWQgYXJjaF9yZW1vdmVfbGluZWFyX21hcHBpbmcodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbkBAIC0yMzksNiArMjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxcbiBcXG4gXFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XFxuIFxcbiB2b2lkIG1ocF9zZXRfZGVmYXVsdF9vbmxpbmVfdHlwZShlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG5AQCAtMTMzNyw3ICsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbiBcXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxcbiB7XFxuLVxcdG1lbS1cXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4rXFx0ZW51bSBtbW9wICpvbmxpbmVfdHlwZSA9IGFyZztcXG4rXFxuK1xcdG1lbS1cXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XFxuIFxcdHJldHVybiBkZXZpY2Vfb25saW5lKFxcdTAwMjZtZW0tXFx1MDAzZWRldik7XFxuIH1cXG4gXFxuQEAgLTE0OTEsNyArMTQ5NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuICAqXFxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG4gICovXFxuLWludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcXG4gXFx0ZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7XFxuQEAgLTE1ODEsOCArMTU4NSw5IEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIFxcdFxcdG1lcmdlX3N5c3RlbV9yYW1fcmVzb3VyY2UocmVzKTtcXG4gXFxuIFxcdC8qIG9ubGluZSBwYWdlcyBpZiByZXF1ZXN0ZWQgKi9cXG4tXFx0aWYgKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpICE9IE1NT1BfT0ZGTElORSlcXG4tXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBOVUxMLCBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0aWYgKG9ubGluZV90eXBlICE9IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcXHUwMDI2b25saW5lX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gZXJyb3I6XFxuQEAgLTE1OTgsNyArMTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxuK2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4rfVxcbitcXG4rLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbkBAIC0xNjI2LDcgKzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xcbiBcXG4tLypcXG4rLyoqXFxuKyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxcbisgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcXG4rICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCJcXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcXG4rICogQG9ubGluZV90eXBlOiBBdXRvLU9ubGluZSBiZWhhdmlvciAob2ZmbGluZSwgb25saW5lLCBrZXJuZWwsIG1vdmFibGUpXFxuKyAqXFxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXFxuICAqIG1lbW9yeSBpcyBub3QgZXhwb3NlZCB2aWEgdGhlIHJhdyBmaXJtd2FyZS1wcm92aWRlZCBtZW1tYXAgYXMgc3lzdGVtXFxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcXG5AQCAtMTYzNCw2ICsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuICAqXFxuICAqIFJlYXNvbnMgd2h5IHRoaXMgbWVtb3J5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgdGhlIGluaXRpYWwgbWVtbWFwIG9mIGFcXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcXG4rICpcXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXFxuICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pXFxuICAqIC0gQ29vcmRpbmF0aW9uIHdpdGggYSBoeXBlcnZpc29yIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIG1lbW9yeVxcbkBAIC0xNjQ2LDkgKzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuICAqXFxuICAqIFRoZSByZXNvdXJjZV9uYW1lICh2aXNpYmxlIHZpYSAvcHJvYy9pb21lbSkgaGFzIHRvIGhhdmUgdGhlIGZvcm1hdFxcbiAgKiBcXFwiU3lzdGVtIFJBTSAoJERSSVZFUilcXFwiLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4taW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4tXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbitpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuK1xcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4rXFx0XFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxcbiB7XFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbiBcXHRpbnQgcmM7XFxuQEAgLTE2NTgsNiArMTY4MSw5IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICcpJylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAob25saW5lX3R5cGUgXFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcXG4gXFxuIFxcdHJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7XFxuQEAgLTE2NjYsNyArMTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmMgPSBhZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MpO1xcbitcXHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XFxuIFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XFxuIFxcbkBAIC0xNjc0LDYgKzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXFxcImttZW1cXFwiKTtcXG4rXFxuKy8qKlxcbisgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxcbisgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcXG4rICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCJcXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcXG4rICpcXG4rICogQWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIHRoZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgdHlwZSBzZXQgYnlcXG4rICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci5cXG4rICpcXG4rICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcXG4rXFx0XFx0XFx0bWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XFxuIFxcbiAvKlxcbkBAIC0yMzc5LDU4ICsyNDI5LDk4IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG4gICovXFxuIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYl9jb3VudCA9IHNpemUgLyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbitcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7IC5zdGFydCA9IHN0YXJ0LCAuZW5kID0gc3RhcnQgKyBzaXplIC0gMSB9O1xcbitcXG4rXFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK1xcbisvKipcXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcXG4rICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xcbisgKlxcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxcbisgKlxcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxcbisgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cXG4rICpcXG4rICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcXG4rICogYmVlbiByZW1vdmVkLlxcbisgKi9cXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWJfdG90YWwgPSAwO1xcbiBcXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XFxuLVxcdGludCByYztcXG4rXFx0aW50IGksIHJjID0gMDtcXG4gXFxuLVxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4tXFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRpZiAoIXJhbmdlcyB8fCBucl9yYW5nZXMgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0dTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0O1xcbitcXHRcXHR1NjQgc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0bWJfdG90YWwgKz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFdlJ2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhblxcbi1cXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXFxuLVxcdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXFxuK1xcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxcbitcXHQgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnRcXG4rXFx0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxcbiBcXHQgKi9cXG4tXFx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxcbitcXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX3RvdGFsLCBzaXplb2YoKm9ubGluZV90eXBlcyksXFxuIFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghb25saW5lX3R5cGVzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0LypcXG4tXFx0ICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluXFxuLVxcdCAqIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jaygpLCB3ZSdsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW5cXG4tXFx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxcbi1cXHQgKi9cXG4tXFx0bWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7XFxuK1xcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpO1xcbiBcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4rXFx0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cXG4gXFx0dG1wID0gb25saW5lX3R5cGVzO1xcbi1cXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuK1xcdFxcdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJbiBjYXNlIHdlIHN1Y2NlZWRlZCB0byBvZmZsaW5lIGFsbCBtZW1vcnksIHJlbW92ZSBpdC5cXG4tXFx0ICogVGhpcyBjYW5ub3QgZmFpbCBhcyBpdCBjYW5ub3QgZ2V0IG9ubGluZWQgaW4gdGhlIG1lYW50aW1lLlxcbitcXHQgKiBQaGFzZSAyOiBSZW1vdmUgZWFjaCByYW5nZS4gVGhpcyBlc3NlbnRpYWxseSBjYW5ub3QgZmFpbCBhcyB3ZSBob2xkXFxuK1xcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cXG4gXFx0ICovXFxuIFxcdGlmICghcmMpIHtcXG4tXFx0XFx0cmMgPSB0cnlfcmVtb3ZlX21lbW9yeShzdGFydCwgc2l6ZSk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkocmFuZ2VzW2ldLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pKTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyYykpIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fZnVuY19fLCByYyk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogUm9sbGJhY2sgd2hhdCB3ZSBkaWQuIFdoaWxlIG1lbW9yeSBvbmxpbmluZyBtaWdodCB0aGVvcmV0aWNhbGx5IGZhaWxcXG4tXFx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cXG4tXFx0ICovXFxuK1xcdC8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi9cXG4gXFx0aWYgKHJjKSB7XFxuIFxcdFxcdHRtcCA9IG9ubGluZV90eXBlcztcXG4tXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcXHUwMDI2dG1wLFxcbi1cXHRcXHRcXHRcXHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKVxcbitcXHRcXHRcXHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICByYW5nZV9sZW4oXFx1MDAyNnJhbmdlc1tpXSksIFxcdTAwMjZ0bXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xcbiBcXHR9XFxuIFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4gXFx0a2ZyZWUob25saW5lX3R5cGVzKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xcbitFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuaW5kZXggNmU1OWI4ZjYzZTQxNjMuLjhjMmI0Zjk3NjE5Y2VjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5AQCAtMTQsNiArMTQsNyBAQCBUQVJHRVRTICs9IGNvcmVcXG4gVEFSR0VUUyArPSBjcHVmcmVxXFxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcXG4gVEFSR0VUUyArPSBkYW1vblxcbitUQVJHRVRTICs9IGRheFxcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xcbiBUQVJHRVRTICs9IGRldmljZXMvcHJvYmVcXG4gVEFSR0VUUyArPSBkbWFidWYtaGVhcHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVhNGYzZDczYTViYWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXFxuQEAgLTAsMCArMSw2IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rYWxsOlxcbitcXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXFxuK1xcbitpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcXG5AQCAtMCwwICsxLDQgQEBcXG4rQ09ORklHX0RFVl9EQVg9bVxcbitDT05GSUdfREVWX0RBWF9LTUVNPW1cXG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcXG5AQCAtMCwwICsxLDIwNyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gXFxcInN0YXRlXFxcIiBzeXNmcyBhdHRyaWJ1dGU6XFxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cXHUwMDNlICB1bnBsdWdnZWQgfCBvbmxpbmUgfCBvbmxpbmVfbW92YWJsZVxcbisjXFxuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxcbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cXG4rI1xcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxcbisjICAgbWVtbWFwPTJHITRHXFxuKyNcXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcXG4rI1xcbisjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mXFxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxcbitcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXFxuK0RJUj1cXFwiJChkaXJuYW1lIFxcXCIkKHJlYWRsaW5rIC1mIFxcXCIkMFxcXCIpXFxcIilcXFwiXFxuKy4gXFxcIiRESVJcXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzXFxuK1xcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxcbitnZXRfc3RhdGUoKSB7IGNhdCBcXFwiJEhQXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgfVxcbisjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlXFxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXFxuK3NldF9zdGF0ZSgpIHsgZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiRIUFxcXCIgMlxcdTAwM2UvZGV2L251bGw7IH1cXG4rXFxuK2ZpbmRfa21lbV9kYXgoKSB7XFxuK1xcdGxvY2FsIGQgZHJ2XFxuK1xcdGZvciBkIGluIFxcXCIkREFYX0JBU0VcXFwiL2RheCo7IGRvXFxuK1xcdFxcdFsgLWUgXFxcIiRkL3N0YXRlXFxcIiBdIHx8IGNvbnRpbnVlXFxuK1xcdFxcdGRydj0kKHJlYWRsaW5rIFxcXCIkZC9kcml2ZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRcXHRbIFxcXCIkKGJhc2VuYW1lIFxcXCIke2RydjotfVxcXCIpXFxcIiA9IGttZW0gXSB8fCBjb250aW51ZVxcbitcXHRcXHRiYXNlbmFtZSBcXFwiJGRcXFwiXFxuK1xcdFxcdHJldHVybiAwXFxuK1xcdGRvbmVcXG4rXFx0cmV0dXJuIDFcXG4rfVxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4rXFxuK2lmIFsgXFxcIiRVSURcXFwiICE9IDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4rREFYPSQoZmluZF9rbWVtX2RheClcXG4raWYgWyAteiBcXFwiJERBWFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rSFA9JERBWF9CQVNFLyREQVgvc3RhdGVcXG4rT1JJRz0kKGdldF9zdGF0ZSlcXG4rXFxuKyMgQSBmYWlsdXJlIHRvIHJlYWNoIHRoZSBiYXNlbGluZSBpcyBlbnZpcm9ubWVudGFsIChtZW1vcnkgaW4gdXNlKSwgbm90IGFuXFxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gfHwgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkREFYOiBjYW5ub3QgcmVhY2ggJ3VucGx1Z2dlZCcgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVxcXCJcXG4rXFx0WyAtbiBcXFwiJE9SSUdcXFwiIF0gXFx1MDAyNlxcdTAwMjYgc2V0X3N0YXRlIFxcXCIkT1JJR1xcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXFxuK1xcbitEUlY9L3N5cy9idXMvZGF4L2RyaXZlcnMva21lbVxcbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXFxuK1xcbitrdGFwX3ByaW50X21zZyBcXFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVxcXCJcXG4ra3RhcF9zZXRfcGxhbiAxMVxcbitcXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cXG4rbXRfb25saW5lPSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZSBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdF9vbmxpbmVcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lOiBzdGF0ZT1vbmxpbmUsIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZSBrQlxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSBvbmxpbmU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZSBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgaWRlbXBvdGVudFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcXFwiXFxuK2ZpXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgIT0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBvbmxpbmUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IG9ubGluZV9tb3ZhYmxlIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJvbmxpbmUtXFx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IHVucGx1Z2dlZCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdFxcXCIgLWx0IFxcXCIkbXRfb25saW5lXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLVxcdTAwM2UgJG10IGtCXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXFx1MDAzZSAkbXRcXFwiXFxuK2ZpXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK210X21vdmFibGU9JChtZW10b3RhbF9rYilcXG4raWYgWyBcXFwiJHJjXFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfbW92YWJsZVxcXCIgLWd0IFxcXCIkbXRfdW5wbHVnZ2VkXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmVfbW92YWJsZSBhZnRlciB1bnBsdWc6IE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X21vdmFibGUga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZVxcXCJcXG4rZmlcXG4rXFxuKyMgVGhlIG9ubGluZSAtXFx1MDAzZSB1bnBsdWcgLVxcdTAwM2Ugb25saW5lX21vdmFibGUgLVxcdTAwM2UgdW5wbHVnIGN5Y2xlIG9uY2UgcmVncmVzc2VkOlxcbisjIGEgcmUtb25saW5lIGZhaWxlZCB0byByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyB0aGUgZmluYWwgdW5wbHVnXFxuKyMgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZSBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGl0IGlzIHJlYWxseSBmcmVlZC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4rbXQ9JChtZW10b3RhbF9rYilcXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3NraXAgXFxcInVucGx1ZyBmcm9tIG1vdmFibGUgbm90IGFjY2VwdGVkIChtZW1vcnkgaW4gdXNlPykgcmM9JHJjXFxcIlxcbitlbGlmIFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSB1bnBsdWdnZWQgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRcXFwiIC1sdCBcXFwiJG10X21vdmFibGVcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlIHJlbW92ZWQgbWVtb3J5OiAkbXRfbW92YWJsZSAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInVucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLVxcdTAwM2UgJG10XFxcIlxcbitmaVxcbitcXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZV9rZXJuZWwgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9rZXJuZWw6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWw9JG10XFxcIlxcbitmaVxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK1xcbitiZWZvcmU9JChnZXRfc3RhdGUpXFxuK3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IFxcXCIkYmVmb3JlXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcImludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXFxcIlxcbitmaVxcbitcXG4rIyBSdW4gc2V2ZXJhbCBvbmxpbmUvdW5wbHVnIGN5Y2xlcyBhbmQgcmVxdWlyZSB0aGF0IGVhY2ggb25lIGFkZHMvcmVtb3ZlcyBtZW1vcnlcXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxcbitjeWNsZV9vaz0xOyBmYWlsX2k9MFxcbitmb3IgaSBpbiAxIDIgMzsgZG9cXG4rXFx0aWYgISBzZXRfc3RhdGUgb25saW5lOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXFxuK1xcdG9uPSQobWVtdG90YWxfa2IpXFxuK1xcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxcbitcXHRvZmY9JChtZW10b3RhbF9rYilcXG4rXFx0aWYgWyBcXFwiJG9uXFxcIiAtbGUgXFxcIiRtdF91bnBsdWdnZWRcXFwiIF0gfHwgWyBcXFwiJG9mZlxcXCIgLWdlIFxcXCIkb25cXFwiIF07IHRoZW5cXG4rXFx0XFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xcbitcXHRmaVxcbitkb25lXFxuK2lmIFsgXFxcIiRjeWNsZV9va1xcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm9ubGluZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogbWVtb3J5IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXFxcIlxcbitmaVxcbitcXG4rIyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XFxuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK2lmIFsgLXcgXFxcIiRBT0JcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi9iaW5kXFxcIiBdOyB0aGVuXFxuK1xcdG9yaWdfYW9iPSQoY2F0IFxcXCIkQU9CXFxcIilcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gb2ZmbGluZSBcXHUwMDNlIFxcXCIkQU9CXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkREFYXFxcIiBcXHUwMDNlIFxcXCIkRFJWL2JpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHNsZWVwIDFcXG4rXFx0c3Q9JChnZXRfc3RhdGUpXFxuK1xcdGVjaG8gXFxcIiRvcmlnX2FvYlxcXCIgXFx1MDAzZSBcXFwiJEFPQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlc3RvcmUgc3lzdGVtIHBvbGljeVxcbitcXHRpZiBbIFxcXCIkc3RcXFwiID0gb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cXHUwMDNlIHN0YXRlPW9mZmxpbmVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcImJpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSlcXFwiXFxuK1xcdGZpXFxuK1xcdHNldF9zdGF0ZSB1bnBsdWdnZWQgMlxcdTAwM2UvZGV2L251bGxcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiYXV0b19vbmxpbmVfYmxvY2tzIG9yIGRyaXZlciBiaW5kL3VuYmluZCBub3Qgd3JpdGFibGVcXFwiXFxuK2ZpXFxuK1xcbitbIC1uIFxcXCIkT1JJR1xcXCIgXSBcXHUwMDI2XFx1MDAyNiBzZXRfc3RhdGUgXFxcIiRPUklHXFxcIlxcbitcXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xcbisjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XFxuKyMgd2l0aCBhIHNpbmdsZSBcXFwic3VjayBvbmxpbmVcXFwiIHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGVcXG4rIyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZVxcbitpZiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF07IHRoZW5cXG4rXFx0bXRfb249JChtZW10b3RhbF9rYilcXG4rXFx0ZG1lc2cgLUMgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXFxuK1xcdCMgVGhlIGxlYWtlZCBcXFwiU3lzdGVtIFJBTSAoa21lbSlcXFwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xcbitcXHQjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC5cXG4rXFx0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cXG4rXFx0Y2F0IC9wcm9jL2lvbWVtIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c3BsYXQ9JChkbWVzZyAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcXFwiS0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XFxcIilcXG4rXFx0aWYgWyBcXFwiJHNwbGF0XFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfYWZ0ZXJcXFwiIC1nZSBcXFwiJG10X29uXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCKVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwidW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9za2lwIFxcXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9OTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTg6NDUuOTU5OTQzMDQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NzAwNTk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2luaXRfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9kb19ob3RyZW1vdmVcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwiZGV2X2RheF9rbWVtX3Byb2JlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcmVtb3ZlXCIsXG4gICAgXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIixcbiAgICBcIm9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGU0MzE4YzUxNTBkMTdhMjcwZmZkODY2ODZjNWUwY2Q1Nzc1ODdlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE1OjE4OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuQEAgLTE1MSwzICsxNTEsMjkgQEAgRGVzY3JpcHRpb246XG4gXHRcdG1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpc1xuIFx0XHR0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC1cbiBcdFx0bWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJ3RydWUnIG9yICdmb3JjZScuXCJcbitcbitXaGF0Olx0XHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcbitEYXRlOlx0XHRKdW5lLCAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdHY2LjIxXG4rQ29udGFjdDpcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcbitEZXNjcmlwdGlvbjpcbitcdFx0KFJXKSBDb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeSByZWdpb24uXG4rXHRcdEFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuXG4rXHRcdE9ubHkgYXBwbGllcyB0byBkYXhfa21lbSBkZXZpY2VzLlxuK1xuK1x0XHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXG4rXHRcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxuK1xuK1x0XHQgIFwidW5wbHVnZ2VkXCI6IG1lbW9yeSBibG9ja3MgYXJlIG5vdCBwcmVzZW50XG4rXHRcdCAgXCJvbmxpbmVcIjogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbFxuK1x0XHQgIFwib25saW5lX2tlcm5lbFwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMXG4rXHRcdCAgXCJvbmxpbmVfbW92YWJsZVwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTU9WQUJMRVxuK1xuK1x0XHRcIm9mZmxpbmVcIiAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcbitcdFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxuK1x0XHRhdXRvX29ubGluZV9ibG9ja3MgcG9saWN5IGlzIFwib2ZmbGluZVwiLiAgSXQgY2Fubm90IGJlIHdyaXR0ZW4sXG4rXHRcdGFzIGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuXG4rXG4rXHRcdEEgZGV2aWNlIGNhbiBvbmx5IGJlIG9ubGluZWQgZnJvbSB0aGUgXCJ1bnBsdWdnZWRcIiBzdGF0ZSwgc28gYVxuK1x0XHRkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byBcInVucGx1Z2dlZFwiIGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZFxuK1x0XHRpbnRvIGEgZGlmZmVyZW50IHN0YXRlLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYjMxODM0NDQyNmZhYmMuLjNhMmY2OWQzYWY3YjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbkBAIC00Niw2ICs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xuK1xuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxuK3tcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgMCB8fCBvbmxpbmVfdHlwZSBcdTAwM2U9IChpbnQpQVJSQVlfU0laRShvbmxpbmVfdHlwZV90b19zdHIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbiBcbiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldilcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXG5pbmRleCA0OTI1NzNiNDdmNjYyNC4uNGEwM2IzMjNiMDAzN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xuKysrIGIvZHJpdmVycy9kYXgvYnVzLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuQEAgLTM5NCw2ICszOTUsNyBAQCBzdGF0aWMgc3NpemVfdCBjcmVhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQuc2l6ZSA9IDAsXG4gXHRcdFx0LmlkID0gLTEsXG4gXHRcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbitcdFx0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuIFxuQEAgLTE1MjcsNiArMTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpXG4gXHRpZGFfaW5pdChcdTAwMjZkZXZfZGF4LVx1MDAzZWlkYSk7XG4gXG4gXHRkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkgPSBkYXRhLVx1MDAzZW1lbW1hcF9vbl9tZW1vcnk7XG4rXHRkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cdTAwM2VvbmxpbmVfdHlwZTtcbiBcbiBcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xuIFx0ZGV2LVx1MDAzZWRldnQgPSBpbm9kZS1cdTAwM2VpX3JkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLmYzYzlkYWU1ZGU2YmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvYnVzLmhcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5oXG5AQCAtMyw2ICszLDcgQEBcbiAjaWZuZGVmIF9fREFYX0JVU19IX19cbiAjZGVmaW5lIF9fREFYX0JVU19IX19cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuQEAgLTE2LDYgKzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKVxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcbiBcbisvKlxuKyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lXG4rICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXG4rICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS5cbisgKi9cbisjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFx0KC0xKVxuK1xuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcbiBcdFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuQEAgLTI2LDYgKzM0LDcgQEAgc3RydWN0IGRldl9kYXhfZGF0YSB7XG4gXHRyZXNvdXJjZV9zaXplX3Qgc2l6ZTtcbiBcdGludCBpZDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcbiB9O1xuIFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmNcbmluZGV4IDNhYjM5Yjc3ODQzZDVlLi4xYTdlYzYyMTIyMTM0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXG4rKysgYi9kcml2ZXJzL2RheC9jeGwuY1xuQEAgLTI3LDYgKzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uY2NkNzc5NjVmZTNlZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4rKysgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiArODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbisgKiBAb25saW5lX3R5cGU6IE1NT1BfKiBvbmxpbmUgdHlwZSBmb3IgbWVtb3J5IGhvdHBsdWcsIG9yIERBWF9PTkxJTkVfREVGQVVMVFxuKyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcbiBcdGludCBucl9yYW5nZTtcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7XG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9obWVtL2htZW0uYyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG5pbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuKysrIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbkBAIC0zNyw2ICszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2ttZW0uYyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xuaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjM0MDQ4NjU4NmQ4MmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgva21lbS5jXG4rKysgYi9kcml2ZXJzL2RheC9rbWVtLmNcbkBAIC0zMyw5ICszMyw3IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXG4gXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VyYW5nZXNbaV07XG4gXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXHUwMDI2ZGF4X3JhbmdlLVx1MDAzZXJhbmdlO1xuIFxuLVx0LyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovXG4tXHRyLVx1MDAzZXN0YXJ0ID0gQUxJR04ocmFuZ2UtXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xuLVx0ci1cdTAwM2VlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWVuZCArIDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbitcdCpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpO1xuIFx0aWYgKHItXHUwMDNlc3RhcnQgXHUwMDNlPSByLVx1MDAzZWVuZCkge1xuIFx0XHRyLVx1MDAzZXN0YXJ0ID0gcmFuZ2UtXHUwMDNlc3RhcnQ7XG4gXHRcdHItXHUwMDNlZW5kID0gcmFuZ2UtXHUwMDNlZW5kO1xuQEAgLTQ0LDkgKzQyLDE1IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbitcbiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7XG4gXHRjb25zdCBjaGFyICpyZXNfbmFtZTtcbiBcdGludCBtZ2lkO1xuK1x0aW50IG51bWFfbm9kZTtcbitcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuK1x0aW50IHN0YXRlO1xuK1x0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi9cbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzW107XG4gfTtcbiBcbkBAIC02NSwxNSArNjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuKy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xuK3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXG4re1xuK1x0cmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8XG4rXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfS0VSTkVMIHx8XG4rXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbit9XG4rXG4rLyoqXG4rICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3NcbisgKlxuKyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbisgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS5cbisgKlxuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4rICovXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbitcdFx0XHQgICAgICAgaW50IG9ubGluZV90eXBlKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1x0aW50IGksIHJjLCBhZGRlZCA9IDA7XG4rXHRtaHBfdCBtaHBfZmxhZ3M7XG4rXG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlIFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4rXG4rXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcbitcdFx0aWYgKGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSlcbitcdFx0XHRtaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYydkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbitcdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbitcdFx0ICovXG4rXHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4rXHRcdFx0XHRyYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcbitcdFx0XHRcdG9ubGluZV90eXBlKTtcbitcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cIixcbitcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG9cbitcdFx0XHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcbitcdFx0XHQgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pIHtcbitcdFx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdFx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChhZGRlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHRhZGRlZCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGFkZGVkO1xuK31cbitcbisvKipcbisgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKlxuKyAqIEluaXRpYWxpemVzIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgREFYXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdGludCBpLCByYywgbWFwcGVkID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXG4rXHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cbitcdFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuK1x0XHRcdFx0XHQgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4rXHRcdGlmICghcmVzKSB7XG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCIsXG4rXHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJ3RcbitcdFx0XHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKG1hcHBlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4rXHRcdC8qXG4rXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG4rXHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuK1x0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuK1x0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4rXHRcdG1hcHBlZCsrO1xuK1x0fVxuK1x0cmV0dXJuIG1hcHBlZDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4rLyoqXG4rICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuKyAqXG4rICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxuKyAqIGF0b21pY2FsbHk6IGVpdGhlciBhbGwgcmFuZ2VzIGFyZSBvZmZsaW5lZCBhbmQgcmVtb3ZlZCwgb3Igbm9uZSBhcmUgYW5kXG4rICogdGhlIGRldmljZSBpcyByZXR1cm5lZCB0byBpdHMgcHJpb3Igc3RhdGUuXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJhbmdlICpyYW5nZXM7XG4rXHRpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7XG4rXG4rXHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhbmdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDb2xsZWN0IHRoZSByYW5nZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IGFkZGVkIGR1cmluZyBwcm9iZS4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4rXG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJhbmdlc1tucl9yYW5nZXMrK10gPSByYW5nZTtcbitcdH1cbitcbitcdC8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovXG4rXHRpZiAoIW5yX3Jhbmdlcykge1xuK1x0XHRrZnJlZShyYW5nZXMpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xuK1x0a2ZyZWUocmFuZ2VzKTtcbitcdGlmIChyYykge1xuK1x0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4rXHRcdGRldl9lcnIoZGV2LCBcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXG5cIiwgcmMpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuK1xuKy8qKlxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuKyAqXG4rICogUmVtb3ZlcyBhbGwgcmVzb3VyY2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgZGV2aWNlIHVuYmluZCBvY2N1cnMgYmVmb3JlIG1lbW9yeSBpcyBob3RyZW1vdmVkLCB3ZSBjYW4gbmV2ZXJcbitcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxuK1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbitcdCAqXG4rXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXG4rXHQgKi9cbitcdGlmIChXQVJOKCgoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgIChkYXRhLVx1MDAzZXN0YXRlICE9IE1NT1BfT0ZGTElORSkpLFxuK1x0XHQgXCJIb3RwbHVnIG1lbW9yeSByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXG4re1xuK1x0aW50IG9ubGluZV90eXBlO1xuK1xuK1x0LyogXCJ1bnBsdWdnZWRcIiBpcyBrbWVtLXNwZWNpZmljIC0gdGhlIHJlc3QgbWFwIHRvIE1NT1BfICovXG4rXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcInVucGx1Z2dlZFwiKSlcbitcdFx0cmV0dXJuIERBWF9LTUVNX1VOUExVR0dFRDtcbitcbitcdG9ubGluZV90eXBlID0gbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGJ1Zik7XG4rXHQvKiBEaXNhbGxvdyBcIm9mZmxpbmVcIjogaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIHJhY2UgY29uZGl0aW9ucyAqL1xuK1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gb25saW5lX3R5cGU7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4rXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXG4rXHRcdHN0YXRlX3N0ciA9IFwidW5wbHVnZ2VkXCI7XG4rXHRlbHNlXG4rXHRcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXNcXG5cIiwgc3RhdGVfc3RyID86IFwidW5rbm93blwiKTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcbitcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0cmV0dXJuIG9ubGluZV90eXBlO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmRhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuK1x0aWYgKGRhdGEtXHUwMDNlc3RhdGUgPT0gb25saW5lX3R5cGUpXG4rXHRcdHJldHVybiBsZW47XG4rXG4rXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XG4rXHRcdHJjID0gZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1x0XHRyZXR1cm4gbGVuO1xuK1x0fVxuK1xuK1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbitcdGlmIChkYXRhLVx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cbitcdHJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbitcdHJldHVybiBsZW47XG4rfVxuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7XG4rXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2xlbiA9IDAsIG9yaWdfbGVuID0gMDtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xuIFx0c3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbXR5cGU7XG4tXHRpbnQgaSwgcmMsIG1hcHBlZCA9IDA7XG4tXHRtaHBfdCBtaHBfZmxhZ3M7XG4rXHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuK1x0aW50IG9ubGluZV90eXBlO1xuIFx0aW50IGFkaXN0ID0gTUVNVElFUl9ERUZBVUxUX0RBWF9BRElTVEFOQ0U7XG4gXG4gXHQvKlxuQEAgLTEzMyw2OCArNDQ1LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWdfbWdpZDtcbiBcdGRhdGEtXHUwMDNlbWdpZCA9IHJjO1xuK1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4rXHRkYXRhLVx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xuK1x0ZGF0YS1cdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuLVx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbi1cdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiBSZWdpb24gaXMgcGVybWFuZW50bHkgcmVzZXJ2ZWQgaWYgaG90cmVtb3ZlIGZhaWxzLiAqL1xuLVx0XHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuLVx0XHRpZiAoIXJlcykge1xuLVx0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwiLFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxuLVx0XHRcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0cmMgPSAtRUJVU1k7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG4tXHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuLVx0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuLVx0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXG4tXHRcdCAqL1xuLVx0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbitcdHJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxuLVx0XHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxuLVx0XHQgKi9cbi1cdFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4tXHRcdFx0XHRyYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyk7XG4rXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cbitcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbitcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfT05MSU5FX0RFRkFVTFQpXG4rXHRcdG9ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7XG4gXG4tXHRcdGlmIChyYykge1xuLVx0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCIsXG4tXHRcdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuLVx0XHRcdHJlbW92ZV9yZXNvdXJjZShyZXMpO1xuLVx0XHRcdGtmcmVlKHJlcyk7XG4tXHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRtYXBwZWQrKztcbi1cdH1cbitcdC8qIEFsd2F5cyBjcmVhdGUgYmxvY2tzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBldmVuIGlmIG9mZmxpbmUgKi9cbitcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2hvdHBsdWc7XG4rXHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4gXG4tXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbitcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1x0aWYgKHJjKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwiKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9yZXF1ZXN0X21lbTpcbitlcnJfaG90cGx1ZzpcbitcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuK2Vycl9yZXNvdXJjZXM6XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbiBcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4gZXJyX3JlZ19tZ2lkOlxuIFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG5AQCAtMjA4LDYzICs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4gXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXG4rXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4gXHQvKlxuLVx0ICogV2UgaGF2ZSBvbmUgc2hvdCBmb3IgcmVtb3ZpbmcgbWVtb3J5LCBpZiBzb21lIG1lbW9yeSBibG9ja3Mgd2VyZSBub3Rcbi1cdCAqIG9mZmxpbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHJlbW92ZV9tZW1vcnkoKSB3aWxsIGZhaWwsIGFuZFxuLVx0ICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2Vcbi1cdCAqIHVuYmluZCB3aWxsIHN1Y2NlZWQgZXZlbiBpZiB3ZSByZXR1cm4gZmFpbHVyZS5cbitcdCAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW5cbitcdCAqIGRlYWRsb2NrIGEgdGFzayBhcyB1bmJpbmQgY2Fubm90IGJlIGludGVycnVwdGVkKS4gIFVuZm9ydHVuYXRlbHkgd2VcbitcdCAqIGhhdmUgdG8gbGVhayBhbGwgb2YgW3Jlc291cmNlcywgbWVtb3J5IGdyb3VwLCBAZGF0YSwgbWVtdHlwZV0sIHVudGlsXG4rXHQgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uXG4rXHQgKlxuK1x0ICogb2ZmbGluZSBibG9ja3MgYXJlIHJlbW92ZWQgb24gdW5iaW5kLCBidXQgbWF5IGxlYWsgb24gZmFpbHVyZS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4tXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbi1cdFx0aW50IHJjO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzKys7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKTtcbi1cdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0c3VjY2VzcysrO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKSB7XG4rXHRcdGRldl93YXJuKGRldiwgXCJIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwiKTtcbiBcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuLVx0XHRkZXZfZXJyKGRldixcbi1cdFx0XHRcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxuXCIsXG4tXHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0cmV0dXJuO1xuK1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbitcdCAgICBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSkpIHtcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAoc3VjY2VzcyBcdTAwM2U9IGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UpIHtcbi1cdFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbi1cdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGtmcmVlKGRhdGEpO1xuLVx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbi1cdFx0Lypcbi1cdFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4tXHRcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4tXHRcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbi1cdFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuLVx0XHQgKiB0aWxsIG5leHQgcmVib290LlxuLVx0XHQgKi9cbi1cdFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbi1cdH1cbitcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuK1x0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbitcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuK1x0a2ZyZWUoZGF0YSk7XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbitcdC8qXG4rXHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbitcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4rXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4rXHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4rXHQgKiB0aWxsIG5leHQgcmVib290LlxuK1x0ICovXG4rXHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXG4rXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4rXG4gXHQvKlxuIFx0ICogV2l0aG91dCBob3RyZW1vdmUgcHVycG9zZWx5IGxlYWsgdGhlIHJlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciB0aGVcbiBcdCAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAnMCcgdG8gLVx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L3BtZW0uYyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXG4rKysgYi9kcml2ZXJzL2RheC9wbWVtLmNcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kYXhfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5wZ21hcCA9IFx1MDAyNnBnbWFwLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjlmNWVmMDMwOWY3NzM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gXG4gI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgXHUwMDNjXHUwMDNjIFNFQ1RJT05fU0laRV9CSVRTKVxuIFxuQEAgLTEwMCw2ICsxMDEsMjcgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XG4gdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTtcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4gXG4rLyoqXG4rICogbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UgLSBhbGlnbiBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgdG8gbWVtb3J5IGJsb2Nrc1xuKyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXG4rICpcbisgKiBBbGlnbnMgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgYW5kIHRoZSBlbmQgYWRkcmVzcyBkb3duIHRvIG1lbW9yeSBibG9ja1xuKyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxuKyAqIG9wZXJhdGUgb24gbWVtb3J5LWJsb2NrIGFsaWduZWQgcmFuZ2VzLlxuKyAqXG4rICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcbisgKiByYW5nZSBpcyB2YWxpZCAoYWxpZ25lZC5zdGFydCBcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCByYW5nZSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCByYW5nZSBhbGlnbmVkO1xuK1xuK1x0YWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbitcdGFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XG4rXG4rXHRyZXR1cm4gYWxpZ25lZDtcbit9XG4rXG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiArMTI3LDcgQEAgZXh0ZXJuIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTtcbiBcbiBleHRlcm4gaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpO1xuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcbiBcbiAvKiBJZiBtb3ZhYmxlX25vZGUgYm9vdCBvcHRpb24gc3BlY2lmaWVkICovXG4gZXh0ZXJuIGJvb2wgbW92YWJsZV9ub2RlX2VuYWJsZWQ7XG5AQCAtMjY3LDYgKzI2OCw3IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbitpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsIGludCBucl9yYW5nZXMpO1xuIFxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZCkge31cbkBAIC0yODMsNiArMjg1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHRcdFx0XHRcdCAgIGludCBucl9yYW5nZXMpXG4re1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xuQEAgLTI5NCw2ICszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxuIFx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXG4gXHRcdFx0XHQgICAgIG1ocF90IG1ocF9mbGFncyk7XG5AQCAtMzE2LDYgKzMyNyw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcbiBleHRlcm4gaW50IGFyY2hfY3JlYXRlX2xpbmVhcl9tYXBwaW5nKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIGFyY2hfcmVtb3ZlX2xpbmVhcl9tYXBwaW5nKHU2NCBzdGFydCwgdTY0IHNpemUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0yMzksNiArMjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxuIFxuIFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUpO1xuIFxuIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcbiB7XG5AQCAtMTMzNyw3ICsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIFxuIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiB7XG4tXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbitcdGVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7XG4rXG4rXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XG4gXHRyZXR1cm4gZGV2aWNlX29ubGluZShcdTAwMjZtZW0tXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtMTQ5MSw3ICsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbiAgKlxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuK3N0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXG4rXHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG4gXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbkBAIC0xNTgxLDggKzE1ODUsOSBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0XHRtZXJnZV9zeXN0ZW1fcmFtX3Jlc291cmNlKHJlcyk7XG4gXG4gXHQvKiBvbmxpbmUgcGFnZXMgaWYgcmVxdWVzdGVkICovXG4tXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuK1x0aWYgKG9ubGluZV90eXBlICE9IE1NT1BfT0ZGTElORSlcbitcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZvbmxpbmVfdHlwZSxcbitcdFx0XHRcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbiBlcnJvcjpcbkBAIC0xNTk4LDcgKzE2MDMsMTMgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbitpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuK3tcbitcdHJldHVybiBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyxcbitcdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuK31cbitcbisvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbkBAIC0xNjI2LDcgKzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiBcbi0vKlxuKy8qKlxuKyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbisgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbisgKiBAb25saW5lX3R5cGU6IEF1dG8tT25saW5lIGJlaGF2aW9yIChvZmZsaW5lLCBvbmxpbmUsIGtlcm5lbCwgbW92YWJsZSlcbisgKlxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cbiAgKiBSQU0sIGluc3RlYWQsIGl0IGlzIGRldGVjdGVkIGFuZCBhZGRlZCBieSBhIGRyaXZlciAtIGR1cmluZyBjb2xkIGJvb3QsXG5AQCAtMTYzNCw2ICsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcbisgKlxuICAqIC0gVGhlIGJvb3Rpbmcga2VybmVsIGlzIGluIGNoYXJnZSBvZiBkZXRlcm1pbmluZyBob3cgdGhpcyBtZW1vcnkgd2lsbCBiZVxuICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pXG4gICogLSBDb29yZGluYXRpb24gd2l0aCBhIGh5cGVydmlzb3IgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgbWVtb3J5XG5AQCAtMTY0Niw5ICsxNjY2LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XG4gICogXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLVx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbitpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4rXHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0aW50IHJjO1xuQEAgLTE2NTgsNiArMTY4MSw5IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHQgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAnKScpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuIFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcbkBAIC0xNjY2LDcgKzE2OTIsNyBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XG4rXHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XG4gXG5AQCAtMTY3NCw2ICsxNzAwLDMwIEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcdHJldHVybiByYztcbiB9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFwia21lbVwiKTtcbitcbisvKipcbisgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbisgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbisgKlxuKyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5XG4rICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci5cbisgKlxuKyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxuK1x0XHRcdG1ocF9mbGFncyxcbitcdFx0XHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQpO1xuIFxuIC8qXG5AQCAtMjM3OSw1OCArMjQyOSw5OCBAQCBzdGF0aWMgaW50IHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG4gICovXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4rXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7IC5zdGFydCA9IHN0YXJ0LCAuZW5kID0gc3RhcnQgKyBzaXplIC0gMSB9O1xuK1xuK1x0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFx1MDAyNnJhbmdlLCAxKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4rXG4rLyoqXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xuKyAqIEByYW5nZXM6IGFycmF5IG9mIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzIHRvIG9mZmxpbmUgYW5kIHJlbW92ZVxuKyAqIEBucl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIEByYW5nZXNcbisgKlxuKyAqIE9mZmxpbmUgYW5kIHJlbW92ZSBzZXZlcmFsIG1lbW9yeSByYW5nZXMgYXMgb25lIG9wZXJhdGlvbiwgc2VyaWFsaXplZFxuKyAqIGFnYWluc3Qgb3RoZXIgaG90cGx1ZyBvcGVyYXRpb25zIGJ5IGEgc2luZ2xlIGxvY2tfZGV2aWNlX2hvdHBsdWcoKS5cbisgKlxuKyAqIFRoaXMgb2ZmbGluZXMgYWxsIHJhbmdlcyBiZWZvcmUgcmVtb3ZpbmcgYW55IG9mIHRoZW0uICBJZiBvZmZsaW5pbmcgYW55XG4rICogcmFuZ2UgZmFpbHMsIHRoZSBlbnRpcmUgcHJvY2VzcyBpcyByZXZlcnRlZCBhbmQgbm90aGluZyBpcyByZW1vdmVkLlxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cbisgKlxuKyAqIEVhY2ggcmFuZ2UgbXVzdCBiZSBtZW1vcnktYmxvY2sgYWxpZ25lZCBpbiBzdGFydCBhbmQgc2l6ZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuICBPbiBmYWlsdXJlIG5vIHJhbmdlIGhhc1xuKyAqIGJlZW4gcmVtb3ZlZC5cbisgKi9cbitpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsIGludCBucl9yYW5nZXMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7XG4gXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XG4tXHRpbnQgcmM7XG4rXHRpbnQgaSwgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0aWYgKCFyYW5nZXMgfHwgbnJfcmFuZ2VzIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHR1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4rXHRcdHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4rXG4rXHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbitcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRtYl90b3RhbCArPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdH1cbitcbiBcdC8qXG4tXHQgKiBXZSdsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4rXHQgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcyxcbitcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuK1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4tXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4rXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX3RvdGFsLCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJ2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4tXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbitcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpO1xuIFxuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuK1x0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cbiBcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhyYW5nZXNbaV0uc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pLFxuK1x0XHRcdFx0XHRcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRicmVhaztcbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBJbiBjYXNlIHdlIHN1Y2NlZWRlZCB0byBvZmZsaW5lIGFsbCBtZW1vcnksIHJlbW92ZSBpdC5cbi1cdCAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS5cbitcdCAqIFBoYXNlIDI6IFJlbW92ZSBlYWNoIHJhbmdlLiBUaGlzIGVzc2VudGlhbGx5IGNhbm5vdCBmYWlsIGFzIHdlIGhvbGRcbitcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cbiBcdCAqL1xuIFx0aWYgKCFyYykge1xuLVx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcIiVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWRcIiwgX19mdW5jX18sIHJjKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcbitcdFx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pKTtcbitcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHJjKSkge1xuK1x0XHRcdFx0cHJfZXJyKFwiJXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZFwiLFxuK1x0XHRcdFx0ICAgICAgIF9fZnVuY19fLCByYyk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuK1x0LyogT24gZmFpbDogcm9sbCBiYWNrLiBCbG9ja3MgdGhhdCB3ZXJlIGFscmVhZHkgb2ZmbGluZSBhcmUgc2tpcHBlZCAqL1xuIFx0aWYgKHJjKSB7XG4gXHRcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsXG4tXHRcdFx0XHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspXG4rXHRcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCxcbitcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbitcdFx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4gXHR9XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA2ZTU5YjhmNjNlNDE2My4uOGMyYjRmOTc2MTljZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxuIFRBUkdFVFMgKz0gY3B1ZnJlcVxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICs9IGRhbW9uXG4rVEFSR0VUUyArPSBkYXhcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxuIFRBUkdFVFMgKz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbithbGw6XG4rXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXG4rXG4raW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCArMSw0IEBAXG4rQ09ORklHX0RFVl9EQVg9bVxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxuK0NPTkZJR19NRU1PUllfSE9UUExVRz15XG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDIwNyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcInN0YXRlXCIgc3lzZnMgYXR0cmlidXRlOlxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9tb3ZhYmxlXG4rI1xuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxuKyMgSWYgbm8gc3VpdGFibGUgZGV2aWNlIGlzIGZvdW5kIHRoZSB0ZXN0cyBTS0lQLlxuKyNcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxuKyMgICBtZW1tYXA9MkchNEdcbisjXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcbisjXG4rIyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cbisjICAgLi9kYXgta21lbS1ob3RwbHVnLnNoXG4rXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXG4rRElSPVwiJChkaXJuYW1lIFwiJChyZWFkbGluayAtZiBcIiQwXCIpXCIpXCJcbisuIFwiJERJUlwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitcbitEQVhfQkFTRT0vc3lzL2J1cy9kYXgvZGV2aWNlc1xuK1xuK21lbXRvdGFsX2tiKCkgeyBhd2sgJy9eTWVtVG90YWw6LyB7cHJpbnQgJDJ9JyAvcHJvYy9tZW1pbmZvOyB9XG4rZ2V0X3N0YXRlKCkgeyBjYXQgXCIkSFBcIiAyXHUwMDNlL2Rldi9udWxsOyB9XG4rIyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXG4rc2V0X3N0YXRlKCkgeyBlY2hvIFwiJDFcIiBcdTAwM2UgXCIkSFBcIiAyXHUwMDNlL2Rldi9udWxsOyB9XG4rXG4rZmluZF9rbWVtX2RheCgpIHtcbitcdGxvY2FsIGQgZHJ2XG4rXHRmb3IgZCBpbiBcIiREQVhfQkFTRVwiL2RheCo7IGRvXG4rXHRcdFsgLWUgXCIkZC9zdGF0ZVwiIF0gfHwgY29udGludWVcbitcdFx0ZHJ2PSQocmVhZGxpbmsgXCIkZC9kcml2ZXJcIiAyXHUwMDNlL2Rldi9udWxsKVxuK1x0XHRbIFwiJChiYXNlbmFtZSBcIiR7ZHJ2Oi19XCIpXCIgPSBrbWVtIF0gfHwgY29udGludWVcbitcdFx0YmFzZW5hbWUgXCIkZFwiXG4rXHRcdHJldHVybiAwXG4rXHRkb25lXG4rXHRyZXR1cm4gMVxuK31cbitcbitrdGFwX3ByaW50X2hlYWRlclxuK1xuK2lmIFsgXCIkVUlEXCIgIT0gMCBdOyB0aGVuXG4rXHRrdGFwX3NraXBfYWxsIFwibXVzdCBiZSBydW4gYXMgcm9vdFwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rZmlcbitcbitEQVg9JChmaW5kX2ttZW1fZGF4KVxuK2lmIFsgLXogXCIkREFYXCIgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm5vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4rT1JJRz0kKGdldF9zdGF0ZSlcbitcbisjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK2lmIFsgXCIkcmNcIiAhPSAwIF0gfHwgWyBcIiQoZ2V0X3N0YXRlKVwiICE9IHVucGx1Z2dlZCBdOyB0aGVuXG4rXHRrdGFwX3NraXBfYWxsIFwiJERBWDogY2Fubm90IHJlYWNoICd1bnBsdWdnZWQnIGJhc2VsaW5lIChtZW1vcnkgaW4gdXNlPylcIlxuK1x0WyAtbiBcIiRPUklHXCIgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwiJE9SSUdcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXG4rXG4rRFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXG4rXG4ra3RhcF9wcmludF9tc2cgXCJ1c2luZyAkREFYIChpbml0aWFsIHN0YXRlIHdhczogJE9SSUcpXCJcbitrdGFwX3NldF9wbGFuIDExXG4rXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cbittdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdIFx1MDAyNlx1MDAyNiBbIFwiJG10X29ubGluZVwiIC1ndCBcIiRtdF91bnBsdWdnZWRcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZTogc3RhdGU9b25saW5lLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcIlxuK2ZpXG4rXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZSBpZGVtcG90ZW50XCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm9ubGluZSBpZGVtcG90ZW50OiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCJcbitmaVxuK1xuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBvbmxpbmUgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3Qgb25saW5lX21vdmFibGUgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWdcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lLVx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK210PSQobWVtdG90YWxfa2IpXG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSB1bnBsdWdnZWQgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1sdCBcIiRtdF9vbmxpbmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInVucGx1ZyBmcm9tIG9ubGluZTogTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdCBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdFwiXG4rZmlcbitcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4rbXRfbW92YWJsZT0kKG1lbXRvdGFsX2tiKVxuK2lmIFsgXCIkcmNcIiA9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdF9tb3ZhYmxlXCIgLWd0IFwiJG10X3VucGx1Z2dlZFwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X21vdmFibGUga0JcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsPSRtdF9tb3ZhYmxlXCJcbitmaVxuK1xuKyMgVGhlIG9ubGluZSAtXHUwMDNlIHVucGx1ZyAtXHUwMDNlIG9ubGluZV9tb3ZhYmxlIC1cdTAwM2UgdW5wbHVnIGN5Y2xlIG9uY2UgcmVncmVzc2VkOlxuKyMgYSByZS1vbmxpbmUgZmFpbGVkIHRvIHJlLXJlc2VydmUgdGhlIHBlci1yYW5nZSByZXNvdXJjZXMsIHNvIHRoZSBmaW5hbCB1bnBsdWdcbisjIHJlcG9ydGVkIHN1Y2Nlc3Mgd2hpbGUgbGVhdmluZyB0aGUgbWVtb3J5IG9ubGluZS4gIEFzc2VydCBpdCBpcyByZWFsbHkgZnJlZWQuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbittdD0kKG1lbXRvdGFsX2tiKVxuK2lmIFsgXCIkcmNcIiAhPSAwIF07IHRoZW5cbitcdGt0YXBfdGVzdF9za2lwIFwidW5wbHVnIGZyb20gbW92YWJsZSBub3QgYWNjZXB0ZWQgKG1lbW9yeSBpbiB1c2U/KSByYz0kcmNcIlxuK2VsaWYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCIkbXRcIiAtbHQgXCIkbXRfbW92YWJsZVwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwidW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10IGtCXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcInVucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLVx1MDAzZSAkbXRcIlxuK2ZpXG4rXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XG4rbXQ9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZV9rZXJuZWwgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1ndCBcIiRtdF91bnBsdWdnZWRcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZV9rZXJuZWw6IE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVx1MDAzZSAkbXQga0JcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX2tlcm5lbDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRcIlxuK2ZpXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxuK1xuK2JlZm9yZT0kKGdldF9zdGF0ZSlcbitzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4raWYgWyBcIiRyY1wiICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gXCIkYmVmb3JlXCIgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwiaW52YWxpZCBzdGF0ZSBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcIlxuK2ZpXG4rXG4rIyBSdW4gc2V2ZXJhbCBvbmxpbmUvdW5wbHVnIGN5Y2xlcyBhbmQgcmVxdWlyZSB0aGF0IGVhY2ggb25lIGFkZHMvcmVtb3ZlcyBtZW1vcnlcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXG4rY3ljbGVfb2s9MTsgZmFpbF9pPTBcbitmb3IgaSBpbiAxIDIgMzsgZG9cbitcdGlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuK1x0b249JChtZW10b3RhbF9rYilcbitcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuK1x0b2ZmPSQobWVtdG90YWxfa2IpXG4rXHRpZiBbIFwiJG9uXCIgLWxlIFwiJG10X3VucGx1Z2dlZFwiIF0gfHwgWyBcIiRvZmZcIiAtZ2UgXCIkb25cIiBdOyB0aGVuXG4rXHRcdGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWtcbitcdGZpXG4rZG9uZVxuK2lmIFsgXCIkY3ljbGVfb2tcIiA9IDEgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IG1lbW9yeSBhZGRlZCBhbmQgZnJlZWQgZWFjaCB0aW1lKVwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXCJcbitmaVxuK1xuKyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvd1xuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxuK3NldF9zdGF0ZSB1bnBsdWdnZWRcbitpZiBbIC13IFwiJEFPQlwiIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCIkRFJWL3VuYmluZFwiIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCIkRFJWL2JpbmRcIiBdOyB0aGVuXG4rXHRvcmlnX2FvYj0kKGNhdCBcIiRBT0JcIilcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi91bmJpbmRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIG9mZmxpbmUgXHUwMDNlIFwiJEFPQlwiIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi9iaW5kXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0c2xlZXAgMVxuK1x0c3Q9JChnZXRfc3RhdGUpXG4rXHRlY2hvIFwiJG9yaWdfYW9iXCIgXHUwMDNlIFwiJEFPQlwiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHN5c3RlbSBwb2xpY3lcbitcdGlmIFsgXCIkc3RcIiA9IG9mZmxpbmUgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZSBwb2xpY3kgcmVzb2x2ZWQgYXQgYmluZDogYXV0b19vbmxpbmVfYmxvY2tzPW9mZmxpbmUgLVx1MDAzZSBzdGF0ZT1vZmZsaW5lXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCJiaW5kLXRpbWUgcG9saWN5IG5vdCBob25vcmVkOiBzdGF0ZT0kc3QgKGV4cGVjdGVkIG9mZmxpbmUpXCJcbitcdGZpXG4rXHRzZXRfc3RhdGUgdW5wbHVnZ2VkIDJcdTAwM2UvZGV2L251bGxcbitlbHNlXG4rXHRrdGFwX3Rlc3Rfc2tpcCBcImF1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlXCJcbitmaVxuK1xuK1sgLW4gXCIkT1JJR1wiIF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcIiRPUklHXCJcbitcbisjIERFU1RSVUNUSVZFOiB1bmJpbmRpbmcgdGhlIGRyaXZlciB3aGlsZSBtZW1vcnkgaXMgb25saW5lIGNhdXNlcyB0aGUgcmVzb3VyY2VzXG4rIyB0byBsZWFrIC0gYnV0IHRoZSB1bmJpbmQgc2hvdWxkIG5vdCBkZWFkbG9jay4gIEluc3RlYWQgdGhlIGRyaXZlciBsZWFrcyBpdFxuKyMgd2l0aCBhIHNpbmdsZSBcInN1Y2sgb25saW5lXCIgd2FybmluZy4gVGhpcyBsZWF2ZXMgdGhlIG1lbW9yeSBvbmxpbmUgYW5kIHRoZVxuKyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZVxuK2lmIFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi91bmJpbmRcIiBdOyB0aGVuXG4rXHRtdF9vbj0kKG1lbXRvdGFsX2tiKVxuK1x0ZG1lc2cgLUMgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBcIiREQVhcIiBcdTAwM2UgXCIkRFJWL3VuYmluZFwiIDJcdTAwM2UvZGV2L251bGxcbitcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXG4rXHQjIFRoZSBsZWFrZWQgXCJTeXN0ZW0gUkFNIChrbWVtKVwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xuK1x0IyB0aGVpciBuYW1lcyBkZXJlZmVyZW5jZXMgcmVzX25hbWUsIHdoaWNoIGEgYnVnZ3kgdW5iaW5kIGFscmVhZHkgZnJlZWQuXG4rXHQjIFdhbGsgL3Byb2MvaW9tZW0gdG8gcHJvdm9rZSB0aGF0IHVzZS1hZnRlci1mcmVlIChjYXVnaHQgYnkgS0FTQU4pLlxuK1x0Y2F0IC9wcm9jL2lvbWVtIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdHNwbGF0PSQoZG1lc2cgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcIktBU0FOfEJVRzp8dXNlLWFmdGVyLWZyZWV8Z2VuZXJhbCBwcm90ZWN0aW9ufE9vcHN8cmVmY291bnRfdFwiKVxuK1x0aWYgWyBcIiRzcGxhdFwiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJG10X2FmdGVyXCIgLWdlIFwiJG10X29uXCIgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcInVuYmluZCB3aGlsZSBvbmxpbmU6IG1lbW9yeSBsZWZ0IG9ubGluZSwgbm8gVUFGL29vcHMgKE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQilcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcInVuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X3NraXAgXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XCJcbitmaVxuK1xuK2t0YXBfZmluaXNoZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmE0ZDg1Zjc0Y2Q2Yjlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5nc1xuQEAgLTAsMCArMSBAQFxuK3RpbWVvdXQ9OTBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE4OjQ1Ljk1OTk0NDgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NjIwMjEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQVggS21lbSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG1lbW9yeSBob3RwbHVnZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIGFuZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBjb25zaWRlcmluZyB0aGlzIGZvciBmdXp6aW5nLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgdGhpcyBuZXcgc3lzZnMgYXR0cmlidXRlLCBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYC4gIFRoaXMgaXMgaG93IHRoZSB1c2VyIHdpbGwgY29udHJvbCB0aGUgbWVtb3J5IHJlZ2lvbidzIHN0YXRl4oCUdW5wbHVnZ2VkLCBvbmxpbmUsIHRoZSBrZXJuZWwsIGFuZCBtb3ZhYmxlLiAgQSBjbGVhciBjb250cm9sIG1lY2hhbmlzbSBpcyBhbHdheXMgc29tZXRoaW5nIEknbSBpbnRlcmVzdGVkIGluIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gaWRlbnRpZnkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSBhcmVhcyBiZWluZyBpbXBhY3RlZDpcblxuKiAgICoqYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AqKjogRnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFwcGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhbiBvbmxpbmUgdHlwZSwgYW5kIHZpY2UgdmVyc2EuXG4qICAgKipgZHJpdmVycy9kYXgvYnVzLmMsIGN4bC5jLCBobWVtLmMsIHBtZW0uY2AqKjogV2UgaGF2ZSBzZXZlcmFsIHByb2JlcyBiZWluZyBtb2RpZmllZCB0byBhZGQgREFYIGNhcGFiaWxpdGllcyBmb3IgdmFyaW91cyBEQVggZGV2aWNlcy5cbiogICAqKmBkcml2ZXJzL2RheC9rbWVtLmNgKio6IFRoaXMgaXMgd2hlcmUgdGhlIGhlYXZ5IGxpZnRpbmcgaXMgaGFwcGVuaW5nLiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgc3RhdGVfc2hvd2AsIGBzdGF0ZV9zdG9yZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAgYXBwZWFyIHRvIGJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiwgYXMgdGhleSBhcmUgbGlrZWx5IHRvIGJlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eS5cbiogICAqKmBtbS9tZW1vcnlfaG90cGx1Zy5jYCoqOiBDb3JlIGhvdHBsdWdnaW5nIGluZnJhc3RydWN0dXJlIGZ1bmN0aW9ucyBsaWtlIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcy5cblxuTm93LCBmcm9tIHRoZSBsb29rIG9mIGl0LCB0aGUgY29kZSBzZWVtcyB3ZWxsLXN0cnVjdHVyZWQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGltbXVuZSB0byBidWdzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcy4gQmFzZWQgb24gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnYCBmaWxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVzZSBzZXQ6IGBDT05GSUdfREVWX0RBWGAsIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBlbmFibGVkIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5Pa2F5LCBsZXQncyBzZWUgaG93IHRoaXMgc2hhcGVzIHVwLiBJJ20gcmVhZHkgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCBmb3JtdWxhdGluZyBzb21lIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxODo1NC42MjE5Njc3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU4NDQxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVl9EQVhfS01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnPTMwPWNvbmZpZyBERVZfREFYX0hNRU1cXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDMtXFx0ICBkZXZpY2UtZGF4IGluc3RhbmNlcyBmb3IgdGhlc2UgbWVtb3J5IHJhbmdlcywgYW5kIHRoYXQgYWxzb1xcbmRyaXZlcnMvZGF4L0tjb25maWc6NDQ6XFx0ICBlbmFibGVzIHRoZSBwb3NzaWJpbGl0eSB0byBhc3NpZ24gdGhlbSB0byB0aGUgREVWX0RBWF9LTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy00NS1cXHQgIGRyaXZlciB0byBvdmVycmlkZSB0aGUgcmVzZXJ2YXRpb24gYW5kIGFkZCB0aGVtIHRvIGtlcm5lbFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz02OD1jb25maWcgREVWX0RBWF9GU0RFVlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjczOmNvbmZpZyBERVZfREFYX0tNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cXFwiXFxuLS1cXG5kcml2ZXJzL2RheC9NYWtlZmlsZT00PW9iai0kKENPTkZJR19ERVZfREFYKSArPSBkZXZpY2VfZGF4Lm9cXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19ERVZfREFYX0tNRU0pICs9IGttZW0ub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgKz0gZGF4X3BtZW0ub1xcbi0tXFxuZHJpdmVycy9kYXgvYnVzLmM9Njg9c3RhdGljIGludCBkYXhfbWF0Y2hfdHlwZShjb25zdCBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgKmRheF9kcnYsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvZGF4L2J1cy5jLTgwLVxcdGlmIChkYXhfZHJ2LVxcdTAwM2V0eXBlID09IERBWERSVl9ERVZJQ0VfVFlQRSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZGF4L2J1cy5jOjgxOlxcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9LTUVNKSlcXG5kcml2ZXJzL2RheC9idXMuYy04Mi1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9MT1DT05GSUdfREVWX0RBWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoyOkNPTkZJR19ERVZfREFYX0tNRU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxODo1Ny4wODA0MTQ1NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk5NDYxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucywgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbWVtb3J5IHNpdHVhdGlvbi4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGEgZmV3IGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0IHVwLCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19ERVZfREFYYC4gVGhhdCdzIGNydWNpYWwuIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydC4gSXQncyBpbXBvcnRhbnQgdG8ga25vdyBpZiBEQVggaXMgZW5hYmxlZCwgZ2l2ZW4gdGhhdCBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBvciBwZXJzaXN0ZW50IG1lbW9yeS4gVGhlIGRldGFpbHMgd2lsbCBhbGxvdyBtZSB0byBkZWNpZGUgd2hldGhlciBEQVggd2lsbCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBteSBjb2RlLiBOZXh0LCBJJ2xsIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIEdpdmVuIHRoZSB3YXkgbWVtb3J5IGlzIGNoYW5naW5nIG92ZXIgdGltZSB3aXRoIHRoZSByaXNlIG9mIHNlcnZlcnMsIHRoaXMgaXMgaW1wb3J0YW50LiBUaGVuLCBJIHdpbGwgYWxzbyBoYXZlIHRvIGNoZWNrIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIHR3byBvcHRpb25zIGdvIGhhbmQgaW4gaGFuZCwgZGVmaW5pbmcgaWYgSSBjYW4gYWRkIGFuZCByZW1vdmUgbWVtb3J5IGF0IHJ1bnRpbWUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBhbmFseXplIGhvdyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIG1hbmFnZSB0aGUgb3ZlcmFsbCBtZW1vcnkgcG9vbCBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOTUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTowNC4wNzk4NzgxOTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjM3MTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZfREFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz02NDc9Q09ORklHX1ZIT1NUX1ZEUEE9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo2NDg6Q09ORklHX0RFVl9EQVg9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy02NDktQ09ORklHX0VYVDRfRlM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTYzNz1DT05GSUdfVkhPU1RfVkRQQT1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjYzODpDT05GSUdfREVWX0RBWD1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTYzOS1DT05GSUdfRVhUNF9GUz15XFxuLS1cXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM9ODU5PXN0YXRpYyB2b2lkIGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X2RldmljZXMoc3RydWN0IG1lbW9yeV90YXJnZXQgKnRhcmdldClcXG4tLVxcbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NjYtXFx0ICovXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jOjg2NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSkpXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg2OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnPTY9aWYgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctMTgtXFxuZHJpdmVycy9kYXgvS2NvbmZpZzoxOTpjb25maWcgREVWX0RBWF9QTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuZHJpdmVycy9kYXgvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnOjIyOlxcdGRlZmF1bHQgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjMwOmNvbmZpZyBERVZfREFYX0hNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJITUVNIERBWDogZGlyZWN0IGFjY2VzcyB0byAnc3BlY2lmaWMgcHVycG9zZScgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMy1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQV9NRU1CTEtTXFxuZHJpdmVycy9kYXgvS2NvbmZpZzozNDpcXHRkZWZhdWx0IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTM1LVxcdGRlcGVuZHMgb24gQ1hMX0FDUEkgfHwgIUNYTF9BQ1BJXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTQzLVxcdCAgZGV2aWNlLWRheCBpbnN0YW5jZXMgZm9yIHRoZXNlIG1lbW9yeSByYW5nZXMsIGFuZCB0aGF0IGFsc29cXG5kcml2ZXJzL2RheC9LY29uZmlnOjQ0OlxcdCAgZW5hYmxlcyB0aGUgcG9zc2liaWxpdHkgdG8gYXNzaWduIHRoZW0gdG8gdGhlIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDUtXFx0ICBkcml2ZXIgdG8gb3ZlcnJpZGUgdGhlIHJlc2VydmF0aW9uIGFuZCBhZGQgdGhlbSB0byBrZXJuZWxcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDktXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo1MDpjb25maWcgREVWX0RBWF9DWExcXG5kcml2ZXJzL2RheC9LY29uZmlnLTUxLVxcdHRyaXN0YXRlIFxcXCJDWEwgREFYOiBkaXJlY3QgYWNjZXNzIHRvIENYTCBSQU0gcmVnaW9uc1xcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gQ1hMX0JVUyBcXHUwMDI2XFx1MDAyNiBDWExfUkVHSU9OIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnOjUzOlxcdGRlZmF1bHQgQ1hMX1JFR0lPTiBcXHUwMDI2XFx1MDAyNiBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSB8fCAhREVWX0RBWF9ITUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy01NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTYzLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NjQ6Y29uZmlnIERFVl9EQVhfSE1FTV9ERVZJQ0VTXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo2NTpcXHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSBcXHUwMDI2XFx1MDAyNiBEQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY2LVxcdGRlZl9ib29sIHlcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6Njg6Y29uZmlnIERFVl9EQVhfRlNERVZcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjc1OlxcdGRlZmF1bHQgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzY6XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03Ny1cXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbi0tXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfREFYKSArPSBkYXgub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVgpICs9IGRldmljZV9kYXgub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RFVl9EQVhfS01FTSkgKz0ga21lbS5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREVWX0RBWF9QTUVNKSArPSBkYXhfcG1lbS5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfREVWX0RBWF9DWEwpICs9IGRheF9jeGwub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0RFVl9EQVhfRlNERVYpICs9IGZzZGV2X2RheC5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvZGF4L2J1cy5jPTY4PXN0YXRpYyBpbnQgZGF4X21hdGNoX3R5cGUoY29uc3Qgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyICpkYXhfZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2RheC9idXMuYy04MC1cXHRpZiAoZGF4X2Rydi1cXHUwMDNldHlwZSA9PSBEQVhEUlZfREVWSUNFX1RZUEUgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2RheC9idXMuYzo4MTpcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfS01FTSkpXFxuZHJpdmVycy9kYXgvYnVzLmMtODItXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5kcml2ZXJzL2RheC9idXMuaD03Mz10b19obWVtX3BsYXRmb3JtX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9kYXgvYnVzLmgtNzctXFxuZHJpdmVycy9kYXgvYnVzLmg6Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSlcXG5kcml2ZXJzL2RheC9idXMuaC03OS12b2lkIGRheF9obWVtX2ZsdXNoX3dvcmsodm9pZCk7XFxuLS1cXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlLTItIyBkZXZpY2VfaG1lbS5vIGRlbGliZXJhdGVseSBwcmVjZWRlcyBkYXhfaG1lbS5vIGZvciBpbml0Y2FsbCBvcmRlcmluZ1xcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfREVWX0RBWF9ITUVNX0RFVklDRVMpICs9IGRldmljZV9obWVtLm9cXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVhfSE1FTSkgKz0gZGF4X2htZW0ub1xcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGUtNS1cXG4tLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jPTE2Nj1zdGF0aWMgaW50IGhtZW1fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmhvc3QsIGludCB0YXJnZXRfbmlkLFxcbi0tXFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTcxLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jOjE3MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9DWEwpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTczLVxcdCAgICByZWdpb25faW50ZXJzZWN0cyhyZXMtXFx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIElPUkVTT1VSQ0VfTUVNLFxcbi0tXFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmM9MjA4PXN0YXRpYyBfX2luaXQgaW50IGRheF9obWVtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxNi1cXHQgKi9cXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYzoyMTc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfQ1hMKSkge1xcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxOC1cXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwiY3hsX2FjcGlcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWc9MT1jb25maWcgRE1fUENBQ0hFXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX0RNXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gREVWX0RBWFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcXG4tLVxcbmZzL0tjb25maWctODAtXFxuZnMvS2NvbmZpZzo4MTogICAgICAgICAgRm9yIG5kY3RsIHRvIHdvcmsgQ09ORklHX0RFVl9EQVggbmVlZHMgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBGb3IgbW9zdFxcbmZzL0tjb25maWctODItXFx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxcbi0tXFxuaW5jbHVkZS9saW51eC9kYXguaD0zMDk9c3RhdGljIGlubGluZSBpbnQgZGF4X21lbTJibGtfZXJyKGludCBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oLTMxMy1cXG5pbmNsdWRlL2xpbnV4L2RheC5oOjMxNDojaWZkZWYgQ09ORklHX0RFVl9EQVhfSE1FTV9ERVZJQ0VTXFxuaW5jbHVkZS9saW51eC9kYXguaC0zMTUtdm9pZCBobWVtX3JlZ2lzdGVyX3Jlc291cmNlKGludCB0YXJnZXRfbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTM0PWVuZGlmXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjM1Om9iai0kKENPTkZJR19ERVZfREFYKSArPSBkZXZpY2VfZGF4Lm9cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MzY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgKz0gZGF4X3BtZW0ub1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0zNy1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jPTQ9dm9pZCBjaGVjayh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmMtMTUtXFx0XFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0FDUElfTkZJVCkpO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jOjE2OlxcdEJVSUxEX0JVR19PTighSVNfTU9EVUxFKENPTkZJR19ERVZfREFYKSk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTc6XFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0RFVl9EQVhfUE1FTSkpO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jLTE4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6MTpDT05GSUdfREVWX0RBWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoyOkNPTkZJR19ERVZfREFYX0tNRU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTowNi4zODIyNTU5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcxMjc0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBNZW1vcnkgSG90cGx1ZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gSG1tLCBnaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBtZW1vcnktcmVsYXRlZCBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBJJ2xsIGRlbHZlIGludG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgcGVyZm9ybWFuY2UgYmVuY2htYXJrcyB0byBncmFzcCBob3cgdGhlc2UgZmVhdHVyZXMgaW1wYWN0IG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBIb3cgZG8gdGhleSBpbnRlcmFjdD8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToxMS4xNTM1NDAyNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTc5MjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1PUllfSE9UUkVNT1ZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzNj1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozNzg6XFx0XFx0ICAgIEF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3OS1cXHRcXHQgICAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xMzE9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjEzMjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xMzMtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTIyNDE9c3RhdGljIGludCBfX2luaXQgcHJldmVudF9tZW1vcnlfcmVtb3ZlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjI0NC1cXG5hcmNoL2FybTY0L21tL21tdS5jOjIyNDU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSlcXG5hcmNoL2FybTY0L21tL21tdS5jLTIyNDYtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTAxPUNPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUTz15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwMy0jIENPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfTU9WQUJMRSBpcyBub3Qgc2V0XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMDQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTA1LUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0xMTY9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTE4LSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjExOTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMjAtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZz01OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjU5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy02MC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz04OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTkwLUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9MjIyPXN0YXRpYyBpbnQgZGxwYXJfb25saW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjYtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM6MjI3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTIyOC1zdGF0aWMgaW50IGRscGFyX29mZmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU1OD1zdGF0aWMgaW50IGRscGFyX21lbW9yeV9yZW1vdmVfYnlfaWModTMyIGxtYnNfdG9fcmVtb3ZlLCB1MzIgZHJjX2luZGV4KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYxLX1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYzLVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwMT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMDI6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9OTQ9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTU6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy05Ni1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MjcwPWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmMtMzE2LX1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMxNzojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTU9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDAtXFx0LypcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MDE6XFx0ICogSWYgbm8gaW1tb3ZhYmxlIG1lbW9yeSBmb3VuZCwgb3IgTUVNT1JZX0hPVFJFTU9WRSBkaXNhYmxlZCxcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDItXFx0ICogdXNlIEByZWdpb24gZGlyZWN0bHkuXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTMtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NjE0OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTYxNS1cXHQvKlxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaD0xNzE9c3RhdGljIGlubGluZSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgZ2V0X3JzZHBfYWRkcih2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE3NDojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FDUEkpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTE2Nz1zdGF0aWMgc3NpemVfdCBwaHlzX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3Ni0gKiBMZWdhY3kgaW50ZXJmYWNlIHRoYXQgd2UgY2Fubm90IHJlbW92ZS4gQWx3YXlzIGluZGljYXRlIFxcXCJyZW1vdmFibGVcXFwiXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjE3NzogKiB3aXRoIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIC0gYmFkIGhldXJpc3RpYy5cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc4LSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODEte1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIChpbnQpSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTQ1MD1zdGF0aWMgc3NpemVfdCBwaHlzX2RldmljZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00NTktXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQ2MDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02NzE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9tZW1ibGtfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzUtXFx0XFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2NzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3Ny1cXHRcXHUwMDI2ZGV2X2F0dHJfdmFsaWRfem9uZXMuYXR0cixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjIwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAyLS8qKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTI2MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjUtfVxcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZHJpdmVycy9kYXgva21lbS5jLTI2Ny1cXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDg5LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0OTA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9kYXgva21lbS5jLTQ5MS1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTUzMT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU0NS19XFxuZHJpdmVycy9kYXgva21lbS5jOjU0NjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTQ3LVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMjM9Y29uZmlnIFZJUlRJT19NRU1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjEyODpcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyOS1cXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMzkyLVxcdFxcdFxcdFxcdHJlc291cmNlX3NpemVfdCk7XFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTQtZXh0ZXJuIHZvaWQgcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUocmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjItXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI4OT1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yOTMtfVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTQ6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI5NS1cXG4tLVxcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnOjE2OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnLTE3LUNPTkZJR19aT05FX0RFVklDRT15XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0xNDQ2PUVYUE9SVF9TWU1CT0woX19yZWxlYXNlX3JlZ2lvbik7XFxua2VybmVsL3Jlc291cmNlLmMtMTQ0Ny1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDktc3RhdGljIHZvaWQgYXBwZW5kX2NoaWxkX3RvX3BhcmVudChzdHJ1Y3QgcmVzb3VyY2UgKm5ld19wYXJlbnQsIHN0cnVjdCByZXNvdXJjZSAqbmV3X2NoaWxkKVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYy0xNTk2LX1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxua2VybmVsL3Jlc291cmNlLmMtMTU5OC1cXG4tLVxcbm1tL0tjb25maWc9NTM2PWVuZGNob2ljZVxcbm1tL0tjb25maWctNTM3LVxcbm1tL0tjb25maWc6NTM4OmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01MzktXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTgzPWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMTg1LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjExODY6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy0xMTg3LVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL2tzbS5jPTMyNjk9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzI5Mi1cXG5tbS9rc20uYzozMjkzOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL2tzbS5jLTMyOTQtc3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jPTM0MTc9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jLTM0MTktfVxcbm1tL2tzbS5jOjM0MjA6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxubW0va3NtLmMtMzQyMS1cXG4tLVxcbm1tL2tzbS5jPTM5Nzc9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcXG4tLVxcbm1tL2tzbS5jLTQwMDktXFxubW0va3NtLmM6NDAxMDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5tbS9rc20uYy00MDExLVxcdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzcxPWJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg0OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4NS0vKlxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTI1PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI1MjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDM3ND1zdGF0aWMgdW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfYmVnaW4odm9pZClcXG5tbS9wYWdlX2FsbG9jLmMtNDM3NS17XFxubW0vcGFnZV9hbGxvYy5jOjQzNzY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzc3LVxcdFxcdHJldHVybiByZWFkX3NlcWJlZ2luKFxcdTAwMjZ6b25lbGlzdF91cGRhdGVfc2VxKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgyPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfcmV0cnlfem9uZWxpc3QodW5zaWduZWQgaW50IHNlcSlcXG5tbS9wYWdlX2FsbG9jLmMtNDM4My17XFxubW0vcGFnZV9hbGxvYy5jOjQzODQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg1LVxcdFxcdHJldHVybiByZWFkX3NlcXJldHJ5KFxcdTAwMjZ6b25lbGlzdF91cGRhdGVfc2VxLCBzZXEpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc1MTc9dm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NTM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3NTM2OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL3BhZ2VfYWxsb2MuYy03NTM3LS8qXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ9OTA9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ6OTE6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NC05Mi1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4PTc2PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweDo3NzpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweC03OC1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnPTM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnPTM9Q09ORklHX01FTU9SWV9OT1RJRklFUl9FUlJPUl9JTkpFQ1Q9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZzo0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92c29jay9jb25maWc6MTEwOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92c29jay9jb25maWctMTExLUNPTkZJR19aT05FX0RFVklDRT15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjEzLjM5MzMzOTM1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzc5NDI2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgREFYIEtNRU0gSG90cGx1ZyBhbmQgSG90cmVtb3ZlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVmaW5lIHRoaXMgREFYIEtNRU0gZnVuY3Rpb25hbGl0eTogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gIEdvdCBpdC4gTm93IEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2VzcyBmb3IgREFYIEtNRU0uIEkndmUgY29tcGlsZWQgYSBsaXN0OiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgc3RhdGVfc2hvd2AsIGBzdGF0ZV9zdG9yZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC5cblxuUmlnaHQsIGxldCdzIHF1aWNrbHkgY2hlY2sgZnVuY3Rpb24gdmlzaWJpbGl0eS4gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGlzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGlzIGNvbXBvbmVudC4gYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYXJlIGV4cG9ydGVkLCB3aGljaCBpbXBsaWVzIHRoZXkgYXJlIGxpa2VseSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIGBzdGF0ZV9zdG9yZWAgYW5kIGBkZXZfZGF4X2ttZW1fcHJvYmVgIGFyZSBhbHNvIHN0YXRpYywgc28gaW50ZXJuYWwgdG8gdGhpcyBrbWVtIGltcGxlbWVudGF0aW9uLiBOb3cgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgY29kZSB3aXRoaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AgdG8gc2VlIGlmIEkgbWlzc2VkIGFueSBmdW5jdGlvbiBuYW1lcy4gQWx3YXlzIHdvcnRoIGEgbG9vayB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToxOS4wNzEyODU1NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjY1MjA2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGRheF9rbWVtX2RvX2hvdHBsdWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTczPXN0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjkxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToyMi4yOTc4MTM1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDkxNjkwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBzdGF0ZV9zdG9yZWAgaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHJlc2lkZXMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvZGF4L2ttZW0uY2AgZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgREFYIGFuZCBrbWVtLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaG93IGl0cyBzdGF0ZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLCB3aGljaCBpcyB0aGUgY3J1eCBvZiB0aGUgRGlyZWN0IEFjY2VzcyAoREFYKSBpbXBsZW1lbnRhdGlvbiBmb3Iga2VybmVsIG1lbW9yeS4gSSdtIGd1ZXNzaW5nIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGluZ3MgbGlrZSBwb3dlciBzdGF0ZSwgZXJyb3Igc3RhdGUsIG9yIHBlcmhhcHMgZXZlbiBwcm92aXNpb25pbmcvZGVwcm92aXNpb25pbmcgb2YgREFYLW1hbmFnZWQgbWVtb3J5IHJlZ2lvbnMuIFRpbWUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIERBWCBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ3NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjMwLjc4OTUwNzg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNzIwNDc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogc3RhdGVfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTM5ND1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDAzLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDA1LVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM9MTk9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmMtMzAtXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zMTY9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzMyLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozMzM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzM0LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00MC1cXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jPTQyPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmMtNTItXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmM6NTM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01NC1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM9MTc4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmMtMTg4LS8qIENoYW5nZSByZW1vdGUgcHJvY2Vzc29yIHN0YXRlIHZpYSBzeXNmcyAqL1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM6MTg5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE5MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM9MjQ0PXZvaWQgYXBiX2N0cmxfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYy0yNDgtXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYzoyNDk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjUwLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYz0yODE9YXJjaGVfcGxhdGZvcm1fcG93ZXJvZmZfc2VxKHN0cnVjdCBhcmNoZV9wbGF0Zm9ybV9kcnZkYXRhICphcmNoZV9wZGF0YSlcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmMtMzA1LVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNy1cXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmM9NzcyPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTc5OC1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjc5OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbmtlcm5lbC9wb3dlci9tYWluLmMtODAwLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4MC1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzODE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5uZXQvcmZraWxsL2NvcmUuYz04MDg9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxcbm5ldC9yZmtpbGwvY29yZS5jOjgyMDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbm5ldC9yZmtpbGwvY29yZS5jLTgyMS1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6MzQuMzA2NzIwNzQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzUxOTcxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgRHluYW1pYyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBEQVgga21lbSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYmVzdCBvbmVzIHRvIGluc3RydW1lbnQgZm9yIGR5bmFtaWMgYW5hbHlzaXMuIEkndmUgaW5pdGlhbGx5IGlkZW50aWZpZWQgYSBsaXN0LCBidXQgSSBuZWVkIHRvIHJlZmluZSBpdCB0byBlbnN1cmUgZWZmZWN0aXZlIGNvdmVyYWdlIGFuZCBhdm9pZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuRmlyc3QsIGxldCdzIGdvIG92ZXIgdGhlIGNhbmRpZGF0ZXM6IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgc3RhdGVfc3RvcmVgICggc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2ApLCBhbG9uZyB3aXRoIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIGFuZCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLlxuXG5Ob3csIHRoZSBjb25jZXJuIGlzIHRoYXQgYHN0YXRlX3N0b3JlYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIFN0YXRpYyBmdW5jdGlvbnMgd2l0aCBjb21tb24gbmFtZXMgbGlrZSB0aGF0IGFyZSBhIHJlZCBmbGFnLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyBpdCBjb3JyZWN0bHksIG9yLCB3b3JzZSwgaXQgbWlnaHQgaW5zdHJ1bWVudCAqZXZlcnkqIGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCwgbGVhZGluZyB0byBtYXNzaXZlIG5vaXNlIGFuZCBwb3RlbnRpYWxseSBza2V3ZWQgcmVzdWx0cy4gVGhhdCdzIGEgd2FzdGUgb2YgdGltZS4gSSBuZWVkIHNwZWNpZmljaXR5LiBJJ20gYWltaW5nIGZvciB1bmlxdWUgZW50cnkgcG9pbnRzLlxuXG5TbywgZGl0Y2hpbmcgYHN0YXRlX3N0b3JlYCBhcyB0aGUgcHJpbWFyeSBmb2N1cywgSSBzaG91bGQgY2hvb3NlIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzLiBJIHRoaW5rIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgb3IgYGRheF9rbWVtX2RvX2hvdHBsdWdgIHdvdWxkIGJlIGJldHRlciBjaG9pY2VzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgbGl0dGxlIHJlZmluZW1lbnQsIEkgd2FudCB0byB1c2UgdGhpcyBsaXN0IGFzIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHM6XG4tIGBkYXhfa21lbV9kb19ob3RwbHVnYFxuLSBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgXG4tIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgXG4tIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2Bcbi0gYGRheF9rbWVtX3BhcnNlX3N0YXRlYFxuLSBgZGV2X2RheF9rbWVtX3Byb2JlYFxuLSBgZGV2X2RheF9rbWVtX3JlbW92ZWBcbi0gYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGBcbi0gYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYFxuXG5JJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgaXMgYWN0dWFsbHkgd2hhdCBJIHRoaW5rIGl0IGlzLiBPa2F5LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6NDcuMDU4Njk1MjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI1ODg1Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz0yNzU9c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzAwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozMDE6c3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9kYXgva21lbS5jLTMwMi17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQzLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozNDQ6XFx0b25saW5lX3R5cGUgPSBkYXhfa21lbV9wYXJzZV9zdGF0ZShidWYpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXFx0aWYgKG9ubGluZV90eXBlIFxcdTAwM2MgREFYX0tNRU1fVU5QTFVHR0VEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTo0OS40ODQ2MDI1MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjM1MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGRpcmVjdCwgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyBQcmVzZW5jZSoqXG5cblJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRheF9rbWVtX2RvX2hvdHBsdWdgLiBJdCdzIGNydWNpYWwgZm9yIG15IG5leHQgc3RlcCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVsZXZhbnQsIGJ1dCBiZXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE5OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjUzLjI3Njk1ODE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjMxMDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9kb19ob3RwbHVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz03Mz1zdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTgwLS8qKlxcbmRyaXZlcnMvZGF4L2ttZW0uYzo4MTogKiBkYXhfa21lbV9kb19ob3RwbHVnIC0gaG90cGx1ZyBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbmRyaXZlcnMvZGF4L2ttZW0uYy04Mi0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy05MC0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy05Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzcwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozNzE6XFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzcyLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTQ2NC1cXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuZHJpdmVycy9kYXgva21lbS5jOjQ2NTpcXHRyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy00NjYtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6NTUuNTk5Mjc3MDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzg1MzY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIEV4aXN0ZW5jZSBhbmQgUHJvY2VlZGluZyB3aXRoIFZlcmlmaWNhdGlvbioqXG5cblllcywgSSBrbm93IHRoaXMgaXMgcmVhbCwgdGhlIGNvbmNlcHQgaXMgdmFsaWQuIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGFjdHVhbGx5IGV4aXN0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBkZWZpbmVkIGFuZCBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIG9yIHJlbGV2YW5jZSB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqdGhlcmUqIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byAqd2hhdCogaXQgZG9lcy4gU28sIGxldCdzIGNoZWNrIGl0cyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3ODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTo1OC44Mzc4MTY4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjY1MzgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDItLyoqXFxuZHJpdmVycy9kYXgva21lbS5jOjIwMzogKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXFxuZHJpdmVycy9kYXgva21lbS5jLTIwNC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTItICovXFxuZHJpdmVycy9kYXgva21lbS5jOjIxMzpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjE0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjAtI2Vsc2VcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjYxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjItXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM1NC1cXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XFxuZHJpdmVycy9kYXgva21lbS5jOjM1NTpcXHRcXHRyYyA9IGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzU2LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTAtXFx0fSBlbHNlIGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2RheC9rbWVtLmM6NTExOlxcdCAgICBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSkpIHtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTEyLVxcdFxcdGRldl93YXJuKGRldiwgXFxcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MDEuMDY0MzY2MDQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTg4MTc0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBrbm93IHRoaXMgY29uY2VwdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgaW4gcGxheS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIHRoaW5nIGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIExldCBtZSBqdXN0IGNoZWNrIGlmIHRoZSBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGV4aXN0cyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGZyYW1ld29yay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIG1lbW9yeSBkcml2ZXIgaXMgbWFuYWdlZC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjA0LjI4MzE4NjU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMTQ4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTkxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xMTktXFx0XFx0ICovXFxuZHJpdmVycy9kYXgva21lbS5jOjEyMDpcXHRcXHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVxcdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTIxLVxcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDM9ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwNC1cXHRcXHRcXHQgICAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA1OmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA2LVxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTYzOD1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0MC0vKipcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQyLSAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3MS0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NzI6aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3My1cXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDItfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcwMzpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXFxcImttZW1cXFwiKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDQtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTUtICpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MTY6ICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNy0gKlxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzIwPWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjIte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcyMzpcXHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI0LVxcdFxcdFxcdG1ocF9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MDYuNDE0NjczNDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU5NTM1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipJbnRlcm5hbCBDb2RlIENoZWNrKipcblxuUmlnaHQsIEkndmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHByZW1pc2Ug4oCTIGl0ICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBhbmQgcGFydGljdWxhcmx5IGJlZm9yZSBJIHN0YXJ0IG1hbmlwdWxhdGluZyBvciByZWx5aW5nIG9uIGFueSBwb3RlbnRpYWxseSBkZWxpY2F0ZSBtZW1vcnkgcmFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24sIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGlzIGluZGVlZCBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGVyZSdzIG5vIHBvaW50IGluIGNvbnRpbnVpbmcgZG93biB0aGlzIHBhdGggaWYgdGhhdCBjb3JlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgcHJlc2VudC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4gSSB3aWxsIG5vdCBwcm9jZWVkIHdpdGhvdXQgYmVpbmcgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MjYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToyMDowOS42MzA2Mjg5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTYyNjY2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTIxMz1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjI0MTpcXHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjQyLVxcdGtmcmVlKHJhbmdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcwPWV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MjcxOmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yODc9c3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yODgtXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI4OTpzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBucl9yYW5nZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzA9aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzMy1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI0MzQ6XFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDM1LX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzgtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM5OiAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NDAtICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTQtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDU1OmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3JhbmdlcylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTYte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNTI0LX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI1MjU6RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyNi0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MTEuNjg2OTA1OTc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTExMTE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFYIEtNRU0gSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlIGhhdmUgY29uZmlybWF0aW9uLiBUaGlzIERBWCBLTUVNIHRoaW5nIGlzIGEgcmVhbCB0aGluZywgaXQgZG9lcyBleGlzdC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgc3ltYm9scy4gSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBob3RwbHVnIGZ1bmN0aW9uYWxpdHk6XG5cbiogICBgZGF4X2ttZW1fZG9faG90cGx1Z2BcbiogICBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgXG4qICAgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWBcbiogICBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgXG4qICAgYGRheF9rbWVtX3BhcnNlX3N0YXRlYFxuKiAgIGBkZXZfZGF4X2ttZW1fcHJvYmVgXG4qICAgYGRldl9kYXhfa21lbV9yZW1vdmVgXG4qICAgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGBcbiogICBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxhdGVkIHRvIERBWCBLTUVNLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ2AuIEl0IGxvb2tzIGxpa2UgdGhlc2UgY29uZmlncyBhcmUgdGhlIG9uZXMgd2UgbmVlZDpcblxuYGBgXG5DT05GSUdfREVWX0RBWD1tXG5DT05GSUdfREVWX0RBWF9LTUVNPW1cbkNPTkZJR19NRU1PUllfSE9UUExVRz15XG5DT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5gYGBcblxuSSdsbCBwcm9jZWVkIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGFuZCB2ZXJpZnlpbmcgdGhlIGV4aXN0ZW5jZSBvZiBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLiBUaGlzIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Mjk3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjE3Ljg5ODAyMTE1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTEzMzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9OTE9c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTE0Ny0vKipcXG5kcml2ZXJzL2RheC9rbWVtLmM6MTQ4OiAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xNDktICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMTU1LSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzoxNTY6c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM2Ni1cXHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXFxuZHJpdmVycy9kYXgva21lbS5jOjM2NzpcXHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNjgtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDU0LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0NTU6XFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNDU2LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjE5LjkxNzE5NjI4NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE3OTA4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpdCBjb25jaXNlIGFuZCByZWxldmFudDpcblxuKipDb25maXJtaW5nIGFuZCBWZXJpZnlpbmcgRnVuY3Rpb24gRXhpc3RlbmNlKipcblxuWWVzLCB0aGF0IGNydWNpYWwgZWxlbWVudCBpcyBpbmRlZWQgcHJlc2VudC4gTm93LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY29uZmlybSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBJIHJlcXVpcmUsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hlY2sgSSBjYW4ndCBza2lwIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjI0LjczNTEwODE2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTc1MjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9MjYxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI2OC0vKipcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY5OiAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzAtICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzU6c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTI3Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTQ3Ni1lcnJfaG90cGx1ZzpcXG5kcml2ZXJzL2RheC9rbWVtLmM6NDc3OlxcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy00NzgtZXJyX3Jlc291cmNlczpcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTUtXFxuZHJpdmVycy9kYXgva21lbS5jOjUxNjpcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTE3LVxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToyMDoyNi43MDA4NjY0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA1NDYyODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSBjYW4gY29uZmlybSwgKnllcyosIHRoaXMgd2FycmFudHMgbXkgYXR0ZW50aW9uLiBJdCBpbnRyb2R1Y2VzIG1vZGlmaWNhdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBhY3QgY3J1Y2lhbCBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBEQVgga21lbSBkcml2ZXIgYW5kIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0uXG5cblRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEkgc2VlIGl0J3MgYWRkZWQgYSBuZXcgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlICdzdGF0ZScgaW50ZXJmYWNlIGZvciBEQVgga21lbSBkZXZpY2VzLCB3aGljaCBtZWFucyB3ZSBub3cgaGF2ZSB0aGUgYWJpbGl0eSB0byBjb250cm9sIG1lbW9yeSByZWdpb24gc3RhdGVzICh1bnBsdWdnZWQsIG9ubGluZSwgZXRjLikgZGlyZWN0bHkuIEZ1cnRoZXIsIHRoZSBwYXRjaCBnb2VzIGV2ZW4gZnVydGhlciwgYW5kIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzeXN0ZW0gdG8gaGFuZGxlIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSEgVGhhdCBhbG9uZSBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2Ugd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuXG5cbkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHRoaXMgY2xlYXJseSBwcmVzZW50cyBzZXZlcmFsIGtleSBhcmVhcyB0aGF0IGNvdWxkIGJlIHRhcmdldGVkIGZvciBmdXp6aW5nLiBJJ2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgZnV6emluZywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC5cblxuQW5kIEknbGwgYmUgc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlc2UgY29uZmlncyBzZXQ6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIGFyZSBrZXksIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGV5IGRlZmluZSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIG5ld2x5IGludHJvZHVjZWQgY29kZSBvcGVyYXRlcy5cblxuVGhpcyBpcyBhIHdlbGwtZGVmaW5lZCBzZXQgb2YgY2hhbmdlcywgaW50cm9kdWNpbmcgbmV3IHBhdGh3YXlzIGFuZCBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcywgc28gaXQncyByaXBlIGZvciBmdXp6ZXIgYXR0ZW50aW9uLiBJdCBpcyBhIGdvb2QgdGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MjYsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjM5Ljc1NTQ5NjYyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDk4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 15:09:17 +0000 UTC FinishedAt: 2026-06-24 15:20:42 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEV_DAX", "DEV_DAX_KMEM", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "1f06fb13-e5f6-49c2-8f02-5240b7e057e5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dax_kmem_do_hotplug", "dax_kmem_init_resources", "dax_kmem_do_hotremove", "dax_kmem_cleanup_resources", "dax_kmem_parse_state", "dev_dax_kmem_probe", "dev_dax_kmem_remove", "__add_memory_driver_managed", "offline_and_remove_memory_ranges" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2X2RheF9rbWVtX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZTQzMThjNTE1MGQxN2EyNzBmZmQ4NjY4NmM1ZTBjZDU3NzU4N2UwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTU6MTg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuQEAgLTE1MSwzICYjNDM7MTUxLDI5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRtZW1tYXBfb25fbWVtb3J5IHBhcmFtZXRlciBmb3IgbWVtb3J5X2hvdHBsdWcuIFRoaXMgaXNcbiBcdFx0dHlwaWNhbGx5IHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAtXG4gXHRcdG1lbW9yeV9ob3RwbHVnLm1lbW1hcF9vbl9tZW1vcnkgc2V0IHRvICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7Zm9yY2UmIzM5Oy5cJiMzNDtcbiYjNDM7XG4mIzQzO1doYXQ6XHRcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxuJiM0MztEYXRlOlx0XHRKdW5lLCAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHR2Ni4yMVxuJiM0MztDb250YWN0Olx0bnZkaW1tQGxpc3RzLmxpbnV4LmRldlxuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgQ29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBtZW1vcnkgcmVnaW9uLlxuJiM0MztcdFx0QXBwbGllcyB0byBhbGwgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbiYjNDM7XHRcdE9ubHkgYXBwbGllcyB0byBkYXhfa21lbSBkZXZpY2VzLlxuJiM0MztcbiYjNDM7XHRcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcbiYjNDM7XHRcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxuJiM0MztcbiYjNDM7XHRcdCAgXCYjMzQ7dW5wbHVnZ2VkXCYjMzQ7OiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudFxuJiM0MztcdFx0ICBcJiMzNDtvbmxpbmVcJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUsIHpvbmUgY2hvc2VuIGJ5IHRoZSBrZXJuZWxcbiYjNDM7XHRcdCAgXCYjMzQ7b25saW5lX2tlcm5lbFwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTFxuJiM0MztcdFx0ICBcJiMzNDtvbmxpbmVfbW92YWJsZVwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEVcbiYjNDM7XG4mIzQzO1x0XHRcJiMzNDtvZmZsaW5lXCYjMzQ7IChtZW1vcnkgYmxvY2tzIGFyZSBwcmVzZW50IGJ1dCBvZmZsaW5lKSBtYXkgYWxzbyBiZVxuJiM0MztcdFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxuJiM0MztcdFx0YXV0b19vbmxpbmVfYmxvY2tzIHBvbGljeSBpcyBcJiMzNDtvZmZsaW5lXCYjMzQ7LiAgSXQgY2Fubm90IGJlIHdyaXR0ZW4sXG4mIzQzO1x0XHRhcyBpdCYjMzk7cyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIGRldmljZSBkZXN0cnVjdGlvbiByYWNlcy5cbiYjNDM7XG4mIzQzO1x0XHRBIGRldmljZSBjYW4gb25seSBiZSBvbmxpbmVkIGZyb20gdGhlIFwmIzM0O3VucGx1Z2dlZFwmIzM0OyBzdGF0ZSwgc28gYVxuJiM0MztcdFx0ZGV2aWNlIG11c3QgYmUgcmV0dXJuZWQgdG8gXCYjMzQ7dW5wbHVnZ2VkXCYjMzQ7IGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZFxuJiM0MztcdFx0aW50byBhIGRpZmZlcmVudCBzdGF0ZS5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGIzMTgzNDQ0MjZmYWJjLi4zYTJmNjlkM2FmN2I1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5AQCAtNDYsNiAmIzQzOzQ2LDE1IEBAIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKVxuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIDAgfHwgb25saW5lX3R5cGUgXHUwMDNlPSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xuIFxuICNkZWZpbmUgdG9fbWVtb3J5X2Jsb2NrKGRldikgY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbW9yeV9ibG9jaywgZGV2KVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2J1cy5jIGIvZHJpdmVycy9kYXgvYnVzLmNcbmluZGV4IDQ5MjU3M2I0N2Y2NjI0Li40YTAzYjMyM2IwMDM3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9idXMuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbkBAIC0zOTQsNiAmIzQzOzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdC5zaXplID0gMCxcbiBcdFx0XHQuaWQgPSAtMSxcbiBcdFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuJiM0MztcdFx0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuIFxuQEAgLTE1MjcsNiAmIzQzOzE1MjksNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKVxuIFx0aWRhX2luaXQoXHUwMDI2ZGV2X2RheC1cdTAwM2VpZGEpO1xuIFxuIFx0ZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5ID0gZGF0YS1cdTAwM2VtZW1tYXBfb25fbWVtb3J5O1xuJiM0MztcdGRldl9kYXgtXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVx1MDAzZW9ubGluZV90eXBlO1xuIFxuIFx0aW5vZGUgPSBkYXhfaW5vZGUoZGF4X2Rldik7XG4gXHRkZXYtXHUwMDNlZGV2dCA9IGlub2RlLVx1MDAzZWlfcmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXG5pbmRleCA1OTA5MTcxYTQ0MjhiNy4uZjNjOWRhZTVkZTZiYTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvYnVzLmhcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjaWZuZGVmIF9fREFYX0JVU19IX19cbiAjZGVmaW5lIF9fREFYX0JVU19IX19cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbkBAIC0xNiw2ICYjNDM7MTcsMTMgQEAgc3RydWN0IGRheF9yZWdpb247XG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9TVEFUSUMgQklUKDApXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBvbmxpbmVfdHlwZSBzZW50aW5lbDogdGhlIGRldmljZSB3YXMgY3JlYXRlZCB3aXRob3V0IGFuIGV4cGxpY2l0IG9ubGluZVxuJiM0MzsgKiBwb2xpY3ksIHNvIHRoZSBzeXN0ZW0gZGVmYXVsdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBrbWVtIGRyaXZlciBiaW5kcyxcbiYjNDM7ICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgREFYX09OTElORV9ERUZBVUxUXHQoLTEpXG4mIzQzO1xuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcbiBcdFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuQEAgLTI2LDYgJiM0MzszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEge1xuIFx0cmVzb3VyY2Vfc2l6ZV90IHNpemU7XG4gXHRpbnQgaWQ7XG4gXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XG4mIzQzO1x0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xuIH07XG4gXG4gc3RydWN0IGRldl9kYXggKmRldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvY3hsLmMgYi9kcml2ZXJzL2RheC9jeGwuY1xuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvY3hsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2N4bC5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuaW5kZXggODFlNGFmNDllMzljMTAuLmNjZDc3OTY1ZmUzZWQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiAmIzQzOzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xuICAqIEBkZXY6IGRldmljZSBjb3JlXG4gICogQHBnbWFwOiBwZ21hcCBmb3IgbWVtbWFwIHNldHVwIC8gbGlmZXRpbWUgKGRyaXZlciBvd25lZClcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XG4mIzQzOyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXG4mIzQzOyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICYjNDM7OTgsNyBAQCBzdHJ1Y3QgZGV2X2RheCB7XG4gXHRzdHJ1Y3QgZGV2aWNlIGRldjtcbiBcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4gXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XG4mIzQzO1x0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xuIFx0aW50IG5yX3JhbmdlO1xuIFx0c3RydWN0IGRldl9kYXhfcmFuZ2UgKnJhbmdlcztcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbmluZGV4IGFmMjFmNjZiZjg3MmM2Li4yZGUzYmM5MjUxNzI5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4mIzQzO1x0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHR9O1xuIFxuIFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9rbWVtLmMgYi9kcml2ZXJzL2RheC9rbWVtLmNcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2ttZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgva21lbS5jXG5AQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpkYXhfcmFuZ2UgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZXJhbmdlc1tpXTtcbiBcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcdTAwMjZkYXhfcmFuZ2UtXHUwMDNlcmFuZ2U7XG4gXG4tXHQvKiBtZW1vcnktYmxvY2sgYWxpZ24gdGhlIGhvdHBsdWcgcmFuZ2UgKi9cbi1cdHItXHUwMDNlc3RhcnQgPSBBTElHTihyYW5nZS1cdTAwM2VzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7XG4tXHRyLVx1MDAzZWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcbiBcdGlmIChyLVx1MDAzZXN0YXJ0IFx1MDAzZT0gci1cdTAwM2VlbmQpIHtcbiBcdFx0ci1cdTAwM2VzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0O1xuIFx0XHRyLVx1MDAzZWVuZCA9IHJhbmdlLVx1MDAzZWVuZDtcbkBAIC00NCw5ICYjNDM7NDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbiYjNDM7XG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xuIFx0Y29uc3QgY2hhciAqcmVzX25hbWU7XG4gXHRpbnQgbWdpZDtcbiYjNDM7XHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuJiM0MztcdGludCBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgaG90cGx1ZyBzdGF0ZSB0cmFuc2l0aW9ucyAqL1xuIFx0c3RydWN0IHJlc291cmNlICpyZXNbXTtcbiB9O1xuIFxuQEAgLTY1LDE1ICYjNDM7NjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxuJiM0MztcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHxcbiYjNDM7XHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBvbmxpbmVfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgYWRkZWQgPSAwO1xuJiM0MztcdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRtaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7XG4mIzQzO1x0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuJiM0MztcdFx0XHRtaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYyYjMzk7ZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0XG4mIzQzO1x0XHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuJiM0MztcdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdG9ubGluZV90eXBlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVsZWFzZSB0aGUgcmVzZXJ2YXRpb24gZm9yIHRoZSByYW5nZSB0aGF0IGZhaWxlZCB0b1xuJiM0MztcdFx0XHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcbiYjNDM7XHRcdFx0ICogdGhhdCB3YXMgbmV2ZXIgYWRkZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pIHtcbiYjNDM7XHRcdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGFkZGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRhZGRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWRkZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplcyBhbGwgdGhlIHJlc291cmNlcyBmb3IgdGhlIERBWFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdGludCBpLCByYywgbWFwcGVkID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuJiM0MztcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXG4mIzQzO1x0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4mIzQzO1x0XHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSksXG4mIzQzO1x0XHRcdFx0XHQgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIXJlcykge1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dFxuJiM0MztcdFx0XHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAobWFwcGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbiYjNDM7XHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuJiM0MztcdFx0ICogaW5oZXJpdCBmbGFncyBmcm9tIHRoZSBwYXJlbnQgc2luY2UgaXQgbWF5IHNldCBuZXcgZmxhZ3NcbiYjNDM7XHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVzLVx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xuJiM0MztcdFx0bWFwcGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hcHBlZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXG4mIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbiYjNDM7ICpcbiYjNDM7ICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxuJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZFxuJiM0MzsgKiB0aGUgZGV2aWNlIGlzIHJldHVybmVkIHRvIGl0cyBwcmlvciBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCBpLCBucl9yYW5nZXMgPSAwLCByYztcbiYjNDM7XG4mIzQzO1x0cmFuZ2VzID0ga21hbGxvY19hcnJheShkZXZfZGF4LVx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFuZ2VzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTm90aGluZyBhZGRlZCBtZWFucyBub3RoaW5nIHRvIHJlbW92ZS4gKi9cbiYjNDM7XHRpZiAoIW5yX3Jhbmdlcykge1xuJiM0MztcdFx0a2ZyZWUocmFuZ2VzKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7XG4mIzQzO1x0a2ZyZWUocmFuZ2VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGFueV9ob3RyZW1vdmVfZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtob3RyZW1vdmUgZmFpbGVkLCBkZXZpY2UgbGVmdCBvbmxpbmU6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXZfZGF4LVx1MDAzZW5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFkYXRhLVx1MDAzZXJlc1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXNcbiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4mIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmVzIGFsbCByZXNvdXJjZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXG4mIzQzO1x0ICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uXG4mIzQzO1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTigoKGRhdGEtXHUwMDNlc3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgKGRhdGEtXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXG4mIzQzO1x0XHQgXCYjMzQ7SG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9ubGluZV90eXBlO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDt1bnBsdWdnZWRcJiMzNDsgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xuJiM0MztcdGlmIChzeXNmc19zdHJlcShidWYsIFwmIzM0O3VucGx1Z2dlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xuJiM0MztcdC8qIERpc2FsbG93IFwmIzM0O29mZmxpbmVcJiMzNDs6IGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgcmFjZSBjb25kaXRpb25zICovXG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBvbmxpbmVfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4mIzQzO1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IERBWF9LTUVNX1VOUExVR0dFRClcbiYjNDM7XHRcdHN0YXRlX3N0ciA9IFwmIzM0O3VucGx1Z2dlZFwmIzM0OztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0ZV9zdHIgPSBtaHBfb25saW5lX3R5cGVfdG9fc3RyKGRhdGEtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBzdGF0ZV9zdHIgPzogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSB0b19kZXZfZGF4KGRldik7XG4mIzQzO1x0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRpbnQgb25saW5lX3R5cGU7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gb25saW5lX3R5cGU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZXN0YXRlID09IG9ubGluZV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkge1xuJiM0MztcdFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdGRhdGEtXHUwMDNlc3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7XG4mIzQzO1x0XHRyZXR1cm4gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xuJiM0MztcbiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfbGVuID0gMCwgb3JpZ19sZW4gPSAwO1xuIFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGE7XG4gXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcbi1cdGludCBpLCByYywgbWFwcGVkID0gMDtcbi1cdG1ocF90IG1ocF9mbGFncztcbiYjNDM7XHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuJiM0MztcdGludCBvbmxpbmVfdHlwZTtcbiBcdGludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFO1xuIFxuIFx0LypcbkBAIC0xMzMsNjggJiM0Mzs0NDUsMzggQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlZ19tZ2lkO1xuIFx0ZGF0YS1cdTAwM2VtZ2lkID0gcmM7XG4mIzQzO1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4mIzQzO1x0ZGF0YS1cdTAwM2VkZXZfZGF4ID0gZGV2X2RheDtcbiYjNDM7XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuLVx0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4tXG4tXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdC8qIFJlZ2lvbiBpcyBwZXJtYW5lbnRseSByZXNlcnZlZCBpZiBob3RyZW1vdmUgZmFpbHMuICovXG4tXHRcdHJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGlmICghcmVzKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJiMzOTt0XG4tXHRcdFx0ICogYXNzdW1lIHRoYXQgaXQgY2FuIGJlIHVuLW9ubGluZWQgc2FmZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRyYyA9IC1FQlVTWTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IHJlcztcbi1cbi1cdFx0Lypcbi1cdFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcbi1cdFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XG4tXHRcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXG4tXHRcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cbi1cdFx0ICovXG4tXHRcdHJlcy1cdTAwM2VmbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTTtcbiYjNDM7XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbiYjNDM7XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbi1cdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbi1cdFx0ICovXG4tXHRcdHJjID0gYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuLVx0XHRcdFx0cmFuZ2VfbGVuKFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xuJiM0MztcdC8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqL1xuJiM0MztcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKVxuJiM0MztcdFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiBcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UocmVzKTtcbi1cdFx0XHRrZnJlZShyZXMpO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0bWFwcGVkJiM0MzsmIzQzOztcbi1cdH1cbiYjNDM7XHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG4mIzQzO1x0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ob3RwbHVnO1xuJiM0MztcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbiBcbi1cdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpO1xuJiM0MztcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwmIzM0Oyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVxdWVzdF9tZW06XG4mIzQzO2Vycl9ob3RwbHVnOlxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztlcnJfcmVzb3VyY2VzOlxuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuIFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbiBlcnJfcmVnX21naWQ6XG4gXHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbkBAIC0yMDgsNjMgJiM0Mzs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4gXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXG4mIzQzO1x0ZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuIFx0Lypcbi1cdCAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90XG4tXHQgKiBvZmZsaW5lIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiByZW1vdmVfbWVtb3J5KCkgd2lsbCBmYWlsLCBhbmRcbi1cdCAqIHRoZXJlIGlzIG5vIHdheSB0byBob3RyZW1vdmUgdGhpcyBtZW1vcnkgdW50aWwgcmVib290IGJlY2F1c2UgZGV2aWNlXG4tXHQgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuXG4mIzQzO1x0ICogT25saW5lIG1lbW9yeSBjYW5ub3Qgc2FmZWx5IGJlIHJlbW92ZWQgKG9mZmxpbmluZyBkdXJpbmcgdW5iaW5kIGNhblxuJiM0MztcdCAqIGRlYWRsb2NrIGEgdGFzayBhcyB1bmJpbmQgY2Fubm90IGJlIGludGVycnVwdGVkKS4gIFVuZm9ydHVuYXRlbHkgd2VcbiYjNDM7XHQgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbFxuJiM0MztcdCAqIHRoZSBuZXh0IHJlYm9vdCAtIGFuZCB0aGUgbWVtb3J5IHdpbGwgc3RheSBvbmxpbmUgdW50aWwgdGhlbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuXG4gXHQgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbi1cdFx0aW50IHJjO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRyYyA9IHJlbW92ZV9tZW1vcnkocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSkpO1xuLVx0XHRpZiAocmMgPT0gMCkge1xuLVx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4tXHRcdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbi1cdFx0XHRzdWNjZXNzJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuJiM0MztcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7SG90cGx1ZyByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcXG5cJiMzNDspO1xuIFx0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4tXHRcdGRldl9lcnIoZGV2LFxuLVx0XHRcdFwmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxuXCYjMzQ7LFxuLVx0XHRcdFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpKSB7XG4mIzQzO1x0XHRkZXZfd2FybihkZXYsIFwmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChzdWNjZXNzIFx1MDAzZT0gZGV2X2RheC1cdTAwM2Vucl9yYW5nZSkge1xuLVx0XHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVx1MDAzZW1naWQpO1xuLVx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc19uYW1lKTtcbi1cdFx0a2ZyZWUoZGF0YSk7XG4tXHRcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpO1xuLVx0XHQvKlxuLVx0XHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbi1cdFx0ICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmVcbi1cdFx0ICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZVxuLVx0XHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4tXHRcdCAqIHRpbGwgbmV4dCByZWJvb3QuXG4tXHRcdCAqL1xuLVx0XHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuLVx0fVxuJiM0MztcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuJiM0MztcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4mIzQzO1x0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4mIzQzO1x0a2ZyZWUoZGF0YSk7XG4mIzQzO1x0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbiYjNDM7XHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxuJiM0MztcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbiYjNDM7XHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4mIzQzO1x0ICogdGlsbCBuZXh0IHJlYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdpdGhvdXQgaG90cmVtb3ZlIHB1cnBvc2VseSBsZWFrIHRoZSByZXF1ZXN0X21lbV9yZWdpb24oKSBmb3IgdGhlXG4gXHQgKiBkZXZpY2UtZGF4IHJhbmdlIGFuZCByZXR1cm4gJiMzOTswJiMzOTsgdG8gLVx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L3BtZW0uYyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9wbWVtLmNcbkBAIC02Myw2ICYjNDM7NjMsNyBAQCBzdGF0aWMgc3RydWN0IGRldl9kYXggKl9fZGF4X3BtZW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQucGdtYXAgPSBcdTAwMjZwZ21hcCxcbiBcdFx0LnNpemUgPSByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxuJiM0MztcdFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxuIFx0fTtcbiBcbiBcdHJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG5pbmRleCA0NjNkYzAyZjZjZmYwNS4uOWY1ZWYwMzA5Zjc3MzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUlOX01FTU9SWV9CTE9DS19TSVpFICAgICAoMVVMIFx1MDAzY1x1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcbiBcbkBAIC0xMDAsNiAmIzQzOzEwMSwyNyBAQCBpbnQgYXJjaF9nZXRfbWVtb3J5X3BoeXNfZGV2aWNlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuKTtcbiB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKHZvaWQpO1xuIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3NcbiYjNDM7ICogQHJhbmdlOiB0aGUgaW5wdXQgcmFuZ2UgdG8gYWxpZ25cbiYjNDM7ICpcbiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2tcbiYjNDM7ICogYm91bmRhcmllcy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyB3aGljaCBtdXN0XG4mIzQzOyAqIG9wZXJhdGUgb24gbWVtb3J5LWJsb2NrIGFsaWduZWQgcmFuZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBhbGlnbmVkIHJhbmdlLiBDYWxsZXJzIHNob3VsZCBjaGVjayB0aGF0IHRoZSByZXR1cm5lZFxuJiM0MzsgKiByYW5nZSBpcyB2YWxpZCAoYWxpZ25lZC5zdGFydCBcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcbiYjNDM7XG4mIzQzO1x0YWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbiYjNDM7XHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsaWduZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gZXh0ZXJuIHU2NCBtYXhfbWVtX3NpemU7XG4gXG4gZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTtcbiYjNDM7Y29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpO1xuIFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cbiBleHRlcm4gYm9vbCBtb3ZhYmxlX25vZGVfZW5hYmxlZDtcbkBAIC0yNjcsNiAmIzQzOzI2OCw3IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKTtcbiBcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5AQCAtMjgzLDYgJiM0MzsyODUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgaW50IG5yX3JhbmdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRUJVU1k7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5AQCAtMjk0LDYgJiM0MzszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxuIFx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuJiM0MztpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXG4gXHRcdFx0XHQgICAgIG1ocF90IG1ocF9mbGFncyk7XG5AQCAtMzE2LDYgJiM0MzszMjcsOCBAQCBleHRlcm4gc3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsXG4gZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XG4gdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0yMzksNiAmIzQzOzIzOSw3IEBAIGVudW0gbW1vcCBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUodm9pZClcbiBcbiBcdHJldHVybiBtaHBfZGVmYXVsdF9vbmxpbmVfdHlwZTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XG4gXG4gdm9pZCBtaHBfc2V0X2RlZmF1bHRfb25saW5lX3R5cGUoZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbkBAIC0xMzM3LDcgJiM0MzsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIFxuIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiB7XG4tXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbiYjNDM7XHRlbnVtIG1tb3AgKm9ubGluZV90eXBlID0gYXJnO1xuJiM0MztcbiYjNDM7XHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XG4gXHRyZXR1cm4gZGV2aWNlX29ubGluZShcdTAwMjZtZW0tXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtMTQ5MSw3ICYjNDM7MTQ5NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gICpcbiAgKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHXG4gICovXG4taW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiYjNDM7c3RhdGljIGludCBfX2FkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncyxcbiYjNDM7XHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG4gXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiBcdFx0bWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpO1xuIFxuIFx0Lyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqL1xuLVx0aWYgKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpICE9IE1NT1BfT0ZGTElORSlcbi1cdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBOVUxMLCBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgIT0gTU1PUF9PRkZMSU5FKVxuJiM0MztcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZvbmxpbmVfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gZXJyb3I6XG5AQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIGFkZF9tZW1vcnlfcmVzb3VyY2UoKSAqL1xuJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbkBAIC0xNjI2LDcgJiM0MzsxNjM3LDE1IEBAIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gXG4tLypcbiYjNDM7LyoqXG4mIzQzOyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxuJiM0MzsgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXG4mIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbiYjNDM7ICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFwmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpXCYjMzQ7XG4mIzQzOyAqIEBtaHBfZmxhZ3M6IE1lbW9yeSBob3RwbHVnIGZsYWdzXG4mIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKVxuJiM0MzsgKlxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cbiAgKiBSQU0sIGluc3RlYWQsIGl0IGlzIGRldGVjdGVkIGFuZCBhZGRlZCBieSBhIGRyaXZlciAtIGR1cmluZyBjb2xkIGJvb3QsXG5AQCAtMTYzNCw2ICYjNDM7MTY1Myw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogUmVhc29ucyB3aHkgdGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZW1tYXAgb2YgYVxuICAqIGtleGVjIGtlcm5lbCBvciBmb3IgcGxhY2luZyBrZXhlYyBpbWFnZXM6XG4mIzQzOyAqXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXG4gICogICB1c2VkIChlLmcuLCB1c2UgcGVyc2lzdGVudCBtZW1vcnkgYXMgc3lzdGVtIFJBTSlcbiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnlcbkBAIC0xNjQ2LDkgJiM0MzsxNjY2LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XG4gICogXCYjMzQ7U3lzdGVtIFJBTSAoJERSSVZFUilcJiMzNDsuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4taW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbi1cdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbiYjNDM7XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiBcdGludCByYztcbkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICYjMzk7KSYjMzk7KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAob25saW5lX3R5cGUgXHUwMDNjIE1NT1BfT0ZGTElORSB8fCBvbmxpbmVfdHlwZSBcdTAwM2UgTU1PUF9PTkxJTkVfTU9WQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdHJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7XG5AQCAtMTY2Niw3ICYjNDM7MTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTtcbiYjNDM7XHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XG4gXG5AQCAtMTY3NCw2ICYjNDM7MTcwMCwzMCBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXCYjMzQ7a21lbVwmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnlcbiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuJiM0MzsgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgbWVtb3J5IHJhbmdlIGluIGJ5dGVzXG4mIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCBcJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKVwmIzM0O1xuJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBBZGQgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHdpdGggdGhlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSB0eXBlIHNldCBieVxuJiM0MzsgKiBidWlsZCBjb25maWcgb3Iga2VybmVsIGJvb3QgcGFyYW1ldGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXG4mIzQzO1x0XHRcdG1ocF9mbGFncyxcbiYjNDM7XHRcdFx0bWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XG4gXG4gLypcbkBAIC0yMzc5LDU4ICYjNDM7MjQyOSw5OCBAQCBzdGF0aWMgaW50IHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG4gICovXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4mIzQzO1x0c3RydWN0IHJhbmdlIHJhbmdlID0geyAuc3RhcnQgPSBzdGFydCwgLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhcdTAwMjZyYW5nZSwgMSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xuJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbiYjNDM7ICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xuJiM0MzsgKlxuJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcbiYjNDM7ICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxuJiM0MzsgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXG4mIzQzOyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcbiYjNDM7ICogYmVlbiByZW1vdmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7XG4gXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XG4tXHRpbnQgcmM7XG4mIzQzO1x0aW50IGksIHJjID0gMDtcbiBcbi1cdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbi1cdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcbiYjNDM7XHRpZiAoIXJhbmdlcyB8fCBucl9yYW5nZXMgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4mIzQzO1x0XHR1NjQgc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbiYjNDM7XHRcdCAgICAhSVNfQUxJR05FRChzaXplLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fCAhc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRtYl90b3RhbCAmIzQzOz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4tXHQgKiBXZSYjMzk7bGwgcmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBlYWNoIG1lbW9yeSBibG9jaywgc28gd2UgY2FuXG4tXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXG4tXHQgKiBhZnRlciBvZmZsaW5pbmcgc29tZSBvdGhlcnMgc3VjY2VlZGVkLlxuJiM0MztcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxuJiM0MztcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuJiM0MztcdCAqIGFzIE1NT1BfT0ZGTElORSBzbyBibG9ja3Mgd2UgbmV2ZXIgdG91Y2hlZCBhcmUgc2tpcHBlZCBvbiByb2xsYmFjay5cbiBcdCAqL1xuLVx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxuJiM0MztcdG9ubGluZV90eXBlcyA9IGttYWxsb2NfYXJyYXkobWJfdG90YWwsIHNpemVvZigqb25saW5lX3R5cGVzKSxcbiBcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIW9ubGluZV90eXBlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHQvKlxuLVx0ICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluXG4tXHQgKiB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2soKSwgd2UmIzM5O2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4tXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbiYjNDM7XHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX3RvdGFsKTtcbiBcbiBcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiYjNDM7XHQvKiBQaGFzZSAxOiBvZmZsaW5lIGV2ZXJ5IGJsb2NrIGluIGV2ZXJ5IHJhbmdlLiAqL1xuIFx0dG1wID0gb25saW5lX3R5cGVzO1xuLVx0cmMgPSB3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhyYW5nZXNbaV0uc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4gXHQvKlxuLVx0ICogSW4gY2FzZSB3ZSBzdWNjZWVkZWQgdG8gb2ZmbGluZSBhbGwgbWVtb3J5LCByZW1vdmUgaXQuXG4tXHQgKiBUaGlzIGNhbm5vdCBmYWlsIGFzIGl0IGNhbm5vdCBnZXQgb25saW5lZCBpbiB0aGUgbWVhbnRpbWUuXG4mIzQzO1x0ICogUGhhc2UgMjogUmVtb3ZlIGVhY2ggcmFuZ2UuIFRoaXMgZXNzZW50aWFsbHkgY2Fubm90IGZhaWwgYXMgd2UgaG9sZFxuJiM0MztcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cbiBcdCAqL1xuIFx0aWYgKCFyYykge1xuLVx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXCYjMzQ7LCBfX2Z1bmNfXywgcmMpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICByYW5nZV9sZW4oXHUwMDI2cmFuZ2VzW2ldKSk7XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OX09OQ0UocmMpKSB7XG4mIzQzO1x0XHRcdFx0cHJfZXJyKFwmIzM0OyVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fZnVuY19fLCByYyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuJiM0MztcdC8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi9cbiBcdGlmIChyYykge1xuIFx0XHR0bXAgPSBvbmxpbmVfdHlwZXM7XG4tXHRcdHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXHUwMDI2dG1wLFxuLVx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFx0fVxuIFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XG4gXG4gXHRrZnJlZShvbmxpbmVfdHlwZXMpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbmluZGV4IDZlNTliOGY2M2U0MTYzLi44YzJiNGY5NzYxOWNlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIFRBUkdFVFMgJiM0Mzs9IGNvcmVcbiBUQVJHRVRTICYjNDM7PSBjcHVmcmVxXG4gVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICYjNDM7PSBkYW1vblxuJiM0MztUQVJHRVRTICYjNDM7PSBkYXhcbiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3NcbiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL3Byb2JlXG4gVEFSR0VUUyAmIzQzOz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzthbGw6XG4mIzQzO1xuJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzO2luY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGM5YWFlYjZjZWI0MWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcbkBAIC0wLDAgJiM0MzsxLDQgQEBcbiYjNDM7Q09ORklHX0RFVl9EQVg9bVxuJiM0MztDT05GSUdfREVWX0RBWF9LTUVNPW1cbiYjNDM7Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICYjNDM7MSwyMDcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgRXhlcmNpc2UgdGhlIGRheC9rbWVtIFwmIzM0O3N0YXRlXCYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZTpcbiYjNDM7IyAgIC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZSAgLVx1MDAzZSAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX21vdmFibGVcbiYjNDM7I1xuJiM0MzsjIFRoZSB0ZXN0IG5lZWRzIGEgZGF4IGRldmljZSBhbHJlYWR5IGJvdW5kIHRvIHRoZSBrbWVtIGRyaXZlci5cbiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuXG4mIzQzOyNcbiYjNDM7IyBBIGRheCBkZXZpY2UgY2FuIGJlIHByb3Zpc2lvbmVkIHdpdGggdGhlIG1lbW1hcD0gYm9vdCBwYXJhbSwgZS5nLjpcbiYjNDM7IyAgIG1lbW1hcD0yRyE0R1xuJiM0MzsjXG4mIzQzOyMgdGhlbiwgaW4gdGhlIGJvb3RlZCBzeXN0ZW06XG4mIzQzOyNcbiYjNDM7IyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuJiM0MzsjICAgZGF4Y3RsIHJlY29uZmlndXJlLWRldmljZSAtTiAtbSBzeXN0ZW0tcmFtIGRheDAuMCAgICMgYmluZCBrbWVtXG4mIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2hcbiYjNDM7XG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMTA5MVxuJiM0MztESVI9XCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWYgXCYjMzQ7JDBcJiMzNDspXCYjMzQ7KVwmIzM0O1xuJiM0MzsuIFwmIzM0OyRESVJcJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7REFYX0JBU0U9L3N5cy9idXMvZGF4L2RldmljZXNcbiYjNDM7XG4mIzQzO21lbXRvdGFsX2tiKCkgeyBhd2sgJiMzOTsvXk1lbVRvdGFsOi8ge3ByaW50ICQyfSYjMzk7IC9wcm9jL21lbWluZm87IH1cbiYjNDM7Z2V0X3N0YXRlKCkgeyBjYXQgXCYjMzQ7JEhQXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IH1cbiYjNDM7IyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuJiM0MzsjIHdyaXRlJiMzOTtzIGV4aXQgc3RhdHVzICgwID0gYWNjZXB0ZWQgYnkgdGhlIGtlcm5lbClcbiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskSFBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgfVxuJiM0MztcbiYjNDM7ZmluZF9rbWVtX2RheCgpIHtcbiYjNDM7XHRsb2NhbCBkIGRydlxuJiM0MztcdGZvciBkIGluIFwmIzM0OyREQVhfQkFTRVwmIzM0Oy9kYXgqOyBkb1xuJiM0MztcdFx0WyAtZSBcJiMzNDskZC9zdGF0ZVwmIzM0OyBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0XHRkcnY9JChyZWFkbGluayBcJiMzNDskZC9kcml2ZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7XHRcdFsgXCYjMzQ7JChiYXNlbmFtZSBcJiMzNDske2RydjotfVwmIzM0OylcJiMzNDsgPSBrbWVtIF0gfHwgY29udGludWVcbiYjNDM7XHRcdGJhc2VuYW1lIFwmIzM0OyRkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMFxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDskVUlEXCYjMzQ7ICE9IDAgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7REFYPSQoZmluZF9rbWVtX2RheClcbiYjNDM7aWYgWyAteiBcJiMzNDskREFYXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O25vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4mIzQzO09SSUc9JChnZXRfc3RhdGUpXG4mIzQzO1xuJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuJiM0MzsjIGludGVyZmFjZSBmYWlsdXJlLCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSB8fCBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyAhPSB1bnBsdWdnZWQgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JERBWDogY2Fubm90IHJlYWNoICYjMzk7dW5wbHVnZ2VkJiMzOTsgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVwmIzM0O1xuJiM0MztcdFsgLW4gXCYjMzQ7JE9SSUdcJiMzNDsgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwmIzM0OyRPUklHXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO210X3VucGx1Z2dlZD0kKG1lbXRvdGFsX2tiKVxuJiM0MztcbiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbiYjNDM7QU9CPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrc1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9tc2cgXCYjMzQ7dXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVwmIzM0O1xuJiM0MztrdGFwX3NldF9wbGFuIDExXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lOyByYz0kP1xuJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X29ubGluZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lOiBzdGF0ZT1vbmxpbmUsIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVx1MDAzZSAkbXRfb25saW5lIGtCXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldF9zdGF0ZSBvbmxpbmU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyQoZ2V0X3N0YXRlKVwmIzM0OyA9IG9ubGluZSBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lIGlkZW1wb3RlbnRcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZSBpZGVtcG90ZW50OiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBvbmxpbmUgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O3JlamVjdCBvbmxpbmVfbW92YWJsZSB3aXRob3V0IGludGVydmVuaW5nIHVucGx1Z1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lLVx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfb25saW5lXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDt1bnBsdWcgZnJvbSBvbmxpbmU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLVx1MDAzZSAkbXQga0JcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3VucGx1ZyBmcm9tIG9ubGluZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfb25saW5lIC1cdTAwM2UgJG10XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4mIzQzO210X21vdmFibGU9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskbXRfbW92YWJsZVwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X21vdmFibGUga0JcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7IyBUaGUgb25saW5lIC1cdTAwM2UgdW5wbHVnIC1cdTAwM2Ugb25saW5lX21vdmFibGUgLVx1MDAzZSB1bnBsdWcgY3ljbGUgb25jZSByZWdyZXNzZWQ6XG4mIzQzOyMgYSByZS1vbmxpbmUgZmFpbGVkIHRvIHJlLXJlc2VydmUgdGhlIHBlci1yYW5nZSByZXNvdXJjZXMsIHNvIHRoZSBmaW5hbCB1bnBsdWdcbiYjNDM7IyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgaXQgaXMgcmVhbGx5IGZyZWVkLlxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuJiM0MzttdD0kKG1lbXRvdGFsX2tiKVxuJiM0MztpZiBbIFwmIzM0OyRyY1wmIzM0OyAhPSAwIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDt1bnBsdWcgZnJvbSBtb3ZhYmxlIG5vdCBhY2NlcHRlZCAobWVtb3J5IGluIHVzZT8pIHJjPSRyY1wmIzM0O1xuJiM0MztlbGlmIFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10XCYjMzQ7IC1sdCBcJiMzNDskbXRfbW92YWJsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10IGtCXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDt1bnBsdWcgZnJvbSBtb3ZhYmxlIHJlcG9ydGVkIHN1Y2Nlc3MgYnV0IG1lbW9yeSByZW1haW5lZDogc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztzZXRfc3RhdGUgb25saW5lX2tlcm5lbDsgcmM9JD9cbiYjNDM7bXQ9JChtZW10b3RhbF9rYilcbiYjNDM7aWYgWyBcJiMzNDskcmNcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JChnZXRfc3RhdGUpXCYjMzQ7ID0gb25saW5lX2tlcm5lbCBdIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRtdFwmIzM0OyAtZ3QgXCYjMzQ7JG10X3VucGx1Z2dlZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdCBrQlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7b25saW5lX2tlcm5lbDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZFxuJiM0MztcbiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKVxuJiM0MztzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4mIzQzO2lmIFsgXCYjMzQ7JHJjXCYjMzQ7ICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBcJiMzNDskYmVmb3JlXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFJ1biBzZXZlcmFsIG9ubGluZS91bnBsdWcgY3ljbGVzIGFuZCByZXF1aXJlIHRoYXQgZWFjaCBvbmUgYWRkcy9yZW1vdmVzIG1lbW9yeVxuJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkXG4mIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wXG4mIzQzO2ZvciBpIGluIDEgMiAzOyBkb1xuJiM0MztcdGlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuJiM0MztcdG9uPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0aWYgISBzZXRfc3RhdGUgdW5wbHVnZ2VkOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXG4mIzQzO1x0b2ZmPSQobWVtdG90YWxfa2IpXG4mIzQzO1x0aWYgWyBcJiMzNDskb25cJiMzNDsgLWxlIFwmIzM0OyRtdF91bnBsdWdnZWRcJiMzNDsgXSB8fCBbIFwmIzM0OyRvZmZcJiMzNDsgLWdlIFwmIzM0OyRvblwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrXG4mIzQzO1x0ZmlcbiYjNDM7ZG9uZVxuJiM0MztpZiBbIFwmIzM0OyRjeWNsZV9va1wmIzM0OyA9IDEgXTsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0O29ubGluZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogbWVtb3J5IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIGNoYW5nZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgcG9saWN5IHdoaWxlIHRoZSBkZXZpY2UgaXMgdW5ib3VuZCwgYW5kIHNob3dcbiYjNDM7IyB0aGUgbmV3IHN5c3RlbSBkZWZhdWx0IHBvbGljeSBpcyB1dGlsaXplZCBhY3Jvc3MgYmluZGluZ3MuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWRcbiYjNDM7aWYgWyAtdyBcJiMzNDskQU9CXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLXcgXCYjMzQ7JERSVi91bmJpbmRcJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyAtdyBcJiMzNDskRFJWL2JpbmRcJiMzNDsgXTsgdGhlblxuJiM0MztcdG9yaWdfYW9iPSQoY2F0IFwmIzM0OyRBT0JcJiMzNDspXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBvZmZsaW5lIFx1MDAzZSBcJiMzNDskQU9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRlY2hvIFwmIzM0OyREQVhcJiMzNDsgXHUwMDNlIFwmIzM0OyREUlYvYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0c2xlZXAgMVxuJiM0MztcdHN0PSQoZ2V0X3N0YXRlKVxuJiM0MztcdGVjaG8gXCYjMzQ7JG9yaWdfYW9iXCYjMzQ7IFx1MDAzZSBcJiMzNDskQU9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHN5c3RlbSBwb2xpY3lcbiYjNDM7XHRpZiBbIFwmIzM0OyRzdFwmIzM0OyA9IG9mZmxpbmUgXTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7b25saW5lIHBvbGljeSByZXNvbHZlZCBhdCBiaW5kOiBhdXRvX29ubGluZV9ibG9ja3M9b2ZmbGluZSAtXHUwMDNlIHN0YXRlPW9mZmxpbmVcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtiaW5kLXRpbWUgcG9saWN5IG5vdCBob25vcmVkOiBzdGF0ZT0kc3QgKGV4cGVjdGVkIG9mZmxpbmUpXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHRzZXRfc3RhdGUgdW5wbHVnZ2VkIDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9za2lwIFwmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztbIC1uIFwmIzM0OyRPUklHXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcJiMzNDskT1JJR1wmIzM0O1xuJiM0MztcbiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xuJiM0MzsjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XG4mIzQzOyMgd2l0aCBhIHNpbmdsZSBcJiMzNDtzdWNrIG9ubGluZVwmIzM0OyB3YXJuaW5nLiBUaGlzIGxlYXZlcyB0aGUgbWVtb3J5IG9ubGluZSBhbmQgdGhlXG4mIzQzOyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QuXG4mIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmVcbiYjNDM7aWYgWyBcJiMzNDskKGdldF9zdGF0ZSlcJiMzNDsgPSBvbmxpbmUgXSBcdTAwMjZcdTAwMjYgWyAtdyBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0bXRfb249JChtZW10b3RhbF9rYilcbiYjNDM7XHRkbWVzZyAtQyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBcJiMzNDskREFYXCYjMzQ7IFx1MDAzZSBcJiMzNDskRFJWL3VuYmluZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0bXRfYWZ0ZXI9JChtZW10b3RhbF9rYilcbiYjNDM7XHQjIFRoZSBsZWFrZWQgXCYjMzQ7U3lzdGVtIFJBTSAoa21lbSlcJiMzNDsgcmVnaW9ucyBzdGF5IGluIHRoZSBpb21lbSB0cmVlOyByZWFkaW5nXG4mIzQzO1x0IyB0aGVpciBuYW1lcyBkZXJlZmVyZW5jZXMgcmVzX25hbWUsIHdoaWNoIGEgYnVnZ3kgdW5iaW5kIGFscmVhZHkgZnJlZWQuXG4mIzQzO1x0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cbiYjNDM7XHRjYXQgL3Byb2MvaW9tZW0gXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNwbGF0PSQoZG1lc2cgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcJiMzNDtLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3RcJiMzNDspXG4mIzQzO1x0aWYgWyBcJiMzNDskc3BsYXRcJiMzNDsgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JG10X2FmdGVyXCYjMzQ7IC1nZSBcJiMzNDskbXRfb25cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZTogbWVtb3J5IGxlZnQgb25saW5lLCBubyBVQUYvb29wcyAoTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCKVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9za2lwIFwmIzM0O2NvdWxkIG5vdCBvbmxpbmUgZGV2aWNlIGZvciB1bmJpbmQtd2hpbGUtb25saW5lIHRlc3RcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmE0ZDg1Zjc0Y2Q2Yjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5nc1xuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7dGltZW91dD05MFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWF9LTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfa21lbV9kb19ob3RwbHVnJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2luaXRfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkYXhfa21lbV9wYXJzZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2X2RheF9rbWVtX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRlNDMxOGM1MTUwZDE3YTI3MGZmZDg2Njg2YzVlMGNkNTc3NTg3ZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxNToxODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheAppbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXgKQEAgLTE1MSwzICYjNDM7MTUxLDI5IEBAIERlc2NyaXB0aW9uOgogCQltZW1tYXBfb25fbWVtb3J5IHBhcmFtZXRlciBmb3IgbWVtb3J5X2hvdHBsdWcuIFRoaXMgaXMKIAkJdHlwaWNhbGx5IHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAtCiAJCW1lbW9yeV9ob3RwbHVnLm1lbW1hcF9vbl9tZW1vcnkgc2V0IHRvICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7Zm9yY2UmIzM5Oy4mIzM0OwomIzQzOwomIzQzO1doYXQ6CQkvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUKJiM0MztEYXRlOgkJSnVuZSwgMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CXY2LjIxCiYjNDM7Q29udGFjdDoJbnZkaW1tQGxpc3RzLmxpbnV4LmRldgomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBDb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeSByZWdpb24uCiYjNDM7CQlBcHBsaWVzIHRvIGFsbCBtZW1vcnkgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLgomIzQzOwkJT25seSBhcHBsaWVzIHRvIGRheF9rbWVtIGRldmljZXMuCiYjNDM7CiYjNDM7CQlSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yCiYjNDM7CQl0aGUgcGVyLWJsb2NrIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGUgQUJJOjoKJiM0MzsKJiM0MzsJCSAgJiMzNDt1bnBsdWdnZWQmIzM0OzogbWVtb3J5IGJsb2NrcyBhcmUgbm90IHByZXNlbnQKJiM0MzsJCSAgJiMzNDtvbmxpbmUmIzM0OzogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbAomIzQzOwkJICAmIzM0O29ubGluZV9rZXJuZWwmIzM0OzogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX05PUk1BTAomIzQzOwkJICAmIzM0O29ubGluZV9tb3ZhYmxlJiMzNDs6IG1lbW9yeSBpcyBvbmxpbmUgaW4gWk9ORV9NT1ZBQkxFCiYjNDM7CiYjNDM7CQkmIzM0O29mZmxpbmUmIzM0OyAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmUKJiM0MzsJCXJlcG9ydGVkIC0gdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRldmljZSBpcyBib3VuZCB3aGlsZSB0aGUKJiM0MzsJCWF1dG9fb25saW5lX2Jsb2NrcyBwb2xpY3kgaXMgJiMzNDtvZmZsaW5lJiMzNDsuICBJdCBjYW5ub3QgYmUgd3JpdHRlbiwKJiM0MzsJCWFzIGl0JiMzOTtzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgZGV2aWNlIGRlc3RydWN0aW9uIHJhY2VzLgomIzQzOwomIzQzOwkJQSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSAmIzM0O3VucGx1Z2dlZCYjMzQ7IHN0YXRlLCBzbyBhCiYjNDM7CQlkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byAmIzM0O3VucGx1Z2dlZCYjMzQ7IGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZAomIzQzOwkJaW50byBhIGRpZmZlcmVudCBzdGF0ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCBiMzE4MzQ0NDI2ZmFiYy4uM2EyZjY5ZDNhZjdiNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTQ2LDYgJiM0Mzs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cikKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWhwX29ubGluZV90eXBlX2Zyb21fc3RyKTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSkKJiM0Mzt7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAmbHQ7IDAgfHwgb25saW5lX3R5cGUgJmd0Oz0gKGludClBUlJBWV9TSVpFKG9ubGluZV90eXBlX3RvX3N0cikpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIG9ubGluZV90eXBlX3RvX3N0cltvbmxpbmVfdHlwZV07CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpOwogCiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmMgYi9kcml2ZXJzL2RheC9idXMuYwppbmRleCA0OTI1NzNiNDdmNjYyNC4uNGEwM2IzMjNiMDAzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQoYykgMjAxNy0yMDE4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CkBAIC0zOTQsNiAmIzQzOzM5NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGNyZWF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJLnNpemUgPSAwLAogCQkJLmlkID0gLTEsCiAJCQkubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLAomIzQzOwkJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAkJfTsKIAkJc3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoJmFtcDtkYXRhKTsKIApAQCAtMTUyNyw2ICYjNDM7MTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpCiAJaWRhX2luaXQoJmFtcDtkZXZfZGF4LSZndDtpZGEpOwogCiAJZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSA9IGRhdGEtJmd0O21lbW1hcF9vbl9tZW1vcnk7CiYjNDM7CWRldl9kYXgtJmd0O29ubGluZV90eXBlID0gZGF0YS0mZ3Q7b25saW5lX3R5cGU7CiAKIAlpbm9kZSA9IGRheF9pbm9kZShkYXhfZGV2KTsKIAlkZXYtJmd0O2RldnQgPSBpbm9kZS0mZ3Q7aV9yZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaAppbmRleCA1OTA5MTcxYTQ0MjhiNy4uZjNjOWRhZTVkZTZiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGF4L2J1cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2J1cy5oCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpZm5kZWYgX19EQVhfQlVTX0hfXwogI2RlZmluZSBfX0RBWF9CVVNfSF9fCiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKQEAgLTE2LDYgJiM0MzsxNywxMyBAQCBzdHJ1Y3QgZGF4X3JlZ2lvbjsKICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKQogI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKQogCiYjNDM7LyoKJiM0MzsgKiBvbmxpbmVfdHlwZSBzZW50aW5lbDogdGhlIGRldmljZSB3YXMgY3JlYXRlZCB3aXRob3V0IGFuIGV4cGxpY2l0IG9ubGluZQomIzQzOyAqIHBvbGljeSwgc28gdGhlIHN5c3RlbSBkZWZhdWx0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGttZW0gZHJpdmVyIGJpbmRzLAomIzQzOyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBEQVhfT05MSU5FX0RFRkFVTFQJKC0xKQomIzQzOwogc3RydWN0IGRheF9yZWdpb24gKmFsbG9jX2RheF9yZWdpb24oc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgcmVnaW9uX2lkLAogCQlzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgdGFyZ2V0X25vZGUsIHVuc2lnbmVkIGludCBhbGlnbiwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC0yNiw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgZGV2X2RheF9kYXRhIHsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAlpbnQgaWQ7CiAJYm9vbCBtZW1tYXBfb25fbWVtb3J5OwomIzQzOwllbnVtIG1tb3Agb25saW5lX3R5cGU7CiB9OwogCiBzdHJ1Y3QgZGV2X2RheCAqZGV2bV9jcmVhdGVfZGV2X2RheChzdHJ1Y3QgZGV2X2RheF9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmMKaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9jeGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9jeGwuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCS5pZCA9IC0xLAogCQkuc2l6ZSA9IHJhbmdlX2xlbigmYW1wO2N4bHJfZGF4LSZndDtocGFfcmFuZ2UpLAogCQkubWVtbWFwX29uX21lbW9yeSA9IHRydWUsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZGV2bV9jcmVhdGVfZGV2X2RheCgmYW1wO2RhdGEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi5jY2Q3Nzk2NWZlM2VkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeV9ob3RwbHVnLmgmZ3Q7CiAKIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovCiBzdHJ1Y3QgZGF4X2RldmljZTsKQEAgLTc5LDYgJiM0Mzs4MCw4IEBAIHN0cnVjdCBkZXZfZGF4X3JhbmdlIHsKICAqIEBkZXY6IGRldmljZSBjb3JlCiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKQogICogQG1lbW1hcF9vbl9tZW1vcnk6IGFsbG93IGttZW0gdG8gcHV0IHRoZSBtZW1tYXAgaW4gdGhlIG1lbW9yeQomIzQzOyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUCiYjNDM7ICoJCSB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzCiAgKiBAbnJfcmFuZ2U6IHNpemUgb2YgQHJhbmdlcwogICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkCiAgKi8KQEAgLTk1LDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwogCWJvb2wgbWVtbWFwX29uX21lbW9yeTsKJiM0MzsJZW51bSBtbW9wIG9ubGluZV90eXBlOwogCWludCBucl9yYW5nZTsKIAlzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqcmFuZ2VzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmMKaW5kZXggYWYyMWY2NmJmODcyYzYuLjJkZTNiYzkyNTE3MjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RhdGljIGludCBkYXhfaG1lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQkuaWQgPSAtMSwKIAkJLnNpemUgPSByZWdpb25faWRsZSA/IDAgOiByYW5nZV9sZW4oJmFtcDttcmktJmd0O3JhbmdlKSwKIAkJLm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSwKJiM0MzsJCS5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCwKIAl9OwogCiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgva21lbS5jIGIvZHJpdmVycy9kYXgva21lbS5jCmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgva21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2ttZW0uYwpAQCAtMzMsOSAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcikKIAlzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gJmFtcDtkZXZfZGF4LSZndDtyYW5nZXNbaV07CiAJc3RydWN0IHJhbmdlICpyYW5nZSA9ICZhbXA7ZGF4X3JhbmdlLSZndDtyYW5nZTsKIAotCS8qIG1lbW9yeS1ibG9jayBhbGlnbiB0aGUgaG90cGx1ZyByYW5nZSAqLwotCXItJmd0O3N0YXJ0ID0gQUxJR04ocmFuZ2UtJmd0O3N0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTsKLQlyLSZndDtlbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtlbmQgJiM0MzsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgLSAxOwomIzQzOwkqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTsKIAlpZiAoci0mZ3Q7c3RhcnQgJmd0Oz0gci0mZ3Q7ZW5kKSB7CiAJCXItJmd0O3N0YXJ0ID0gcmFuZ2UtJmd0O3N0YXJ0OwogCQlyLSZndDtlbmQgPSByYW5nZS0mZ3Q7ZW5kOwpAQCAtNDQsOSAmIzQzOzQyLDE1IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsjZGVmaW5lIERBWF9LTUVNX1VOUExVR0dFRAkoLTEpCiYjNDM7CiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7CiAJY29uc3QgY2hhciAqcmVzX25hbWU7CiAJaW50IG1naWQ7CiYjNDM7CWludCBudW1hX25vZGU7CiYjNDM7CXN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4OwomIzQzOwlpbnQgc3RhdGU7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovCiAJc3RydWN0IHJlc291cmNlICpyZXNbXTsKIH07CiAKQEAgLTY1LDE1ICYjNDM7NjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKQogCW10X3B1dF9tZW1vcnlfdHlwZXMoJmFtcDtrbWVtX21lbW9yeV90eXBlcyk7CiB9CiAKJiM0MzsvKiBUcnVlIGZvciB0aGUgb25saW5lIHN0YXRlcyBhIGttZW0gZGF4IGRldmljZSBjYW4gaG9sZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8CiYjNDM7CSAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9LRVJORUwgfHwKJiM0MzsJICAgICAgIHN0YXRlID09IE1NT1BfT05MSU5FX01PVkFCTEU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHBsdWcgLSBob3RwbHVnIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlCiYjNDM7ICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlCiYjNDM7ICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nCiYjNDM7ICogQG9ubGluZV90eXBlOiB0aGUgb25saW5lIHBvbGljeSB0byB1c2UgZm9yIHRoZSBtZW1vcnkgYmxvY2tzCiYjNDM7ICoKJiM0MzsgKiBIb3RwbHVncyBhbGwgcmFuZ2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbiBhcyBzeXN0ZW0gbWVtb3J5IHdpdGggdGhlCiYjNDM7ICogcHJvdmlkZWQgb25saW5lIHBvbGljeSAob2ZmbGluZSwgb25saW5lLCBvbmxpbmVfbW92YWJsZSwgb25saW5lX2tlcm5lbCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsCiYjNDM7CQkJICAgICAgIGludCBvbmxpbmVfdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7ZGV2X2RheC0mZ3Q7ZGV2OwomIzQzOwlpbnQgaSwgcmMsIGFkZGVkID0gMDsKJiM0MzsJbWhwX3QgbWhwX2ZsYWdzOwomIzQzOwomIzQzOwlpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAob25saW5lX3R5cGUgJmx0OyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgJmd0OyBNTU9QX09OTElORV9NT1ZBQkxFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkZXZfZGF4LSZndDtucl9yYW5nZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7CiYjNDM7CQlpZiAoZGV2X2RheC0mZ3Q7bWVtbWFwX29uX21lbW9yeSkKJiM0MzsJCQltaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJiMzOTtkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXQKJiM0MzsJCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtJmd0O21naWQsIHJhbmdlLnN0YXJ0LAomIzQzOwkJCQlyYW5nZV9sZW4oJmFtcDtyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLAomIzQzOwkJCQlvbmxpbmVfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bWFwcGluZyVkOiAlI2xseC0lI2xseCBtZW1vcnkgYWRkIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJCSBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG8KJiM0MzsJCQkgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnkKJiM0MzsJCQkgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKSB7CiYjNDM7CQkJCXJlbW92ZV9yZXNvdXJjZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwomIzQzOwkJCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoYWRkZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYWRkZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbQomIzQzOyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZQomIzQzOyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZwomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVgKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsJaW50IGksIHJjLCBtYXBwZWQgPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKJiM0MzsJCXN0cnVjdCByYW5nZSByYW5nZTsKJiM0MzsKJiM0MzsJCXJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgJmFtcDtyYW5nZSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovCiYjNDM7CQlpZiAoZGF0YS0mZ3Q7cmVzW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KJiM0MzsJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyYW5nZS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLAomIzQzOwkJCQkJIGRhdGEtJmd0O3Jlc19uYW1lKTsKJiM0MzsJCWlmICghcmVzKSB7CiYjNDM7CQkJZGV2X3dhcm4oZGV2LCAmIzM0O21hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXG4mIzM0OywKJiM0MzsJCQkJIGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbiYjMzk7dAomIzQzOwkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobWFwcGVkKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCiYjNDM7CQkgKiBzbyB0aGF0IGFkZF9tZW1vcnkoKSBjYW4gYWRkIGEgY2hpbGQgcmVzb3VyY2UuICBEbyBub3QKJiM0MzsJCSAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzCiYjNDM7CQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcy0mZ3Q7ZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07CiYjNDM7CQltYXBwZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXBwZWQ7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQomIzQzOy8qKgomIzQzOyAqIGRheF9rbWVtX2RvX2hvdHJlbW92ZSAtIGhvdC1yZW1vdmUgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2UKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb24KJiM0MzsgKiBhdG9taWNhbGx5OiBlaXRoZXIgYWxsIHJhbmdlcyBhcmUgb2ZmbGluZWQgYW5kIHJlbW92ZWQsIG9yIG5vbmUgYXJlIGFuZAomIzQzOyAqIHRoZSBkZXZpY2UgaXMgcmV0dXJuZWQgdG8gaXRzIHByaW9yIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwKJiM0MzsJCQkJIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiYjNDM7CXN0cnVjdCByYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X2RheC0mZ3Q7bnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFuZ2VzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENvbGxlY3QgdGhlIHJhbmdlcyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQgZHVyaW5nIHByb2JlLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7CiYjNDM7CiYjNDM7CQlpZiAoIWRhdGEtJmd0O3Jlc1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhbmdlc1tucl9yYW5nZXMmIzQzOyYjNDM7XSA9IHJhbmdlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovCiYjNDM7CWlmICghbnJfcmFuZ2VzKSB7CiYjNDM7CQlrZnJlZShyYW5nZXMpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyhyYW5nZXMsIG5yX3Jhbmdlcyk7CiYjNDM7CWtmcmVlKHJhbmdlcyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlOwomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7aG90cmVtb3ZlIGZhaWxlZCwgZGV2aWNlIGxlZnQgb25saW5lOiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LAomIzQzOwkJCQkgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyAtIHJlbW92ZSB0aGUgZGF4IG1lbW9yeSByZXNvdXJjZXMKJiM0MzsgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2UKJiM0MzsgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmcKJiM0MzsgKgomIzQzOyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgZGV2aWNlIHVuYmluZCBvY2N1cnMgYmVmb3JlIG1lbW9yeSBpcyBob3RyZW1vdmVkLCB3ZSBjYW4gbmV2ZXIKJiM0MzsJICogcmVtb3ZlIHRoZSBtZW1vcnkgKHJlcXVpcmVzIHJlYm9vdCkuICBBdHRlbXB0aW5nIGFuIG9mZmxpbmUgb3BlcmF0aW9uCiYjNDM7CSAqIGhlcmUgbWF5IGNhdXNlIGRlYWRsb2NrIGFuZCBhIGZhaWx1cmUgdG8gZmluaXNoIHRoZSB1bmJpbmQuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IFRoaXMgbGVha3MgdGhlIHJlc291cmNlcy4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOKCgoZGF0YS0mZ3Q7c3RhdGUgIT0gREFYX0tNRU1fVU5QTFVHR0VEKSAmYW1wOyZhbXA7CiYjNDM7CQkgIChkYXRhLSZndDtzdGF0ZSAhPSBNTU9QX09GRkxJTkUpKSwKJiM0MzsJCSAmIzM0O0hvdHBsdWcgbWVtb3J5IHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFkYXRhLSZndDtyZXNbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyZW1vdmVfcmVzb3VyY2UoZGF0YS0mZ3Q7cmVzW2ldKTsKJiM0MzsJCWtmcmVlKGRhdGEtJmd0O3Jlc1tpXSk7CiYjNDM7CQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGF4X2ttZW1fcGFyc2Vfc3RhdGUoY29uc3QgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJaW50IG9ubGluZV90eXBlOwomIzQzOwomIzQzOwkvKiAmIzM0O3VucGx1Z2dlZCYjMzQ7IGlzIGttZW0tc3BlY2lmaWMgLSB0aGUgcmVzdCBtYXAgdG8gTU1PUF8gKi8KJiM0MzsJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgJiMzNDt1bnBsdWdnZWQmIzM0OykpCiYjNDM7CQlyZXR1cm4gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwomIzQzOwlvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpOwomIzQzOwkvKiBEaXNhbGxvdyAmIzM0O29mZmxpbmUmIzM0OzogaXQmIzM5O3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi8KJiM0MzsJaWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gb25saW5lX3R5cGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJY29uc3QgY2hhciAqc3RhdGVfc3RyOwomIzQzOwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJc3RhdGVfc3RyID0gJiMzNDt1bnBsdWdnZWQmIzM0OzsKJiM0MzsJZWxzZQomIzQzOwkJc3RhdGVfc3RyID0gbWhwX29ubGluZV90eXBlX3RvX3N0cihkYXRhLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslc1xuJiMzNDssIHN0YXRlX3N0ciA/OiAmIzM0O3Vua25vd24mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTsKJiM0MzsJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IG9ubGluZV90eXBlOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmICghZGF0YSkKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CiYjNDM7CW9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTsKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgREFYX0tNRU1fVU5QTFVHR0VEKQomIzQzOwkJcmV0dXJuIG9ubGluZV90eXBlOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtkYXRhLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBpbiByZXF1ZXN0ZWQgc3RhdGUgKi8KJiM0MzsJaWYgKGRhdGEtJmd0O3N0YXRlID09IG9ubGluZV90eXBlKQomIzQzOwkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJaWYgKG9ubGluZV90eXBlID09IERBWF9LTUVNX1VOUExVR0dFRCkgewomIzQzOwkJcmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJZGF0YS0mZ3Q7c3RhdGUgPSBEQVhfS01FTV9VTlBMVUdHRUQ7CiYjNDM7CQlyZXR1cm4gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9ubGluaW5nIGlzIG9ubHkgYWxsb3dlZCBmcm9tIHRoZSB1bnBsdWdnZWQgc3RhdGUuICovCiYjNDM7CWlmIChkYXRhLSZndDtzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovCiYjNDM7CXJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWRhdGEtJmd0O3N0YXRlID0gb25saW5lX3R5cGU7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzO3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7CiYjNDM7CiBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2xlbiA9IDAsIG9yaWdfbGVuID0gMDsKIAlzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTsKLQlpbnQgaSwgcmMsIG1hcHBlZCA9IDA7Ci0JbWhwX3QgbWhwX2ZsYWdzOwomIzQzOwlpbnQgaSwgcmM7CiAJaW50IG51bWFfbm9kZTsKJiM0MzsJaW50IG9ubGluZV90eXBlOwogCWludCBhZGlzdCA9IE1FTVRJRVJfREVGQVVMVF9EQVhfQURJU1RBTkNFOwogCiAJLyoKQEAgLTEzMyw2OCAmIzQzOzQ0NSwzOCBAQCBzdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCkKIAlpZiAocmMgJmx0OyAwKQogCQlnb3RvIGVycl9yZWdfbWdpZDsKIAlkYXRhLSZndDttZ2lkID0gcmM7CiYjNDM7CWRhdGEtJmd0O251bWFfbm9kZSA9IG51bWFfbm9kZTsKJiM0MzsJZGF0YS0mZ3Q7ZGV2X2RheCA9IGRldl9kYXg7CiYjNDM7CWRhdGEtJmd0O3N0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGF0YS0mZ3Q7bG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZGV2X2RheC0mZ3Q7bnJfcmFuZ2U7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0KLQkJcmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCAmYW1wO3JhbmdlKTsKLQkJaWYgKHJjKQotCQkJY29udGludWU7Ci0KLQkJLyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi8KLQkJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZSksIGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWRldl93YXJuKGRldiwgJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxuJiMzNDssCi0JCQkJCWksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotCQkJLyoKLQkJCSAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4mIzM5O3QKLQkJCSAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS4KLQkJCSAqLwotCQkJaWYgKG1hcHBlZCkKLQkJCQljb250aW51ZTsKLQkJCXJjID0gLUVCVVNZOwotCQkJZ290byBlcnJfcmVxdWVzdF9tZW07Ci0JCX0KLQkJZGF0YS0mZ3Q7cmVzW2ldID0gcmVzOwotCi0JCS8qCi0JCSAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyCi0JCSAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdAotCQkgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFncwotCQkgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuCi0JCSAqLwotCQlyZXMtJmd0O2ZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTsKIAotCQltaHBfZmxhZ3MgPSBNSFBfTklEX0lTX01HSUQ7Ci0JCWlmIChkZXZfZGF4LSZndDttZW1tYXBfb25fbWVtb3J5KQotCQkJbWhwX2ZsYWdzIHw9IE1IUF9NRU1NQVBfT05fTUVNT1JZOwomIzQzOwlyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzb3VyY2VzOwogCi0JCS8qCi0JCSAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYyYjMzk7ZCBrZXJuZWxzIHdpbGwgbm90IHRyZWF0Ci0JCSAqIHRoaXMgYXMgUkFNIGF1dG9tYXRpY2FsbHkuCi0JCSAqLwotCQlyYyA9IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoZGF0YS0mZ3Q7bWdpZCwgcmFuZ2Uuc3RhcnQsCi0JCQkJcmFuZ2VfbGVuKCZhbXA7cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyk7CiYjNDM7CS8qIFJlc29sdmUgc3lzdGVtIGRlZmF1bHQgYXQgYmluZCB0aW1lIGluIGNhc2UgaXQgY2hhbmdlZCAqLwomIzQzOwlvbmxpbmVfdHlwZSA9IGRldl9kYXgtJmd0O29ubGluZV90eXBlOwomIzQzOwlpZiAob25saW5lX3R5cGUgPT0gREFYX09OTElORV9ERUZBVUxUKQomIzQzOwkJb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTsKIAotCQlpZiAocmMpIHsKLQkJCWRldl93YXJuKGRldiwgJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXG4mIzM0OywKLQkJCQkJaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Ci0JCQlyZW1vdmVfcmVzb3VyY2UocmVzKTsKLQkJCWtmcmVlKHJlcyk7Ci0JCQlkYXRhLSZndDtyZXNbaV0gPSBOVUxMOwotCQkJaWYgKG1hcHBlZCkKLQkJCQljb250aW51ZTsKLQkJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOwotCQl9Ci0JCW1hcHBlZCYjNDM7JiM0Mzs7Ci0JfQomIzQzOwkvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovCiYjNDM7CXJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9ob3RwbHVnOwomIzQzOwlkYXRhLSZndDtzdGF0ZSA9IG9ubGluZV90eXBlOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZGF0YSk7CiYjNDM7CXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHN0YXRlIHN5c2ZzIGVudHJ5XG4mIzM0Oyk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX3JlcXVlc3RfbWVtOgomIzQzO2Vycl9ob3RwbHVnOgomIzQzOwlkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTsKJiM0MztlcnJfcmVzb3VyY2VzOgomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAltZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLSZndDttZ2lkKTsKIGVycl9yZWdfbWdpZDoKIAlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CkBAIC0yMDgsNjMgJiM0Mzs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpCiB7Ci0JaW50IGksIHN1Y2Nlc3MgPSAwOwogCWludCBub2RlID0gZGV2X2RheC0mZ3Q7dGFyZ2V0X25vZGU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtkZXZfZGF4LSZndDtkZXY7CiAJc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAomIzQzOwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmYW1wO2Rldl9hdHRyX3N0YXRlKTsKIAkvKgotCSAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90Ci0JICogb2ZmbGluZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVtb3ZlX21lbW9yeSgpIHdpbGwgZmFpbCwgYW5kCi0JICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2UKLQkgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuCiYjNDM7CSAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW4KJiM0MzsJICogZGVhZGxvY2sgYSB0YXNrIGFzIHVuYmluZCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQpLiAgVW5mb3J0dW5hdGVseSB3ZQomIzQzOwkgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbAomIzQzOwkgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uCiYjNDM7CSAqCiYjNDM7CSAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuCiAJICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IGRldl9kYXgtJmd0O25yX3JhbmdlOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcmFuZ2UgcmFuZ2U7Ci0JCWludCByYzsKLQotCQlyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksICZhbXA7cmFuZ2UpOwotCQlpZiAocmMpCi0JCQljb250aW51ZTsKLQotCQkvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovCi0JCWlmICghZGF0YS0mZ3Q7cmVzW2ldKSB7Ci0JCQlzdWNjZXNzJiM0MzsmIzQzOzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oJmFtcDtyYW5nZSkpOwotCQlpZiAocmMgPT0gMCkgewotCQkJcmVtb3ZlX3Jlc291cmNlKGRhdGEtJmd0O3Jlc1tpXSk7Ci0JCQlrZnJlZShkYXRhLSZndDtyZXNbaV0pOwotCQkJZGF0YS0mZ3Q7cmVzW2ldID0gTlVMTDsKLQkJCXN1Y2Nlc3MmIzQzOyYjNDM7OwotCQkJY29udGludWU7Ci0JCX0KJiM0MzsJaWYgKGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShkYXRhLSZndDtzdGF0ZSkpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxuJiMzNDspOwogCQlhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7Ci0JCWRldl9lcnIoZGV2LAotCQkJJiMzNDttYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNhbm5vdCBiZSBob3RyZW1vdmVkIHVudGlsIHRoZSBuZXh0IHJlYm9vdFxuJiMzNDssCi0JCQkJaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0gZWxzZSBpZiAoZGF0YS0mZ3Q7c3RhdGUgPT0gTU1PUF9PRkZMSU5FICZhbXA7JmFtcDsKJiM0MzsJICAgIGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKSkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O1VucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiAJfQogCi0JaWYgKHN1Y2Nlc3MgJmd0Oz0gZGV2X2RheC0mZ3Q7bnJfcmFuZ2UpIHsKLQkJbWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS0mZ3Q7bWdpZCk7Ci0JCWtmcmVlKGRhdGEtJmd0O3Jlc19uYW1lKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCQkvKgotCQkgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy4KLQkJICogSWYgbm90LCB3ZSBoYXZlIG1lbW9yeSBibG9ja3MgbGVmdCB3aGljaCBjYW4gYmUKLQkJICogb2ZmbGluZWQvb25saW5lZCBsYXRlci4gV2UgbmVlZCB0byBrZWVwIG1lbW9yeV9kZXZfdHlwZQotCQkgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kCi0JCSAqIHRpbGwgbmV4dCByZWJvb3QuCi0JCSAqLwotCQljbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpOwotCX0KJiM0MzsJZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7CiYjNDM7CW1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtJmd0O21naWQpOwomIzQzOwlrZnJlZShkYXRhLSZndDtyZXNfbmFtZSk7CiYjNDM7CWtmcmVlKGRhdGEpOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuCiYjNDM7CSAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlCiYjNDM7CSAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGUKJiM0MzsJICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZAomIzQzOwkgKiB0aWxsIG5leHQgcmVib290LgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2Rldl9kYXgtJmd0O2RldjsKJiM0MzsKJiM0MzsJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmFtcDtkZXZfYXR0cl9zdGF0ZSk7CiYjNDM7CiAJLyoKIAkgKiBXaXRob3V0IGhvdHJlbW92ZSBwdXJwb3NlbHkgbGVhayB0aGUgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHRoZQogCSAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAmIzM5OzAmIzM5OyB0byAtJmd0O3JlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvcG1lbS5jIGIvZHJpdmVycy9kYXgvcG1lbS5jCmluZGV4IGJlZTkzMDY2YTg0OTc3Li5lN2FkYWNlNjkxOTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L3BtZW0uYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJLnBnbWFwID0gJmFtcDtwZ21hcCwKIAkJLnNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZSksCiAJCS5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsCiYjNDM7CQkub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsCiAJfTsKIAogCXJldHVybiBkZXZtX2NyZWF0ZV9kZXZfZGF4KCZhbXA7ZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCA0NjNkYzAyZjZjZmYwNS4uOWY1ZWYwMzA5Zjc3MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5X2hvdHBsdWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmFuZ2UuaCZndDsKIAogI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgJmx0OyZsdDsgU0VDVElPTl9TSVpFX0JJVFMpCiAKQEAgLTEwMCw2ICYjNDM7MTAxLDI3IEBAIGludCBhcmNoX2dldF9tZW1vcnlfcGh5c19kZXZpY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4pOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTsKIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTsKIAomIzQzOy8qKgomIzQzOyAqIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlIC0gYWxpZ24gYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRvIG1lbW9yeSBibG9ja3MKJiM0MzsgKiBAcmFuZ2U6IHRoZSBpbnB1dCByYW5nZSB0byBhbGlnbgomIzQzOyAqCiYjNDM7ICogQWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5kIGFkZHJlc3MgZG93biB0byBtZW1vcnkgYmxvY2sKJiM0MzsgKiBib3VuZGFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zIHdoaWNoIG11c3QKJiM0MzsgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIGFsaWduZWQgcmFuZ2UuIENhbGxlcnMgc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkCiYjNDM7ICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgJmx0OyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhbmdlIG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDsKJiM0MzsKJiM0MzsJYWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLSZndDtzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSk7CiYjNDM7CWFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7ZW5kICYjNDM7IDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsaWduZWQ7CiYjNDM7fQomIzQzOwogc3RydWN0IG1lbW9yeV9ub3RpZnkgewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTsKIAogZXh0ZXJuIGludCBtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIoY29uc3QgY2hhciAqc3RyKTsKJiM0Mztjb25zdCBjaGFyICptaHBfb25saW5lX3R5cGVfdG9fc3RyKGludCBvbmxpbmVfdHlwZSk7CiAKIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi8KIGV4dGVybiBib29sIG1vdmFibGVfbm9kZV9lbmFibGVkOwpAQCAtMjY3LDYgJiM0MzsyNjgsNyBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKTsKIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9CkBAIC0yODMsNiAmIzQzOzI4NSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywKJiM0MzsJCQkJCQkgICBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjk0LDYgJiM0MzszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7CiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwKIAkJCSAgICAgICBtaHBfdCBtaHBfZmxhZ3MpOwomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkJY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQllbnVtIG1tb3Agb25saW5lX3R5cGUpOwogZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsCiAJCQkJICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLAogCQkJCSAgICAgbWhwX3QgbWhwX2ZsYWdzKTsKQEAgLTMxNiw2ICYjNDM7MzI3LDggQEAgZXh0ZXJuIHN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLAogZXh0ZXJuIGludCBhcmNoX2NyZWF0ZV9saW5lYXJfbWFwcGluZyhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCSAgICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBhcmNoX3JlbW92ZV9saW5lYXJfbWFwcGluZyh1NjQgc3RhcnQsIHU2NCBzaXplKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjdkNTZlMGM2ZWRlMGNjIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTIzOSw2ICYjNDM7MjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKQogCiAJcmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7CiAKIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKQEAgLTEzMzcsNyAmIzQzOzEzMzgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2hvdHBsdWdfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUpCiAKIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKIHsKLQltZW0tJmd0O29ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7CiYjNDM7CWVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7CiYjNDM7CiYjNDM7CW1lbS0mZ3Q7b25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7CiAJcmV0dXJuIGRldmljZV9vbmxpbmUoJmFtcDttZW0tJmd0O2Rldik7CiB9CiAKQEAgLTE0OTEsNyAmIzQzOzE0OTQsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogICoKICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcKICAqLwotaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKJiM0MztzdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLAomIzQzOwkJCQkgZW51bSBtbW9wIG9ubGluZV90eXBlKQogewogCXN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07CiAJZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7CkBAIC0xNTgxLDggJiM0MzsxNTg1LDkgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncykKIAkJbWVyZ2Vfc3lzdGVtX3JhbV9yZXNvdXJjZShyZXMpOwogCiAJLyogb25saW5lIHBhZ2VzIGlmIHJlcXVlc3RlZCAqLwotCWlmIChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSAhPSBNTU9QX09GRkxJTkUpCi0JCXdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgTlVMTCwgb25saW5lX21lbW9yeV9ibG9jayk7CiYjNDM7CWlmIChvbmxpbmVfdHlwZSAhPSBNTU9QX09GRkxJTkUpCiYjNDM7CQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7b25saW5lX3R5cGUsCiYjNDM7CQkJCSAgIG9ubGluZV9tZW1vcnlfYmxvY2spOwogCiAJcmV0dXJuIHJldDsKIGVycm9yOgpAQCAtMTU5OCw3ICYjNDM7MTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi8KJiM0MztpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLAomIzQzOwkJCQkgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovCiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2MjYsNyAmIzQzOzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAKLS8qCiYjNDM7LyoqCiYjNDM7ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlCiYjNDM7ICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZAomIzQzOyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlCiYjNDM7ICogQHNpemU6IFNpemUgb2YgdGhlIG1lbW9yeSByYW5nZSBpbiBieXRlcwomIzQzOyAqIEByZXNvdXJjZV9uYW1lOiBSZXNvdXJjZSBuYW1lIGluIGZvcm1hdCAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsKJiM0MzsgKiBAbWhwX2ZsYWdzOiBNZW1vcnkgaG90cGx1ZyBmbGFncwomIzQzOyAqIEBvbmxpbmVfdHlwZTogQXV0by1PbmxpbmUgYmVoYXZpb3IgKG9mZmxpbmUsIG9ubGluZSwga2VybmVsLCBtb3ZhYmxlKQomIzQzOyAqCiAgKiBBZGQgc3BlY2lhbCwgZHJpdmVyLW1hbmFnZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0gYXMgc3lzdGVtIFJBTS4gU3VjaAogICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW0KICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCwKQEAgLTE2MzQsNiAmIzQzOzE2NTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKICAqCiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhCiAgKiBrZXhlYyBrZXJuZWwgb3IgZm9yIHBsYWNpbmcga2V4ZWMgaW1hZ2VzOgomIzQzOyAqCiAgKiAtIFRoZSBib290aW5nIGtlcm5lbCBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZXJtaW5pbmcgaG93IHRoaXMgbWVtb3J5IHdpbGwgYmUKICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pCiAgKiAtIENvb3JkaW5hdGlvbiB3aXRoIGEgaHlwZXJ2aXNvciBpcyByZXF1aXJlZCBiZWZvcmUgdGhpcyBtZW1vcnkKQEAgLTE2NDYsOSAmIzQzOzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CiAgKgogICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0CiAgKiAmIzM0O1N5c3RlbSBSQU0gKCREUklWRVIpJiMzNDsuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAotCQkJICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKQomIzQzO2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCWNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncywKJiM0MzsJCWVudW0gbW1vcCBvbmxpbmVfdHlwZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmM7CkBAIC0xNjU4LDYgJiM0MzsxNjgxLDkgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAmIzM5OykmIzM5OykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKG9ubGluZV90eXBlICZsdDsgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlICZndDsgTU1PUF9PTkxJTkVfTU9WQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7CkBAIC0xNjY2LDcgJiM0MzsxNjkyLDcgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJjID0gYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzKTsKJiM0MzsJcmMgPSBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncywgb25saW5lX3R5cGUpOwogCWlmIChyYyAmbHQ7IDApCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKQEAgLTE2NzQsNiAmIzQzOzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAl1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTsKIAlyZXR1cm4gcmM7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsICYjMzQ7a21lbSYjMzQ7KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeQomIzQzOyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWQKJiM0MzsgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZQomIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXMKJiM0MzsgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgJiMzNDtTeXN0ZW0gUkFNICgkRFJJVkVSKSYjMzQ7CiYjNDM7ICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3MKJiM0MzsgKgomIzQzOyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5CiYjNDM7ICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci4KJiM0MzsgKgomIzQzOyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKJiM0MzsJCQkgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsCiYjNDM7CQkJbWhwX2ZsYWdzLAomIzQzOwkJCW1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTsKIAogLyoKQEAgLTIzNzksNTggJiM0MzsyNDI5LDk4IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZykKICAqLwogaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7CiYjNDM7CXN0cnVjdCByYW5nZSByYW5nZSA9IHsgLnN0YXJ0ID0gc3RhcnQsIC5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSB9OwomIzQzOwomIzQzOwlyZXR1cm4gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoJmFtcDtyYW5nZSwgMSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXMKJiM0MzsgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmUKJiM0MzsgKiBAbnJfcmFuZ2VzOiBudW1iZXIgb2YgZW50cmllcyBpbiBAcmFuZ2VzCiYjNDM7ICoKJiM0MzsgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWQKJiM0MzsgKiBhZ2FpbnN0IG90aGVyIGhvdHBsdWcgb3BlcmF0aW9ucyBieSBhIHNpbmdsZSBsb2NrX2RldmljZV9ob3RwbHVnKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueQomIzQzOyAqIHJhbmdlIGZhaWxzLCB0aGUgZW50aXJlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYW5kIG5vdGhpbmcgaXMgcmVtb3ZlZC4KJiM0MzsgKiBUaGlzIHByb3ZpZGVzIGEgZnVsbHkgYXRvbWljIHNlbWFudGljIGZvciB1bnBsdWdnaW5nIGFuIGVudGlyZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBFYWNoIHJhbmdlIG11c3QgYmUgbWVtb3J5LWJsb2NrIGFsaWduZWQgaW4gc3RhcnQgYW5kIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXMKJiM0MzsgKiBiZWVuIHJlbW92ZWQuCiYjNDM7ICovCiYjNDM7aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7CiAJdWludDhfdCAqb25saW5lX3R5cGVzLCAqdG1wOwotCWludCByYzsKJiM0MzsJaW50IGksIHJjID0gMDsKIAotCWlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwKLQkgICAgIUlTX0FMSUdORUQoc2l6ZSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHwgIXNpemUpCiYjNDM7CWlmICghcmFuZ2VzIHx8IG5yX3JhbmdlcyAmbHQ7PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0OwomIzQzOwkJdTY0IHNpemUgPSByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pOwomIzQzOwomIzQzOwkJaWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fAomIzQzOwkJICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJbWJfdG90YWwgJiM0Mzs9IHNpemUgLyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpOwomIzQzOwl9CiYjNDM7CiAJLyoKLQkgKiBXZSYjMzk7bGwgcmVtZW1iZXIgdGhlIG9sZCBvbmxpbmUgdHlwZSBvZiBlYWNoIG1lbW9yeSBibG9jaywgc28gd2UgY2FuCi0JICogdHJ5IHRvIHJldmVydCB3aGF0ZXZlciB3ZSBkaWQgd2hlbiBvZmZsaW5pbmcgb25lIG1lbW9yeSBibG9jayBmYWlscwotCSAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuCiYjNDM7CSAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLAomIzQzOwkgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnQKJiM0MzsJICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLgogCSAqLwotCW9ubGluZV90eXBlcyA9IGttYWxsb2NfYXJyYXkobWJfY291bnQsIHNpemVvZigqb25saW5lX3R5cGVzKSwKJiM0MzsJb25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl90b3RhbCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvbmxpbmVfdHlwZXMpCiAJCXJldHVybiAtRU5PTUVNOwotCS8qCi0JICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluCi0JICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJiMzOTtsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW4KLQkgKiB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKCkuCi0JICovCi0JbWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7CiYjNDM7CW1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpOwogCiAJbG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiYjNDM7CS8qIFBoYXNlIDE6IG9mZmxpbmUgZXZlcnkgYmxvY2sgaW4gZXZlcnkgcmFuZ2UuICovCiAJdG1wID0gb25saW5lX3R5cGVzOwotCXJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCAmYW1wO3RtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwgcmFuZ2VfbGVuKCZhbXA7cmFuZ2VzW2ldKSwKJiM0MzsJCQkJCSZhbXA7dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiAKIAkvKgotCSAqIEluIGNhc2Ugd2Ugc3VjY2VlZGVkIHRvIG9mZmxpbmUgYWxsIG1lbW9yeSwgcmVtb3ZlIGl0LgotCSAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS4KJiM0MzsJICogUGhhc2UgMjogUmVtb3ZlIGVhY2ggcmFuZ2UuIFRoaXMgZXNzZW50aWFsbHkgY2Fubm90IGZhaWwgYXMgd2UgaG9sZAomIzQzOwkgKiB0aGUgaG90cGx1ZyBsb2NrIC4gV0FSTiBpZiB0aGF0IGFzc3VtcHRpb24gaXMgZXZlciBicm9rZW4uCiAJICovCiAJaWYgKCFyYykgewotCQlyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCYjMzQ7JXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZCYjMzQ7LCBfX2Z1bmNfXywgcmMpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCwKJiM0MzsJCQkJCSAgICAgICByYW5nZV9sZW4oJmFtcDtyYW5nZXNbaV0pKTsKJiM0MzsJCQlpZiAoV0FSTl9PTl9PTkNFKHJjKSkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDslczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkJiMzNDssCiYjNDM7CQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCi0JLyoKLQkgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbAotCSAqIChuYWNrZWQgYnkgYSBub3RpZmllciksIGl0IGJhcmVseSBldmVyIGhhcHBlbnMuCi0JICovCiYjNDM7CS8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi8KIAlpZiAocmMpIHsKIAkJdG1wID0gb25saW5lX3R5cGVzOwotCQl3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsICZhbXA7dG1wLAotCQkJCSAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3JhbmdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwKJiM0MzsJCQkJCSAgIHJhbmdlX2xlbigmYW1wO3Jhbmdlc1tpXSksICZhbXA7dG1wLAomIzQzOwkJCQkJICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7CiAJfQogCXVubG9ja19kZXZpY2VfaG90cGx1ZygpOwogCiAJa2ZyZWUob25saW5lX3R5cGVzKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKaW5kZXggNmU1OWI4ZjYzZTQxNjMuLjhjMmI0Zjk3NjE5Y2VjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZQpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgVEFSR0VUUyAmIzQzOz0gY29yZQogVEFSR0VUUyAmIzQzOz0gY3B1ZnJlcQogVEFSR0VUUyAmIzQzOz0gY3B1LWhvdHBsdWcKIFRBUkdFVFMgJiM0Mzs9IGRhbW9uCiYjNDM7VEFSR0VUUyAmIzQzOz0gZGF4CiBUQVJHRVRTICYjNDM7PSBkZXZpY2VzL2Vycm9yX2xvZ3MKIFRBUkdFVFMgJiM0Mzs9IGRldmljZXMvcHJvYmUKIFRBUkdFVFMgJiM0Mzs9IGRtYWJ1Zi1oZWFwcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWE0ZjNkNzNhNWJhYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO2FsbDoKJiM0MzsKJiM0MztURVNUX1BST0dTIDo9IGRheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZwpAQCAtMCwwICYjNDM7MSw0IEBACiYjNDM7Q09ORklHX0RFVl9EQVg9bQomIzQzO0NPTkZJR19ERVZfREFYX0tNRU09bQomIzQzO0NPTkZJR19NRU1PUllfSE9UUExVRz15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwyMDcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gJiMzNDtzdGF0ZSYjMzQ7IHN5c2ZzIGF0dHJpYnV0ZToKJiM0MzsjICAgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlICAtJmd0OyAgdW5wbHVnZ2VkIHwgb25saW5lIHwgb25saW5lX21vdmFibGUKJiM0MzsjCiYjNDM7IyBUaGUgdGVzdCBuZWVkcyBhIGRheCBkZXZpY2UgYWxyZWFkeSBib3VuZCB0byB0aGUga21lbSBkcml2ZXIuCiYjNDM7IyBJZiBubyBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQgdGhlIHRlc3RzIFNLSVAuCiYjNDM7IwomIzQzOyMgQSBkYXggZGV2aWNlIGNhbiBiZSBwcm92aXNpb25lZCB3aXRoIHRoZSBtZW1tYXA9IGJvb3QgcGFyYW0sIGUuZy46CiYjNDM7IyAgIG1lbW1hcD0yRyE0RwomIzQzOyMKJiM0MzsjIHRoZW4sIGluIHRoZSBib290ZWQgc3lzdGVtOgomIzQzOyMKJiM0MzsjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mCiYjNDM7IyAgIGRheGN0bCByZWNvbmZpZ3VyZS1kZXZpY2UgLU4gLW0gc3lzdGVtLXJhbSBkYXgwLjAgICAjIGJpbmQga21lbQomIzQzOyMgICAuL2RheC1rbWVtLWhvdHBsdWcuc2gKJiM0MzsKJiM0MzsjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzEwOTEKJiM0MztESVI9JiMzNDskKGRpcm5hbWUgJiMzNDskKHJlYWRsaW5rIC1mICYjMzQ7JDAmIzM0OykmIzM0OykmIzM0OwomIzQzOy4gJiMzNDskRElSJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzOwomIzQzO0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzCiYjNDM7CiYjNDM7bWVtdG90YWxfa2IoKSB7IGF3ayAmIzM5Oy9eTWVtVG90YWw6LyB7cHJpbnQgJDJ9JiMzOTsgL3Byb2MvbWVtaW5mbzsgfQomIzQzO2dldF9zdGF0ZSgpIHsgY2F0ICYjMzQ7JEhQJiMzNDsgMiZndDsvZGV2L251bGw7IH0KJiM0MzsjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlCiYjNDM7IyB3cml0ZSYjMzk7cyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpCiYjNDM7c2V0X3N0YXRlKCkgeyBlY2hvICYjMzQ7JDEmIzM0OyAmZ3Q7ICYjMzQ7JEhQJiMzNDsgMiZndDsvZGV2L251bGw7IH0KJiM0MzsKJiM0MztmaW5kX2ttZW1fZGF4KCkgewomIzQzOwlsb2NhbCBkIGRydgomIzQzOwlmb3IgZCBpbiAmIzM0OyREQVhfQkFTRSYjMzQ7L2RheCo7IGRvCiYjNDM7CQlbIC1lICYjMzQ7JGQvc3RhdGUmIzM0OyBdIHx8IGNvbnRpbnVlCiYjNDM7CQlkcnY9JChyZWFkbGluayAmIzM0OyRkL2RyaXZlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwkJWyAmIzM0OyQoYmFzZW5hbWUgJiMzNDske2RydjotfSYjMzQ7KSYjMzQ7ID0ga21lbSBdIHx8IGNvbnRpbnVlCiYjNDM7CQliYXNlbmFtZSAmIzM0OyRkJiMzNDsKJiM0MzsJCXJldHVybiAwCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7a3RhcF9wcmludF9oZWFkZXIKJiM0MzsKJiM0MztpZiBbICYjMzQ7JFVJRCYjMzQ7ICE9IDAgXTsgdGhlbgomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO0RBWD0kKGZpbmRfa21lbV9kYXgpCiYjNDM7aWYgWyAteiAmIzM0OyREQVgmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDtubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzO0hQPSREQVhfQkFTRS8kREFYL3N0YXRlCiYjNDM7T1JJRz0kKGdldF9zdGF0ZSkKJiM0MzsKJiM0MzsjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhbgomIzQzOyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC4KJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyAhPSAwIF0gfHwgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ICE9IHVucGx1Z2dlZCBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskREFYOiBjYW5ub3QgcmVhY2ggJiMzOTt1bnBsdWdnZWQmIzM5OyBiYXNlbGluZSAobWVtb3J5IGluIHVzZT8pJiMzNDsKJiM0MzsJWyAtbiAmIzM0OyRPUklHJiMzNDsgXSAmYW1wOyZhbXA7IHNldF9zdGF0ZSAmIzM0OyRPUklHJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO2ZpCiYjNDM7bXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpCiYjNDM7CiYjNDM7RFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW0KJiM0MztBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzCiYjNDM7CiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDt1c2luZyAkREFYIChpbml0aWFsIHN0YXRlIHdhczogJE9SSUcpJiMzNDsKJiM0MztrdGFwX3NldF9wbGFuIDExCiYjNDM7CiYjNDM7c2V0X3N0YXRlIG9ubGluZTsgcmM9JD8KJiM0MzttdF9vbmxpbmU9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgPSAwIF0gJmFtcDsmYW1wOyBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmUgXSAmYW1wOyZhbXA7IFsgJiMzNDskbXRfb25saW5lJiMzNDsgLWd0ICYjMzQ7JG10X3VucGx1Z2dlZCYjMzQ7IF07IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmU6IHN0YXRlPW9ubGluZSwgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfb25saW5lIGtCJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLSZndDsgJG10X29ubGluZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lOyByYz0kPwomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lIGlkZW1wb3RlbnQmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmUgaWRlbXBvdGVudDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/CiYjNDM7aWYgWyAmIzM0OyRyYyYjMzQ7ICE9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7cmVqZWN0IG9ubGluZV9tb3ZhYmxlIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7b25saW5lLSZndDtvbmxpbmVfbW92YWJsZSBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD8KJiM0MzttdD0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IHVucGx1Z2dlZCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1sdCAmIzM0OyRtdF9vbmxpbmUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lOiBNZW1Ub3RhbCAkbXRfb25saW5lIC0mZ3Q7ICRtdCBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VucGx1ZyBmcm9tIG9ubGluZTogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbCAkbXRfb25saW5lIC0mZ3Q7ICRtdCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/CiYjNDM7bXRfbW92YWJsZT0kKG1lbXRvdGFsX2tiKQomIzQzO2lmIFsgJiMzNDskcmMmIzM0OyA9IDAgXSAmYW1wOyZhbXA7IFsgJiMzNDskKGdldF9zdGF0ZSkmIzM0OyA9IG9ubGluZV9tb3ZhYmxlIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10X21vdmFibGUmIzM0OyAtZ3QgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXRfbW92YWJsZSBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O29ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MzsjIFRoZSBvbmxpbmUgLSZndDsgdW5wbHVnIC0mZ3Q7IG9ubGluZV9tb3ZhYmxlIC0mZ3Q7IHVucGx1ZyBjeWNsZSBvbmNlIHJlZ3Jlc3NlZDoKJiM0MzsjIGEgcmUtb25saW5lIGZhaWxlZCB0byByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyB0aGUgZmluYWwgdW5wbHVnCiYjNDM7IyByZXBvcnRlZCBzdWNjZXNzIHdoaWxlIGxlYXZpbmcgdGhlIG1lbW9yeSBvbmxpbmUuICBBc3NlcnQgaXQgaXMgcmVhbGx5IGZyZWVkLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/CiYjNDM7bXQ9JChtZW10b3RhbF9rYikKJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7dW5wbHVnIGZyb20gbW92YWJsZSBub3QgYWNjZXB0ZWQgKG1lbW9yeSBpbiB1c2U/KSByYz0kcmMmIzM0OwomIzQzO2VsaWYgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gdW5wbHVnZ2VkIF0gJmFtcDsmYW1wOyBbICYjMzQ7JG10JiMzNDsgLWx0ICYjMzQ7JG10X21vdmFibGUmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC0mZ3Q7ICRtdCBrQiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLSZndDsgJG10JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO3NldF9zdGF0ZSBvbmxpbmVfa2VybmVsOyByYz0kPwomIzQzO210PSQobWVtdG90YWxfa2IpCiYjNDM7aWYgWyAmIzM0OyRyYyYjMzQ7ID0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gb25saW5lX2tlcm5lbCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdCYjMzQ7IC1ndCAmIzM0OyRtdF91bnBsdWdnZWQmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtJmd0OyAkbXQga0ImIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmVfa2VybmVsOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsPSRtdCYjMzQ7CiYjNDM7ZmkKJiM0MztzZXRfc3RhdGUgdW5wbHVnZ2VkCiYjNDM7CiYjNDM7YmVmb3JlPSQoZ2V0X3N0YXRlKQomIzQzO3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD8KJiM0MztpZiBbICYjMzQ7JHJjJiMzNDsgIT0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyQoZ2V0X3N0YXRlKSYjMzQ7ID0gJiMzNDskYmVmb3JlJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O3JlamVjdCBpbnZhbGlkIHN0YXRlIHN0cmluZyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O2ludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgUnVuIHNldmVyYWwgb25saW5lL3VucGx1ZyBjeWNsZXMgYW5kIHJlcXVpcmUgdGhhdCBlYWNoIG9uZSBhZGRzL3JlbW92ZXMgbWVtb3J5CiYjNDM7c2V0X3N0YXRlIHVucGx1Z2dlZAomIzQzO2N5Y2xlX29rPTE7IGZhaWxfaT0wCiYjNDM7Zm9yIGkgaW4gMSAyIDM7IGRvCiYjNDM7CWlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaQomIzQzOwlvbj0kKG1lbXRvdGFsX2tiKQomIzQzOwlpZiAhIHNldF9zdGF0ZSB1bnBsdWdnZWQ7IHRoZW4gY3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVhazsgZmkKJiM0MzsJb2ZmPSQobWVtdG90YWxfa2IpCiYjNDM7CWlmIFsgJiMzNDskb24mIzM0OyAtbGUgJiMzNDskbXRfdW5wbHVnZ2VkJiMzNDsgXSB8fCBbICYjMzQ7JG9mZiYjMzQ7IC1nZSAmIzM0OyRvbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7aWYgWyAmIzM0OyRjeWNsZV9vayYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7b25saW5lL3VucGx1ZyBjeWNsZSByZS1hY3F1aXJlcyByZXNvdXJjZXMgKDN4OiBtZW1vcnkgYWRkZWQgYW5kIGZyZWVkIGVhY2ggdGltZSkmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpJiMzNDsKJiM0MztmaQomIzQzOwomIzQzOyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvdwomIzQzOyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQKJiM0MztpZiBbIC13ICYjMzQ7JEFPQiYjMzQ7IF0gJmFtcDsmYW1wOyBbIC13ICYjMzQ7JERSVi91bmJpbmQmIzM0OyBdICZhbXA7JmFtcDsgWyAtdyAmIzM0OyREUlYvYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJb3JpZ19hb2I9JChjYXQgJiMzNDskQU9CJiMzNDspCiYjNDM7CWVjaG8gJiMzNDskREFYJiMzNDsgJmd0OyAmIzM0OyREUlYvdW5iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBvZmZsaW5lICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi9iaW5kJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJc2xlZXAgMQomIzQzOwlzdD0kKGdldF9zdGF0ZSkKJiM0MzsJZWNobyAmIzM0OyRvcmlnX2FvYiYjMzQ7ICZndDsgJiMzNDskQU9CJiMzNDsgMiZndDsvZGV2L251bGwJCSMgcmVzdG9yZSBzeXN0ZW0gcG9saWN5CiYjNDM7CWlmIFsgJiMzNDskc3QmIzM0OyA9IG9mZmxpbmUgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDtvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC0mZ3Q7IHN0YXRlPW9mZmxpbmUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O2JpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSkmIzM0OwomIzQzOwlmaQomIzQzOwlzZXRfc3RhdGUgdW5wbHVnZ2VkIDImZ3Q7L2Rldi9udWxsCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2F1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO1sgLW4gJiMzNDskT1JJRyYjMzQ7IF0gJmFtcDsmYW1wOyBzZXRfc3RhdGUgJiMzNDskT1JJRyYjMzQ7CiYjNDM7CiYjNDM7IyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlcwomIzQzOyMgdG8gbGVhayAtIGJ1dCB0aGUgdW5iaW5kIHNob3VsZCBub3QgZGVhZGxvY2suICBJbnN0ZWFkIHRoZSBkcml2ZXIgbGVha3MgaXQKJiM0MzsjIHdpdGggYSBzaW5nbGUgJiMzNDtzdWNrIG9ubGluZSYjMzQ7IHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGUKJiM0MzsjIGRldmljZSB1bmJvdW5kIHVudGlsIHJlYm9vdCwgc28gaXQgcnVucyBsYXN0LgomIzQzO3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHNldF9zdGF0ZSBvbmxpbmUKJiM0MztpZiBbICYjMzQ7JChnZXRfc3RhdGUpJiMzNDsgPSBvbmxpbmUgXSAmYW1wOyZhbXA7IFsgLXcgJiMzNDskRFJWL3VuYmluZCYjMzQ7IF07IHRoZW4KJiM0MzsJbXRfb249JChtZW10b3RhbF9rYikKJiM0MzsJZG1lc2cgLUMgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyAmIzM0OyREQVgmIzM0OyAmZ3Q7ICYjMzQ7JERSVi91bmJpbmQmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwltdF9hZnRlcj0kKG1lbXRvdGFsX2tiKQomIzQzOwkjIFRoZSBsZWFrZWQgJiMzNDtTeXN0ZW0gUkFNIChrbWVtKSYjMzQ7IHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZwomIzQzOwkjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC4KJiM0MzsJIyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS4KJiM0MzsJY2F0IC9wcm9jL2lvbWVtICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CXNwbGF0PSQoZG1lc2cgMiZndDsvZGV2L251bGwgfCBncmVwIC1jaUUgJiMzNDtLQVNBTnxCVUc6fHVzZS1hZnRlci1mcmVlfGdlbmVyYWwgcHJvdGVjdGlvbnxPb3BzfHJlZmNvdW50X3QmIzM0OykKJiM0MzsJaWYgWyAmIzM0OyRzcGxhdCYjMzQ7ID0gMCBdICZhbXA7JmFtcDsgWyAmIzM0OyRtdF9hZnRlciYjMzQ7IC1nZSAmIzM0OyRtdF9vbiYjMzQ7IF07IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7dW5iaW5kIHdoaWxlIG9ubGluZTogbWVtb3J5IGxlZnQgb25saW5lLCBubyBVQUYvb29wcyAoTWVtVG90YWwgJG10X29uIC0mZ3Q7ICRtdF9hZnRlciBrQikmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0O3VuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC0mZ3Q7ICRtdF9hZnRlciBrQiYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3Rfc2tpcCAmIzM0O2NvdWxkIG5vdCBvbmxpbmUgZGV2aWNlIGZvciB1bmJpbmQtd2hpbGUtb25saW5lIHRlc3QmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7a3RhcF9maW5pc2hlZApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L3NldHRpbmdzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5ncwpAQCAtMCwwICYjNDM7MSBAQAomIzQzO3RpbWVvdXQ9OTAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2OTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQVggS21lbSBIb3RwbHVnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG1lbW9yeSBob3RwbHVnZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIGFuZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBjb25zaWRlcmluZyB0aGlzIGZvciBmdXp6aW5nLgoKSXQgbG9va3MgbGlrZSB0aGUga2V5IHBpZWNlIGlzIHRoaXMgbmV3IHN5c2ZzIGF0dHJpYnV0ZSwgYC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZWAuICBUaGlzIGlzIGhvdyB0aGUgdXNlciB3aWxsIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24mIzM5O3Mgc3RhdGXigJR1bnBsdWdnZWQsIG9ubGluZSwgdGhlIGtlcm5lbCwgYW5kIG1vdmFibGUuICBBIGNsZWFyIGNvbnRyb2wgbWVjaGFuaXNtIGlzIGFsd2F5cyBzb21ldGhpbmcgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGFscmVhZHkgc3RhcnRlZCB0byBpZGVudGlmeSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSBhcmVhcyBiZWluZyBpbXBhY3RlZDoKCiogICAqKmBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgKio6IEZ1bmN0aW9ucyByZWxhdGVkIHRvIG1hcHBpbmcgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYW4gb25saW5lIHR5cGUsIGFuZCB2aWNlIHZlcnNhLgoqICAgKipgZHJpdmVycy9kYXgvYnVzLmMsIGN4bC5jLCBobWVtLmMsIHBtZW0uY2AqKjogV2UgaGF2ZSBzZXZlcmFsIHByb2JlcyBiZWluZyBtb2RpZmllZCB0byBhZGQgREFYIGNhcGFiaWxpdGllcyBmb3IgdmFyaW91cyBEQVggZGV2aWNlcy4KKiAgICoqYGRyaXZlcnMvZGF4L2ttZW0uY2AqKjogVGhpcyBpcyB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBpcyBoYXBwZW5pbmcuIGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBzdGF0ZV9zaG93YCwgYHN0YXRlX3N0b3JlYCwgYGRldl9kYXhfa21lbV9wcm9iZWAsIGBkZXZfZGF4X2ttZW1fcmVtb3ZlYCBhcHBlYXIgdG8gYmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLCBhcyB0aGV5IGFyZSBsaWtlbHkgdG8gYmUgZW50cnkgcG9pbnRzIGZvciB0aGUgaG90cGx1ZyBmdW5jdGlvbmFsaXR5LgoqICAgKipgbW0vbWVtb3J5X2hvdHBsdWcuY2AqKjogQ29yZSBob3RwbHVnZ2luZyBpbmZyYXN0cnVjdHVyZSBmdW5jdGlvbnMgbGlrZSBhZGRpbmcgYW5kIHJlbW92aW5nIG1lbW9yeSByYW5nZXMuCgpOb3csIGZyb20gdGhlIGxvb2sgb2YgaXQsIHRoZSBjb2RlIHNlZW1zIHdlbGwtc3RydWN0dXJlZCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBpbW11bmUgdG8gYnVncy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcy4gQmFzZWQgb24gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnYCBmaWxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVzZSBzZXQ6IGBDT05GSUdfREVWX0RBWGAsIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCk9rYXksIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc2hhcGVzIHVwLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgc3RhcnQgZm9ybXVsYXRpbmcgc29tZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX0RBWF9LTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWc9MzA9Y29uZmlnIERFVl9EQVhfSE1FTVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNDMtXHQgIGRldmljZS1kYXggaW5zdGFuY2VzIGZvciB0aGVzZSBtZW1vcnkgcmFuZ2VzLCBhbmQgdGhhdCBhbHNvXG5kcml2ZXJzL2RheC9LY29uZmlnOjQ0Olx0ICBlbmFibGVzIHRoZSBwb3NzaWJpbGl0eSB0byBhc3NpZ24gdGhlbSB0byB0aGUgREVWX0RBWF9LTUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTQ1LVx0ICBkcml2ZXIgdG8gb3ZlcnJpZGUgdGhlIHJlc2VydmF0aW9uIGFuZCBhZGQgdGhlbSB0byBrZXJuZWxcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnPTY4PWNvbmZpZyBERVZfREFYX0ZTREVWXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0tNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0RFVl9EQVgpICYjNDM7PSBkZXZpY2VfZGF4Lm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RFVl9EQVhfS01FTSkgJiM0Mzs9IGttZW0ub1xuZHJpdmVycy9kYXgvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREVWX0RBWF9QTUVNKSAmIzQzOz0gZGF4X3BtZW0ub1xuLS1cbmRyaXZlcnMvZGF4L2J1cy5jPTY4PXN0YXRpYyBpbnQgZGF4X21hdGNoX3R5cGUoY29uc3Qgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyICpkYXhfZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9kYXgvYnVzLmMtODAtXHRpZiAoZGF4X2Rydi1cdTAwM2V0eXBlID09IERBWERSVl9ERVZJQ0VfVFlQRSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZGF4L2J1cy5jOjgxOlx0ICAgICFJU19FTkFCTEVEKENPTkZJR19ERVZfREFYX0tNRU0pKVxuZHJpdmVycy9kYXgvYnVzLmMtODItXHRcdHJldHVybiAxO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9MT1DT05GSUdfREVWX0RBWD1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjI6Q09ORklHX0RFVl9EQVhfS01FTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnLTMtQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMsIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbWVtb3J5IHNpdHVhdGlvbi4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmZXcga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QgdXAsIEkgbmVlZCB0byBjaGVjayBgQ09ORklHX0RFVl9EQVhgLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IGlmIERBWCBpcyBlbmFibGVkLCBnaXZlbiB0aGF0IEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBvciBwZXJzaXN0ZW50IG1lbW9yeS4gVGhlIGRldGFpbHMgd2lsbCBhbGxvdyBtZSB0byBkZWNpZGUgd2hldGhlciBEQVggd2lsbCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBteSBjb2RlLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19NRU1PUllfSE9UUExVR2AgaXMgc2V0LiBHaXZlbiB0aGUgd2F5IG1lbW9yeSBpcyBjaGFuZ2luZyBvdmVyIHRpbWUgd2l0aCB0aGUgcmlzZSBvZiBzZXJ2ZXJzLCB0aGlzIGlzIGltcG9ydGFudC4gVGhlbiwgSSB3aWxsIGFsc28gaGF2ZSB0byBjaGVjayBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBUaGVzZSB0d28gb3B0aW9ucyBnbyBoYW5kIGluIGhhbmQsIGRlZmluaW5nIGlmIEkgY2FuIGFkZCBhbmQgcmVtb3ZlIG1lbW9yeSBhdCBydW50aW1lLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSBob3cgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBtYW5hZ2UgdGhlIG92ZXJhbGwgbWVtb3J5IHBvb2wgZHluYW1pY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX0RBWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NjQ3PUNPTkZJR19WSE9TVF9WRFBBPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo2NDg6Q09ORklHX0RFVl9EQVg9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTY0OS1DT05GSUdfRVhUNF9GUz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTYzNz1DT05GSUdfVkhPU1RfVkRQQT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NjM4OkNPTkZJR19ERVZfREFYPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy02MzktQ09ORklHX0VYVDRfRlM9eVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYz04NTk9c3RhdGljIHZvaWQgaG1hdF9yZWdpc3Rlcl90YXJnZXRfZGV2aWNlcyhzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGFyZ2V0KVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NjYtXHQgKi9cbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYzo4Njc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSkpXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmMtODY4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZz02PWlmIERBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo4OmNvbmZpZyBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0xOC1cbmRyaXZlcnMvZGF4L0tjb25maWc6MTk6Y29uZmlnIERFVl9EQVhfUE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XCYjMzQ7XG5kcml2ZXJzL2RheC9LY29uZmlnOjIxOlx0ZGVwZW5kcyBvbiBMSUJOVkRJTU0gXHUwMDI2XHUwMDI2IE5WRElNTV9EQVggXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6MjI6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cbmRyaXZlcnMvZGF4L0tjb25maWc6MzA6Y29uZmlnIERFVl9EQVhfSE1FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0hNRU0gREFYOiBkaXJlY3QgYWNjZXNzIHRvICYjMzk7c3BlY2lmaWMgcHVycG9zZSYjMzk7IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctMzMtXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQV9NRU1CTEtTXG5kcml2ZXJzL2RheC9LY29uZmlnOjM0Olx0ZGVmYXVsdCBERVZfREFYXG5kcml2ZXJzL2RheC9LY29uZmlnLTM1LVx0ZGVwZW5kcyBvbiBDWExfQUNQSSB8fCAhQ1hMX0FDUElcbi0tXG5kcml2ZXJzL2RheC9LY29uZmlnLTQzLVx0ICBkZXZpY2UtZGF4IGluc3RhbmNlcyBmb3IgdGhlc2UgbWVtb3J5IHJhbmdlcywgYW5kIHRoYXQgYWxzb1xuZHJpdmVycy9kYXgvS2NvbmZpZzo0NDpcdCAgZW5hYmxlcyB0aGUgcG9zc2liaWxpdHkgdG8gYXNzaWduIHRoZW0gdG8gdGhlIERFVl9EQVhfS01FTVxuZHJpdmVycy9kYXgvS2NvbmZpZy00NS1cdCAgZHJpdmVyIHRvIG92ZXJyaWRlIHRoZSByZXNlcnZhdGlvbiBhbmQgYWRkIHRoZW0gdG8ga2VybmVsXG4tLVxuZHJpdmVycy9kYXgvS2NvbmZpZy00OS1cbmRyaXZlcnMvZGF4L0tjb25maWc6NTA6Y29uZmlnIERFVl9EQVhfQ1hMXG5kcml2ZXJzL2RheC9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7Q1hMIERBWDogZGlyZWN0IGFjY2VzcyB0byBDWEwgUkFNIHJlZ2lvbnNcJiMzNDtcbmRyaXZlcnMvZGF4L0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIENYTF9CVVMgXHUwMDI2XHUwMDI2IENYTF9SRUdJT04gXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NTM6XHRkZWZhdWx0IENYTF9SRUdJT04gXHUwMDI2XHUwMDI2IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NTQ6XHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSB8fCAhREVWX0RBWF9ITUVNXG5kcml2ZXJzL2RheC9LY29uZmlnLTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWctNjMtXG5kcml2ZXJzL2RheC9LY29uZmlnOjY0OmNvbmZpZyBERVZfREFYX0hNRU1fREVWSUNFU1xuZHJpdmVycy9kYXgvS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gREVWX0RBWF9ITUVNIFx1MDAyNlx1MDAyNiBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNjYtXHRkZWZfYm9vbCB5XG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxuZHJpdmVycy9kYXgvS2NvbmZpZzo2ODpjb25maWcgREVWX0RBWF9GU0RFVlxuZHJpdmVycy9kYXgvS2NvbmZpZy02OS1cdHRyaXN0YXRlXG5kcml2ZXJzL2RheC9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBERVZfREFYIFx1MDAyNlx1MDAyNiBGU19EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NzE6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNzItXG5kcml2ZXJzL2RheC9LY29uZmlnOjczOmNvbmZpZyBERVZfREFYX0tNRU1cbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cJiMzNDtcbmRyaXZlcnMvZGF4L0tjb25maWc6NzU6XHRkZWZhdWx0IERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIERFVl9EQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNzctXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xuLS1cbmRyaXZlcnMvZGF4L01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0RBWCkgJiM0Mzs9IGRheC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ERVZfREFYKSAmIzQzOz0gZGV2aWNlX2RheC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19ERVZfREFYX0tNRU0pICYjNDM7PSBrbWVtLm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgJiM0Mzs9IGRheF9wbWVtLm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0RFVl9EQVhfQ1hMKSAmIzQzOz0gZGF4X2N4bC5vXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ERVZfREFYX0ZTREVWKSAmIzQzOz0gZnNkZXZfZGF4Lm9cbmRyaXZlcnMvZGF4L01ha2VmaWxlLTktXG4tLVxuZHJpdmVycy9kYXgvYnVzLmM9Njg9c3RhdGljIGludCBkYXhfbWF0Y2hfdHlwZShjb25zdCBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgKmRheF9kcnYsIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2RheC9idXMuYy04MC1cdGlmIChkYXhfZHJ2LVx1MDAzZXR5cGUgPT0gREFYRFJWX0RFVklDRV9UWVBFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9kYXgvYnVzLmM6ODE6XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfS01FTSkpXG5kcml2ZXJzL2RheC9idXMuYy04Mi1cdFx0cmV0dXJuIDE7XG4tLVxuZHJpdmVycy9kYXgvYnVzLmg9NzM9dG9faG1lbV9wbGF0Zm9ybV9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2RheC9idXMuaC03Ny1cbmRyaXZlcnMvZGF4L2J1cy5oOjc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ERVZfREFYX0hNRU0pXG5kcml2ZXJzL2RheC9idXMuaC03OS12b2lkIGRheF9obWVtX2ZsdXNoX3dvcmsodm9pZCk7XG4tLVxuZHJpdmVycy9kYXgvaG1lbS9NYWtlZmlsZS0yLSMgZGV2aWNlX2htZW0ubyBkZWxpYmVyYXRlbHkgcHJlY2VkZXMgZGF4X2htZW0ubyBmb3IgaW5pdGNhbGwgb3JkZXJpbmdcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfREVWX0RBWF9ITUVNX0RFVklDRVMpICYjNDM7PSBkZXZpY2VfaG1lbS5vXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVhfSE1FTSkgJiM0Mzs9IGRheF9obWVtLm9cbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGUtNS1cbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYz0xNjY9c3RhdGljIGludCBobWVtX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpob3N0LCBpbnQgdGFyZ2V0X25pZCxcbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYy0xNzEtXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYzoxNzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9DWEwpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTczLVx0ICAgIHJlZ2lvbl9pbnRlcnNlY3RzKHJlcy1cdTAwM2VzdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBJT1JFU09VUkNFX01FTSxcbi0tXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYz0yMDg9c3RhdGljIF9faW5pdCBpbnQgZGF4X2htZW1faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxNi1cdCAqL1xuZHJpdmVycy9kYXgvaG1lbS9obWVtLmM6MjE3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfQ1hMKSkge1xuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMjE4LVx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtjeGxfYWNwaVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZz0xPWNvbmZpZyBETV9QQ0FDSEVcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIEJMS19ERVZfRE1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWc6NDpcdGRlcGVuZHMgb24gREVWX0RBWFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZy01LVx0aGVscFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctODAtXG5mcy9LY29uZmlnOjgxOiAgICAgICAgICBGb3IgbmRjdGwgdG8gd29yayBDT05GSUdfREVWX0RBWCBuZWVkcyB0byBiZSBlbmFibGVkIGFzIHdlbGwuIEZvciBtb3N0XG5mcy9LY29uZmlnLTgyLVx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxuLS1cbmluY2x1ZGUvbGludXgvZGF4Lmg9MzA5PXN0YXRpYyBpbmxpbmUgaW50IGRheF9tZW0yYmxrX2VycihpbnQgZXJyKVxuLS1cbmluY2x1ZGUvbGludXgvZGF4LmgtMzEzLVxuaW5jbHVkZS9saW51eC9kYXguaDozMTQ6I2lmZGVmIENPTkZJR19ERVZfREFYX0hNRU1fREVWSUNFU1xuaW5jbHVkZS9saW51eC9kYXguaC0zMTUtdm9pZCBobWVtX3JlZ2lzdGVyX3Jlc291cmNlKGludCB0YXJnZXRfbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpO1xuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0zND1lbmRpZlxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjM1Om9iai0kKENPTkZJR19ERVZfREFYKSAmIzQzOz0gZGV2aWNlX2RheC5vXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MzY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgJiM0Mzs9IGRheF9wbWVtLm9cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0zNy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYz00PXZvaWQgY2hlY2sodm9pZClcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYy0xNS1cdFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0FDUElfTkZJVCkpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTY6XHRCVUlMRF9CVUdfT04oIUlTX01PRFVMRShDT05GSUdfREVWX0RBWCkpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTc6XHRCVUlMRF9CVUdfT04oIUlTX01PRFVMRShDT05GSUdfREVWX0RBWF9QTUVNKSk7XG50b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYy0xOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoxOkNPTkZJR19ERVZfREFYPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6MjpDT05GSUdfREVWX0RBWF9LTUVNPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTMzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBIb3RwbHVnIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbWVtb3J5LXJlbGF0ZWQgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxldmFudCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIHRvIGdyYXNwIGhvdyB0aGVzZSBmZWF0dXJlcyBpbXBhY3Qgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEhvdyBkbyB0aGV5IGludGVyYWN0PyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzNj1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zNzctXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozNzg6XHRcdCAgICBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3OS1cdFx0ICAgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cbi0tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTEzMT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxMzI6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xMzMtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0yMjQxPXN0YXRpYyBpbnQgX19pbml0IHByZXZlbnRfbWVtb3J5X3JlbW92ZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMjQ0LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMjQ1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSlcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjI0Ni1cdFx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTEwMT1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTAzLSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTA0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTA1LUNPTkZJR19LU009eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTE2PUNPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUTz15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMTgtIyBDT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEUgaXMgbm90IHNldFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxMTk6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMjAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9NTg9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjU5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTYwLUNPTkZJR19LU009eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz04OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05MC1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz0yMjI9c3RhdGljIGludCBkbHBhcl9vbmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzoyMjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjgtc3RhdGljIGludCBkbHBhcl9vZmZsaW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9NTU4PXN0YXRpYyBpbnQgZGxwYXJfbWVtb3J5X3JlbW92ZV9ieV9pYyh1MzIgbG1ic190b19yZW1vdmUsIHUzMiBkcmNfaW5kZXgpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYxLX1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU2My1cbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTAxPUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTAyOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTk0PUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTU6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTk2LUNPTkZJR19LU009eVxuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzEtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jPTI3MD1pbnQgY291bnRfaW1tb3ZhYmxlX21lbV9yZWdpb25zKHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0zMTYtfVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYzozMTc6I2VuZGlmIC8qIENPTkZJR19SQU5ET01JWkVfQkFTRSBcdTAwMjZcdTAwMjYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTU9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjAwLVx0LypcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjYwMTpcdCAqIElmIG5vIGltbW92YWJsZSBtZW1vcnkgZm91bmQsIG9yIE1FTU9SWV9IT1RSRU1PVkUgZGlzYWJsZWQsXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDItXHQgKiB1c2UgQHJlZ2lvbiBkaXJlY3RseS5cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTMtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MTQ6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjE1LVx0Lypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oPTE3MT1zdGF0aWMgaW5saW5lIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmg6MTc0OiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNjc9c3RhdGljIHNzaXplX3QgcGh5c19pbmRleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc2LSAqIExlZ2FjeSBpbnRlcmZhY2UgdGhhdCB3ZSBjYW5ub3QgcmVtb3ZlLiBBbHdheXMgaW5kaWNhdGUgXCYjMzQ7cmVtb3ZhYmxlXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTc3OiAqIHdpdGggQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgLSBiYWQgaGV1cmlzdGljLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3OC0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTgxLXtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCAoaW50KUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz00NTA9c3RhdGljIHNzaXplX3QgcGh5c19kZXZpY2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQ1OS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0NjA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjcxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfbWVtYmxrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3NS1cdFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjY3NjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzctXHRcdTAwMjZkZXZfYXR0cl92YWxpZF96b25lcy5hdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAwLVxuZHJpdmVycy9kYXgva21lbS5jOjIwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDItLyoqXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTI2MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjY1LX1cbmRyaXZlcnMvZGF4L2ttZW0uYzoyNjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kcml2ZXJzL2RheC9rbWVtLmMtMjY3LVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTQ4OS1cbmRyaXZlcnMvZGF4L2ttZW0uYzo0OTA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2RheC9rbWVtLmMtNDkxLXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTUzMT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01NDUtfVxuZHJpdmVycy9kYXgva21lbS5jOjU0NjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy01NDctXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMjM9Y29uZmlnIFZJUlRJT19NRU1cbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyNy1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbmRyaXZlcnMvdmlydGlvL0tjb25maWc6MTI4Olx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4tLVxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTItXHRcdFx0XHRyZXNvdXJjZV9zaXplX3QpO1xuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTM5NC1leHRlcm4gdm9pZCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjYyLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjQtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI4OT1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkzLX1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTQ6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk1LVxuLS1cbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc6MTY6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxua2VybmVsL2NvbmZpZ3MveGVuLmNvbmZpZy0xNy1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTE0NDY9RVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9uKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDctXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxua2VybmVsL3Jlc291cmNlLmMtMTQ0OS1zdGF0aWMgdm9pZCBhcHBlbmRfY2hpbGRfdG9fcGFyZW50KHN0cnVjdCByZXNvdXJjZSAqbmV3X3BhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXdfY2hpbGQpXG4tLVxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTU5Ni19XG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmtlcm5lbC9yZXNvdXJjZS5jLTE1OTgtXG4tLVxubW0vS2NvbmZpZz01MzY9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTUzNy1cbm1tL0tjb25maWc6NTM4OmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTUzOS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTgzPWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTE4NS1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6MTE4NjpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuLS1cbm1tL2tzbS5jPTMyNjk9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2tzbS5jLTMyOTItXG5tbS9rc20uYzozMjkzOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0va3NtLmMtMzI5NC1zdGF0aWMgdm9pZCB3YWl0X3doaWxlX29mZmxpbmluZyh2b2lkKVxuLS1cbm1tL2tzbS5jPTM0MTc9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcbi0tXG5tbS9rc20uYy0zNDE5LX1cbm1tL2tzbS5jOjM0MjA6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5tbS9rc20uYy0zNDIxLVxuLS1cbm1tL2tzbS5jPTM5Nzc9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcbi0tXG5tbS9rc20uYy00MDA5LVxubW0va3NtLmM6NDAxMDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbm1tL2tzbS5jLTQwMTEtXHQvKiBUaGVyZSBpcyBubyBzaWduaWZpY2FuY2UgdG8gdGhpcyBwcmlvcml0eSAxMDAgKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3NzE9Ym9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3ODQ6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODUtLypcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1MjU9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTI2OiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Mzc0PXN0YXRpYyB1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9iZWdpbih2b2lkKVxubW0vcGFnZV9hbGxvYy5jLTQzNzUte1xubW0vcGFnZV9hbGxvYy5jOjQzNzY6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5tbS9wYWdlX2FsbG9jLmMtNDM3Ny1cdFx0cmV0dXJuIHJlYWRfc2VxYmVnaW4oXHUwMDI2em9uZWxpc3RfdXBkYXRlX3NlcSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzODI9c3RhdGljIHVuc2lnbmVkIGludCBjaGVja19yZXRyeV96b25lbGlzdCh1bnNpZ25lZCBpbnQgc2VxKVxubW0vcGFnZV9hbGxvYy5jLTQzODMte1xubW0vcGFnZV9hbGxvYy5jOjQzODQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5tbS9wYWdlX2FsbG9jLmMtNDM4NS1cdFx0cmV0dXJuIHJlYWRfc2VxcmV0cnkoXHUwMDI2em9uZWxpc3RfdXBkYXRlX3NlcSwgc2VxKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzUxNz12b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NTM1LVxubW0vcGFnZV9hbGxvYy5jOjc1MzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9wYWdlX2FsbG9jLmMtNzUzNy0vKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND05MD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjkxOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NC05Mi1DT05GSUdfTkFNRVNQQUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD03Nj1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweDo3NzpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTc4LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnPTM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6NDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnPTM9Q09ORklHX01FTU9SWV9OT1RJRklFUl9FUlJPUl9JTkpFQ1Q9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTExMS1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBWCBLTUVNIEhvdHBsdWcgYW5kIEhvdHJlbW92ZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVmaW5lIHRoaXMgREFYIEtNRU0gZnVuY3Rpb25hbGl0eTogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gIEdvdCBpdC4gTm93IEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2VzcyBmb3IgREFYIEtNRU0uIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDogYGRheF9rbWVtX2RvX2hvdHBsdWdgLCBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fZG9faG90cmVtb3ZlYCwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYHN0YXRlX3Nob3dgLCBgc3RhdGVfc3RvcmVgLCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AuCgpSaWdodCwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZnVuY3Rpb24gdmlzaWJpbGl0eS4gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoaXMgY29tcG9uZW50LiBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGltcGxpZXMgdGhleSBhcmUgbGlrZWx5IGNvcmUga2VybmVsIGZ1bmN0aW9ucy4gYHN0YXRlX3N0b3JlYCBhbmQgYGRldl9kYXhfa21lbV9wcm9iZWAgYXJlIGFsc28gc3RhdGljLCBzbyBpbnRlcm5hbCB0byB0aGlzIGttZW0gaW1wbGVtZW50YXRpb24uIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHdpdGhpbiBgZHJpdmVycy9kYXgva21lbS5jYCB0byBzZWUgaWYgSSBtaXNzZWQgYW55IGZ1bmN0aW9uIG5hbWVzLiBBbHdheXMgd29ydGggYSBsb29rIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYXhfa21lbV9kb19ob3RwbHVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYz03Mz1zdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy05MC0gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzo5MTpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXHRcdFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ3NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gYHN0YXRlX3N0b3JlYCBpbiBgZHJpdmVycy9kYXgva21lbS5jYCoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUgYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiByZXNpZGVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kYXgva21lbS5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBEQVggYW5kIGttZW0sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaG93IGl0cyBzdGF0ZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgaW1wbGVtZW50YXRpb24gZm9yIGtlcm5lbCBtZW1vcnkuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGluZ3MgbGlrZSBwb3dlciBzdGF0ZSwgZXJyb3Igc3RhdGUsIG9yIHBlcmhhcHMgZXZlbiBwcm92aXNpb25pbmcvZGVwcm92aXNpb25pbmcgb2YgREFYLW1hbmFnZWQgbWVtb3J5IHJlZ2lvbnMuIFRpbWUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIERBWCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIHN0YXRlX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz0zOTQ9c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29mZmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00MDMtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDA1LVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jPTE5PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMC1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zeXNmcy5jOjMxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMi1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzE2PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zMzItXG5kcml2ZXJzL2RheC9rbWVtLmM6MzMzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2RheC9rbWVtLmMtMzM0LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYz0zMD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jLTQwLVxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jOjQxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYz00Mj1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01Mi1cbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jOjUzOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01NC1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jPTE3OD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2Nfc3lzZnMuYy0xODgtLyogQ2hhbmdlIHJlbW90ZSBwcm9jZXNzb3Igc3RhdGUgdmlhIHN5c2ZzICovXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jOjE4OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE5MC1cdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jPTI0ND12b2lkIGFwYl9jdHJsX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1hcGItY3RybC5jLTI0OC1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjUwLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM9MjgxPWFyY2hlX3BsYXRmb3JtX3Bvd2Vyb2ZmX3NlcShzdHJ1Y3QgYXJjaGVfcGxhdGZvcm1fZHJ2ZGF0YSAqYXJjaGVfcGRhdGEpXG4tLVxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYy0zMDUtXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jOjMwNjpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNy1cdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5rZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mj1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmMtNzk4LVxua2VybmVsL3Bvd2VyL21haW4uYzo3OTk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbmtlcm5lbC9wb3dlci9tYWluLmMtODAwLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzQxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzgwLVxubW0vZGFtb24vc3lzZnMuYzoyMzgxOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm5ldC9yZmtpbGwvY29yZS5jPTgwOD1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxubmV0L3Jma2lsbC9jb3JlLmM6ODIwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5uZXQvcmZraWxsL2NvcmUuYy04MjEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDQzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgRHluYW1pYyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIERBWCBrbWVtLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IG9uZXMgdG8gaW5zdHJ1bWVudCBmb3IgZHluYW1pYyBhbmFseXNpcy4gSSYjMzk7dmUgaW5pdGlhbGx5IGlkZW50aWZpZWQgYSBsaXN0LCBidXQgSSBuZWVkIHRvIHJlZmluZSBpdCB0byBlbnN1cmUgZWZmZWN0aXZlIGNvdmVyYWdlIGFuZCBhdm9pZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKRmlyc3QsIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBjYW5kaWRhdGVzOiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBhbmQgYHN0YXRlX3N0b3JlYCAoIHNwZWNpZmljYWxseSB0aGUgb25lIGluIGBkcml2ZXJzL2RheC9rbWVtLmNgKSwgYWxvbmcgd2l0aCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC4KCk5vdywgdGhlIGNvbmNlcm4gaXMgdGhhdCBgc3RhdGVfc3RvcmVgIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZS4gU3RhdGljIGZ1bmN0aW9ucyB3aXRoIGNvbW1vbiBuYW1lcyBsaWtlIHRoYXQgYXJlIGEgcmVkIGZsYWcuIFN5emthbGxlciBtaWdodCBoYXZlIHRyb3VibGUgcmVzb2x2aW5nIGl0IGNvcnJlY3RseSwgb3IsIHdvcnNlLCBpdCBtaWdodCBpbnN0cnVtZW50ICpldmVyeSogYHN0YXRlX3N0b3JlYCBmdW5jdGlvbiBpbiB0aGUga2VybmVsLCBsZWFkaW5nIHRvIG1hc3NpdmUgbm9pc2UgYW5kIHBvdGVudGlhbGx5IHNrZXdlZCByZXN1bHRzLiBUaGF0JiMzOTtzIGEgd2FzdGUgb2YgdGltZS4gSSBuZWVkIHNwZWNpZmljaXR5LiBJJiMzOTttIGFpbWluZyBmb3IgdW5pcXVlIGVudHJ5IHBvaW50cy4KClNvLCBkaXRjaGluZyBgc3RhdGVfc3RvcmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBJIHNob3VsZCBjaG9vc2UgdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMuIEkgdGhpbmsgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCBvciBgZGF4X2ttZW1fZG9faG90cGx1Z2Agd291bGQgYmUgYmV0dGVyIGNob2ljZXMuCgpUaGVyZWZvcmUsIGFmdGVyIGEgbGl0dGxlIHJlZmluZW1lbnQsIEkgd2FudCB0byB1c2UgdGhpcyBsaXN0IGFzIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHM6Ci0gYGRheF9rbWVtX2RvX2hvdHBsdWdgCi0gYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYAotIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgCi0gYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYAotIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAKLSBgZGV2X2RheF9rbWVtX3Byb2JlYAotIGBkZXZfZGF4X2ttZW1fcmVtb3ZlYAotIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgCi0gYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYGRheF9rbWVtX3BhcnNlX3N0YXRlYCBpcyBhY3R1YWxseSB3aGF0IEkgdGhpbmsgaXQgaXMuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1fcGFyc2Vfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTI3NT1zdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzAwLVxuZHJpdmVycy9kYXgva21lbS5jOjMwMTpzdGF0aWMgaW50IGRheF9rbWVtX3BhcnNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1ZilcbmRyaXZlcnMvZGF4L2ttZW0uYy0zMDIte1xuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zMzM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQzLVxuZHJpdmVycy9kYXgva21lbS5jOjM0NDpcdG9ubGluZV90eXBlID0gZGF4X2ttZW1fcGFyc2Vfc3RhdGUoYnVmKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QsIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIFByZXNlbmNlKioKClJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB0aGluZy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9kb19ob3RwbHVnYC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbXkgbmV4dCBzdGVwIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIHJlbGV2YW50LCBidXQgYmVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1fZG9faG90cGx1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9NzM9c3RhdGljIGJvb2wgZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGludCBzdGF0ZSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtODAtLyoqXG5kcml2ZXJzL2RheC9rbWVtLmM6ODE6ICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbmRyaXZlcnMvZGF4L2ttZW0uYy04Mi0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuZHJpdmVycy9kYXgva21lbS5jLTkyLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM3MC1cbmRyaXZlcnMvZGF4L2ttZW0uYzozNzE6XHRyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpO1xuZHJpdmVycy9kYXgva21lbS5jLTM3Mi1cdGlmIChyYyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy00NjQtXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXG5kcml2ZXJzL2RheC9rbWVtLmM6NDY1Olx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy00NjYtXHRpZiAocmMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgRXhpc3RlbmNlIGFuZCBQcm9jZWVkaW5nIHdpdGggVmVyaWZpY2F0aW9uKioKClllcywgSSBrbm93IHRoaXMgaXMgcmVhbCwgdGhlIGNvbmNlcHQgaXMgdmFsaWQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24sIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBhY3R1YWxseSBleGlzdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGRlZmluZWQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcmVsZXZhbmNlIHRvIHRoZSBwcm9ibGVtIGF0IGhhbmQuIEdvdHRhIG1ha2Ugc3VyZSBpdCYjMzk7cyAqdGhlcmUqIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byAqd2hhdCogaXQgZG9lcy4gU28sIGxldCYjMzk7cyBjaGVjayBpdHMgcHJlc2VuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9rbWVtX2RvX2hvdHJlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MTU2PXN0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTIwMi0vKipcbmRyaXZlcnMvZGF4L2ttZW0uYzoyMDM6ICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxuZHJpdmVycy9kYXgva21lbS5jLTIwNC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjEyLSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjIxMzpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTQtXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTI2MC0jZWxzZVxuZHJpdmVycy9kYXgva21lbS5jOjI2MTpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjItXHRcdFx0XHQgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0zNTQtXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XG5kcml2ZXJzL2RheC9rbWVtLmM6MzU1Olx0XHRyYyA9IGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNTYtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9NDkxPXN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTUxMC1cdH0gZWxzZSBpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2RheC9rbWVtLmM6NTExOlx0ICAgIGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKSkge1xuZHJpdmVycy9kYXgva21lbS5jLTUxMi1cdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtVbnBsdWcgZmFpbGVkLCByZXNvdXJjZXMgbGVha2VkIHVudGlsIHJlYm9vdFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSBrbm93IHRoaXMgY29uY2VwdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIGluIHBsYXkuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyBob3cgdGhpcyB0aGluZyBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aGUgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBleGlzdHMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlYmFzZSBvciBmcmFtZXdvcmsuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBtZW1vcnkgZHJpdmVyIGlzIG1hbmFnZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L2ttZW0uYz05MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHBsdWcoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTExOS1cdFx0ICovXG5kcml2ZXJzL2RheC9rbWVtLmM6MTIwOlx0XHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxuZHJpdmVycy9kYXgva21lbS5jLTEyMS1cdFx0XHRcdHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGttZW1fbmFtZSwgbWhwX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDM9ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA0LVx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjMwNTppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA2LVx0XHRcdFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTYzOD1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDAtLyoqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NDItICogQG5pZDogTlVNQSBub2RlIElEIHdoZXJlIHRoZSBtZW1vcnkgd2lsbCBiZSBhZGRlZFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3MS0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY3MjppbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2NzMtXHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDItfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzAzOkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkLCBcJiMzNDtrbWVtXCYjMzQ7KTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcwNC1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTUtICpcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcxNjogKiBTZWUgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIGZvciBtb3JlIGRldGFpbHMuXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTctICpcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3MjA9aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjIte1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzIzOlx0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI0LVx0XHRcdG1ocF9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBDaGVjayoqCgpSaWdodCwgSSYjMzk7dmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHByZW1pc2Ug4oCTIGl0ICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBhbmQgcGFydGljdWxhcmx5IGJlZm9yZSBJIHN0YXJ0IG1hbmlwdWxhdGluZyBvciByZWx5aW5nIG9uIGFueSBwb3RlbnRpYWxseSBkZWxpY2F0ZSBtZW1vcnkgcmFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24sIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGlzIGluZGVlZCBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBjb250aW51aW5nIGRvd24gdGhpcyBwYXRoIGlmIHRoYXQgY29yZSBmdW5jdGlvbmFsaXR5IGlzbiYjMzk7dCBwcmVzZW50LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4gSSB3aWxsIG5vdCBwcm9jZWVkIHdpdGhvdXQgYmVpbmcgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTIxMz1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjQwLVxuZHJpdmVycy9kYXgva21lbS5jOjI0MTpcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xuZHJpdmVycy9kYXgva21lbS5jLTI0Mi1cdGtmcmVlKHJhbmdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI3MD1leHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MjcxOmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjcyLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yODc9c3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI4OC1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyODk6c3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkwLVx0XHRcdFx0XHRcdCAgIGludCBucl9yYW5nZXMpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNDMwPWludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDMzLVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM0Olx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFx1MDAyNnJhbmdlLCAxKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzNS19XG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDM4LS8qKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM5OiAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQ0MC0gKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTQtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI0NTU6aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDU2LXtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI1MjQtfVxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNTI1OkVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyNi0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyOTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFYIEtNRU0gSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGNvbmZpcm1hdGlvbi4gVGhpcyBEQVggS01FTSB0aGluZyBpcyBhIHJlYWwgdGhpbmcsIGl0IGRvZXMgZXhpc3QuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eToKCiogICBgZGF4X2ttZW1fZG9faG90cGx1Z2AKKiAgIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AKKiAgIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgCiogICBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgCiogICBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgCiogICBgZGV2X2RheF9rbWVtX3Byb2JlYAoqICAgYGRldl9kYXhfa21lbV9yZW1vdmVgCiogICBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYAoqICAgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gREFYIEtNRU0uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdgLiBJdCBsb29rcyBsaWtlIHRoZXNlIGNvbmZpZ3MgYXJlIHRoZSBvbmVzIHdlIG5lZWQ6CgpgYGAKQ09ORklHX0RFVl9EQVg9bQpDT05GSUdfREVWX0RBWF9LTUVNPW0KQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQpgYGAKCkkmIzM5O2xsIHByb2NlZWQgYnkgY3Jvc3MtcmVmZXJlbmNpbmcgYW5kIHZlcmlmeWluZyB0aGUgZXhpc3RlbmNlIG9mIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AuIFRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgva21lbS5jPTkxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMTQ3LS8qKlxuZHJpdmVycy9kYXgva21lbS5jOjE0ODogKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbmRyaXZlcnMvZGF4L2ttZW0uYy0xNDktICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTE1NS0gKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzoxNTY6c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xNTctXHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTM2Ni1cdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYzozNjc6XHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTM2OC1cdGlmIChyYyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy00NTQtXG5kcml2ZXJzL2RheC9rbWVtLmM6NDU1Olx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcbmRyaXZlcnMvZGF4L2ttZW0uYy00NTYtXHRpZiAocmMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpdCBjb25jaXNlIGFuZCByZWxldmFudDoKCioqQ29uZmlybWluZyBhbmQgVmVyaWZ5aW5nIEZ1bmN0aW9uIEV4aXN0ZW5jZSoqCgpZZXMsIHRoYXQgY3J1Y2lhbCBlbGVtZW50IGlzIGluZGVlZCBwcmVzZW50LiBOb3csIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25maXJtIHRoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIEkgcmVxdWlyZSwgYGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzYCwgYWN0dWFsbHkgZXhpc3RzIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGVjayBJIGNhbiYjMzk7dCBza2lwIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9rbWVtLmM9MjYxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjgtLyoqXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY5OiAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xuZHJpdmVycy9kYXgva21lbS5jLTI3MC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LSAqL1xuZHJpdmVycy9kYXgva21lbS5jOjI3NTpzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzYtXHRcdFx0XHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfa21lbV9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNDc2LWVycl9ob3RwbHVnOlxuZHJpdmVycy9kYXgva21lbS5jOjQ3NzpcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTQ3OC1lcnJfcmVzb3VyY2VzOlxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtNTE1LVxuZHJpdmVycy9kYXgva21lbS5jOjUxNjpcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuZHJpdmVycy9kYXgva21lbS5jLTUxNy1cdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTI2CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFuZCBJIGNhbiBjb25maXJtLCAqeWVzKiwgdGhpcyB3YXJyYW50cyBteSBhdHRlbnRpb24uIEl0IGludHJvZHVjZXMgbW9kaWZpY2F0aW9ucyB0aGF0IGRpcmVjdGx5IGltcGFjdCBjcnVjaWFsIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIERBWCBrbWVtIGRyaXZlciBhbmQgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbS4KClRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEkgc2VlIGl0JiMzOTtzIGFkZGVkIGEgbmV3IHN5c2ZzIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSAmIzM5O3N0YXRlJiMzOTsgaW50ZXJmYWNlIGZvciBEQVgga21lbSBkZXZpY2VzLCB3aGljaCBtZWFucyB3ZSBub3cgaGF2ZSB0aGUgYWJpbGl0eSB0byBjb250cm9sIG1lbW9yeSByZWdpb24gc3RhdGVzICh1bnBsdWdnZWQsIG9ubGluZSwgZXRjLikgZGlyZWN0bHkuIEZ1cnRoZXIsIHRoZSBwYXRjaCBnb2VzIGV2ZW4gZnVydGhlciwgYW5kIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzeXN0ZW0gdG8gaGFuZGxlIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSEgVGhhdCBhbG9uZSBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2Ugd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuCgpHaXZlbiB0aGVzZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCB0aGlzIGNsZWFybHkgcHJlc2VudHMgc2V2ZXJhbCBrZXkgYXJlYXMgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgZGF4X2ttZW1fcGFyc2Vfc3RhdGVgLCBgZGV2X2RheF9rbWVtX3Byb2JlYCwgYGRldl9kYXhfa21lbV9yZW1vdmVgLCBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCwgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AuCgpBbmQgSSYjMzk7bGwgYmUgc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlc2UgY29uZmlncyBzZXQ6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIGFyZSBrZXksIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGV5IGRlZmluZSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIG5ld2x5IGludHJvZHVjZWQgY29kZSBvcGVyYXRlcy4KClRoaXMgaXMgYSB3ZWxsLWRlZmluZWQgc2V0IG9mIGNoYW5nZXMsIGludHJvZHVjaW5nIG5ldyBwYXRod2F5cyBhbmQgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMsIHNvIGl0JiMzOTtzIHJpcGUgZm9yIGZ1enplciBhdHRlbnRpb24uIEl0IGlzIGEgZ29vZCB0aW1lIHRvIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O2Rldl9kYXhfa21lbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcmVtb3ZlJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYX0tNRU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9rbWVtX2RvX2hvdHBsdWcmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGF4X2ttZW1fZG9faG90cmVtb3ZlJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O2RheF9rbWVtX3BhcnNlX3N0YXRlJiMzNDssCiAgICAmIzM0O2Rldl9kYXhfa21lbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZfZGF4X2ttZW1fcmVtb3ZlJiMzNDssCiAgICAmIzM0O19fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3JhbmdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE4OjQ1LjQ5Nzc2ODI0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDMzMjI0MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTg6NDUuNDk3NzczNTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjEyNTc5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZTQzMThjNTE1MGQxN2EyNzBmZmQ4NjY4NmM1ZTBjZDU3NzU4N2UwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDE1OjE4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxcbmluZGV4IGIzNDI2NmJmYWU0OWFlLi4yZGNhZDFlOWRhZDBkOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcXG5AQCAtMTUxLDMgKzE1MSwyOSBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0bWVtbWFwX29uX21lbW9yeSBwYXJhbWV0ZXIgZm9yIG1lbW9yeV9ob3RwbHVnLiBUaGlzIGlzXFxuIFxcdFxcdHR5cGljYWxseSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgLVxcbiBcXHRcXHRtZW1vcnlfaG90cGx1Zy5tZW1tYXBfb25fbWVtb3J5IHNldCB0byAndHJ1ZScgb3IgJ2ZvcmNlJy5cXFwiXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMvYnVzL2RheC9kZXZpY2VzL2RheFguWS9zdGF0ZVxcbitEYXRlOlxcdFxcdEp1bmUsIDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHR2Ni4yMVxcbitDb250YWN0OlxcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcXG4rRGVzY3JpcHRpb246XFxuK1xcdFxcdChSVykgQ29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBtZW1vcnkgcmVnaW9uLlxcbitcXHRcXHRBcHBsaWVzIHRvIGFsbCBtZW1vcnkgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLlxcbitcXHRcXHRPbmx5IGFwcGxpZXMgdG8gZGF4X2ttZW0gZGV2aWNlcy5cXG4rXFxuK1xcdFxcdFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZTsgdGhlIHdyaXRhYmxlIHN0YXRlcyBtaXJyb3JcXG4rXFx0XFx0dGhlIHBlci1ibG9jayAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlIEFCSTo6XFxuK1xcbitcXHRcXHQgIFxcXCJ1bnBsdWdnZWRcXFwiOiBtZW1vcnkgYmxvY2tzIGFyZSBub3QgcHJlc2VudFxcbitcXHRcXHQgIFxcXCJvbmxpbmVcXFwiOiBtZW1vcnkgaXMgb25saW5lLCB6b25lIGNob3NlbiBieSB0aGUga2VybmVsXFxuK1xcdFxcdCAgXFxcIm9ubGluZV9rZXJuZWxcXFwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMXFxuK1xcdFxcdCAgXFxcIm9ubGluZV9tb3ZhYmxlXFxcIjogbWVtb3J5IGlzIG9ubGluZSBpbiBaT05FX01PVkFCTEVcXG4rXFxuK1xcdFxcdFxcXCJvZmZsaW5lXFxcIiAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcXG4rXFx0XFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxcbitcXHRcXHRhdXRvX29ubGluZV9ibG9ja3MgcG9saWN5IGlzIFxcXCJvZmZsaW5lXFxcIi4gIEl0IGNhbm5vdCBiZSB3cml0dGVuLFxcbitcXHRcXHRhcyBpdCdzIG5vdCB1c2VmdWwgYW5kIGNyZWF0ZXMgZGV2aWNlIGRlc3RydWN0aW9uIHJhY2VzLlxcbitcXG4rXFx0XFx0QSBkZXZpY2UgY2FuIG9ubHkgYmUgb25saW5lZCBmcm9tIHRoZSBcXFwidW5wbHVnZ2VkXFxcIiBzdGF0ZSwgc28gYVxcbitcXHRcXHRkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byBcXFwidW5wbHVnZ2VkXFxcIiBiZWZvcmUgaXQgY2FuIGJlIG9ubGluZWRcXG4rXFx0XFx0aW50byBhIGRpZmZlcmVudCBzdGF0ZS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuaW5kZXggYjMxODM0NDQyNmZhYmMuLjNhMmY2OWQzYWY3YjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbkBAIC00Niw2ICs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcXG4gXFx0fVxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xcbitcXG4rY29uc3QgY2hhciAqbWhwX29ubGluZV90eXBlX3RvX3N0cihpbnQgb25saW5lX3R5cGUpXFxuK3tcXG4rXFx0aWYgKG9ubGluZV90eXBlIFxcdTAwM2MgMCB8fCBvbmxpbmVfdHlwZSBcXHUwMDNlPSAoaW50KUFSUkFZX1NJWkUob25saW5lX3R5cGVfdG9fc3RyKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9vbmxpbmVfdHlwZV90b19zdHIpO1xcbiBcXG4gI2RlZmluZSB0b19tZW1vcnlfYmxvY2soZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWVtb3J5X2Jsb2NrLCBkZXYpXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXFxuaW5kZXggNDkyNTczYjQ3ZjY2MjQuLjRhMDNiMzIzYjAwMzdkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5jXFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbkBAIC0zOTQsNiArMzk1LDcgQEAgc3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdFxcdFxcdC5zaXplID0gMCxcXG4gXFx0XFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdFxcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IGRldl9kYXggKmRldl9kYXggPSBfX2Rldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpO1xcbiBcXG5AQCAtMTUyNyw2ICsxNTI5LDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2Rldm1fY3JlYXRlX2Rldl9kYXgoc3RydWN0IGRldl9kYXhfZGF0YSAqZGF0YSlcXG4gXFx0aWRhX2luaXQoXFx1MDAyNmRldl9kYXgtXFx1MDAzZWlkYSk7XFxuIFxcbiBcXHRkZXZfZGF4LVxcdTAwM2VtZW1tYXBfb25fbWVtb3J5ID0gZGF0YS1cXHUwMDNlbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0ZGV2X2RheC1cXHUwMDNlb25saW5lX3R5cGUgPSBkYXRhLVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4gXFxuIFxcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xcbiBcXHRkZXYtXFx1MDAzZWRldnQgPSBpbm9kZS1cXHUwMDNlaV9yZGV2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuaCBiL2RyaXZlcnMvZGF4L2J1cy5oXFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLmYzYzlkYWU1ZGU2YmE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2J1cy5oXFxuKysrIGIvZHJpdmVycy9kYXgvYnVzLmhcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2lmbmRlZiBfX0RBWF9CVVNfSF9fXFxuICNkZWZpbmUgX19EQVhfQlVTX0hfX1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuQEAgLTE2LDYgKzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xcbiAjZGVmaW5lIElPUkVTT1VSQ0VfREFYX1NUQVRJQyBCSVQoMClcXG4gI2RlZmluZSBJT1JFU09VUkNFX0RBWF9LTUVNIEJJVCgxKVxcbiBcXG4rLypcXG4rICogb25saW5lX3R5cGUgc2VudGluZWw6IHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgd2l0aG91dCBhbiBleHBsaWNpdCBvbmxpbmVcXG4rICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXFxuKyAqIChub3QgYXQgZGV2aWNlLWNyZWF0aW9uIHRpbWUsIHdoaWNoIHdvdWxkIGZyZWV6ZSBhIHN0YWxlIHBvbGljeSkuXFxuKyAqL1xcbisjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFxcdCgtMSlcXG4rXFxuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcXG4gXFx0XFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbkBAIC0yNiw2ICszNCw3IEBAIHN0cnVjdCBkZXZfZGF4X2RhdGEge1xcbiBcXHRyZXNvdXJjZV9zaXplX3Qgc2l6ZTtcXG4gXFx0aW50IGlkO1xcbiBcXHRib29sIG1lbW1hcF9vbl9tZW1vcnk7XFxuK1xcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9jeGwuYyBiL2RyaXZlcnMvZGF4L2N4bC5jXFxuaW5kZXggM2FiMzliNzc4NDNkNWUuLjFhN2VjNjIxMjIxMzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXFxuKysrIGIvZHJpdmVycy9kYXgvY3hsLmNcXG5AQCAtMjcsNiArMjcsNyBAQCBzdGF0aWMgaW50IGN4bF9kYXhfcmVnaW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmFuZ2VfbGVuKFxcdTAwMjZjeGxyX2RheC1cXHUwMDNlaHBhX3JhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSB0cnVlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXFx1MDAyNmRhdGEpKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uY2NkNzc5NjVmZTNlZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnlfaG90cGx1Zy5oXFx1MDAzZVxcbiBcXG4gLyogcHJpdmF0ZSByb3V0aW5lcyBiZXR3ZWVuIGNvcmUgZmlsZXMgKi9cXG4gc3RydWN0IGRheF9kZXZpY2U7XFxuQEAgLTc5LDYgKzgwLDggQEAgc3RydWN0IGRldl9kYXhfcmFuZ2Uge1xcbiAgKiBAZGV2OiBkZXZpY2UgY29yZVxcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxcbiAgKiBAbWVtbWFwX29uX21lbW9yeTogYWxsb3cga21lbSB0byBwdXQgdGhlIG1lbW1hcCBpbiB0aGUgbWVtb3J5XFxuKyAqIEBvbmxpbmVfdHlwZTogTU1PUF8qIG9ubGluZSB0eXBlIGZvciBtZW1vcnkgaG90cGx1Zywgb3IgREFYX09OTElORV9ERUZBVUxUXFxuKyAqXFx0XFx0IHRvIHJlc29sdmUgdGhlIHN5c3RlbSBkZWZhdWx0IHBvbGljeSB3aGVuIGttZW0gYmluZHNcXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcXG4gICogQHJhbmdlczogcmFuZ2UgdHVwbGVzIG9mIG1lbW9yeSB1c2VkXFxuICAqL1xcbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcXG4gXFx0c3RydWN0IGRldmljZSBkZXY7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcXG4rXFx0ZW51bSBtbW9wIG9ubGluZV90eXBlO1xcbiBcXHRpbnQgbnJfcmFuZ2U7XFxuIFxcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcXG5pbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcXG4rKysgYi9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xcbkBAIC0zNyw2ICszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0LmlkID0gLTEsXFxuIFxcdFxcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFxcdTAwMjZtcmktXFx1MDAzZXJhbmdlKSxcXG4gXFx0XFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcXG4rXFx0XFx0Lm9ubGluZV90eXBlID0gREFYX09OTElORV9ERUZBVUxULFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX2NyZWF0ZV9kZXZfZGF4KFxcdTAwMjZkYXRhKSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2ttZW0uYyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xcbmluZGV4IGExOGUyYjk2OGU0ZGFlLi4zNDA0ODY1ODZkODJjNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9rbWVtLmNcXG4rKysgYi9kcml2ZXJzL2RheC9rbWVtLmNcXG5AQCAtMzMsOSArMzMsNyBAQCBzdGF0aWMgaW50IGRheF9rbWVtX3JhbmdlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LCBpbnQgaSwgc3RydWN0IHJhbmdlICpyKVxcbiBcXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZXJhbmdlc1tpXTtcXG4gXFx0c3RydWN0IHJhbmdlICpyYW5nZSA9IFxcdTAwMjZkYXhfcmFuZ2UtXFx1MDAzZXJhbmdlO1xcbiBcXG4tXFx0LyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovXFxuLVxcdHItXFx1MDAzZXN0YXJ0ID0gQUxJR04ocmFuZ2UtXFx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcXG4tXFx0ci1cXHUwMDNlZW5kID0gQUxJR05fRE9XTihyYW5nZS1cXHUwMDNlZW5kICsgMSwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgLSAxO1xcbitcXHQqciA9IG1lbW9yeV9ibG9ja19hbGlnbmVkX3JhbmdlKHJhbmdlKTtcXG4gXFx0aWYgKHItXFx1MDAzZXN0YXJ0IFxcdTAwM2U9IHItXFx1MDAzZWVuZCkge1xcbiBcXHRcXHRyLVxcdTAwM2VzdGFydCA9IHJhbmdlLVxcdTAwM2VzdGFydDtcXG4gXFx0XFx0ci1cXHUwMDNlZW5kID0gcmFuZ2UtXFx1MDAzZWVuZDtcXG5AQCAtNDQsOSArNDIsMTUgQEAgc3RhdGljIGludCBkYXhfa21lbV9yYW5nZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgaW50IGksIHN0cnVjdCByYW5nZSAqcilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKyNkZWZpbmUgREFYX0tNRU1fVU5QTFVHR0VEXFx0KC0xKVxcbitcXG4gc3RydWN0IGRheF9rbWVtX2RhdGEge1xcbiBcXHRjb25zdCBjaGFyICpyZXNfbmFtZTtcXG4gXFx0aW50IG1naWQ7XFxuK1xcdGludCBudW1hX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xcbitcXHRpbnQgc3RhdGU7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBob3RwbHVnIHN0YXRlIHRyYW5zaXRpb25zICovXFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzW107XFxuIH07XFxuIFxcbkBAIC02NSwxNSArNjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxcbiBcXHRtdF9wdXRfbWVtb3J5X3R5cGVzKFxcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XFxuIH1cXG4gXFxuKy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xcbitzdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBzdGF0ZSA9PSBNTU9QX09OTElORSB8fFxcbitcXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfS0VSTkVMIHx8XFxuK1xcdCAgICAgICBzdGF0ZSA9PSBNTU9QX09OTElORV9NT1ZBQkxFO1xcbit9XFxuK1xcbisvKipcXG4rICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcXG4rICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xcbisgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3NcXG4rICpcXG4rICogSG90cGx1Z3MgYWxsIHJhbmdlcyBpbiB0aGUgZGV2X2RheCByZWdpb24gYXMgc3lzdGVtIG1lbW9yeSB3aXRoIHRoZVxcbisgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgaW50IG9ubGluZV90eXBlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdGludCBpLCByYywgYWRkZWQgPSAwO1xcbitcXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcbitcXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAob25saW5lX3R5cGUgXFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCByYW5nZSByYW5nZTtcXG4rXFxuK1xcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4rXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuK1xcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYydkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcXG4rXFx0XFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdG9ubGluZV90eXBlKTtcXG4rXFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG9cXG4rXFx0XFx0XFx0ICogYWRkIHNvIGEgbGF0ZXIgaG90cmVtb3ZlIGRvZXMgbm90IHRyeSB0byByZW1vdmUgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIHRoYXQgd2FzIG5ldmVyIGFkZGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXJlc1tpXSkge1xcbitcXHRcXHRcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoYWRkZWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YWRkZWQrKztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGFkZGVkO1xcbit9XFxuK1xcbisvKipcXG4rICogZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMgLSBjcmVhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGRheCBrbWVtXFxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcXG4rICpcXG4rICogSW5pdGlhbGl6ZXMgYWxsIHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEQVhcXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcmFuZ2VzLCBvciBuZWdhdGl2ZSBlcnJvci5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdGludCBpLCByYywgbWFwcGVkID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuK1xcbitcXHRcXHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFxcdTAwMjZyYW5nZSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXFxuK1xcdFxcdGlmIChkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4rXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSxcXG4rXFx0XFx0XFx0XFx0XFx0IGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG4rXFx0XFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibWFwcGluZyVkOiAlI2xseC0lI2xseCBjb3VsZCBub3QgcmVzZXJ2ZSByZWdpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogT25jZSBzb21lIG1lbW9yeSBoYXMgYmVlbiBvbmxpbmVkIHdlIGNhbid0XFxuK1xcdFxcdFxcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChtYXBwZWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2V0IGZsYWdzIGFwcHJvcHJpYXRlIGZvciBTeXN0ZW0gUkFNLiAgTGVhdmUgLi4uX0JVU1kgY2xlYXJcXG4rXFx0XFx0ICogc28gdGhhdCBhZGRfbWVtb3J5KCkgY2FuIGFkZCBhIGNoaWxkIHJlc291cmNlLiAgRG8gbm90XFxuK1xcdFxcdCAqIGluaGVyaXQgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IHNpbmNlIGl0IG1heSBzZXQgbmV3IGZsYWdzXFxuK1xcdFxcdCAqIHVua25vd24gdG8gdXMgdGhhdCB3aWxsIGJyZWFrIGFkZF9tZW1vcnkoKSBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlcy1cXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XFxuK1xcdFxcdG1hcHBlZCsrO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXBwZWQ7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbisvKipcXG4rICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIE9mZmxpbmVzIGFuZCByZW1vdmVzIGV2ZXJ5IGN1cnJlbnRseS1hZGRlZCByYW5nZSBpbiB0aGUgZGV2X2RheCByZWdpb25cXG4rICogYXRvbWljYWxseTogZWl0aGVyIGFsbCByYW5nZXMgYXJlIG9mZmxpbmVkIGFuZCByZW1vdmVkLCBvciBub25lIGFyZSBhbmRcXG4rICogdGhlIGRldmljZSBpcyByZXR1cm5lZCB0byBpdHMgcHJpb3Igc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByYW5nZSAqcmFuZ2VzO1xcbitcXHRpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7XFxuK1xcbitcXHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlLCBzaXplb2YoKnJhbmdlcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHQvKiBDb2xsZWN0IHRoZSByYW5nZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IGFkZGVkIGR1cmluZyBwcm9iZS4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbitcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJhbmdlc1tucl9yYW5nZXMrK10gPSByYW5nZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogTm90aGluZyBhZGRlZCBtZWFucyBub3RoaW5nIHRvIHJlbW92ZS4gKi9cXG4rXFx0aWYgKCFucl9yYW5nZXMpIHtcXG4rXFx0XFx0a2ZyZWUocmFuZ2VzKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xcbitcXHRrZnJlZShyYW5nZXMpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldl9kYXgtXFx1MDAzZW5yX3JhbmdlOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzW2ldKTtcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcmVzW2ldID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RyZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbitcXG4rLyoqXFxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4rICogQGRhdGE6IHRoZSBkYXhfa21lbV9kYXRhIHN0cnVjdHVyZSB3aXRoIHJlc291cmNlIHRyYWNraW5nXFxuKyAqXFxuKyAqIFJlbW92ZXMgYWxsIHJlc291cmNlcyBpbiB0aGUgZGV2X2RheCByZWdpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGRldmljZSB1bmJpbmQgb2NjdXJzIGJlZm9yZSBtZW1vcnkgaXMgaG90cmVtb3ZlZCwgd2UgY2FuIG5ldmVyXFxuK1xcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxcbitcXHQgKiBoZXJlIG1heSBjYXVzZSBkZWFkbG9jayBhbmQgYSBmYWlsdXJlIHRvIGZpbmlzaCB0aGUgdW5iaW5kLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoV0FSTigoKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAoZGF0YS1cXHUwMDNlc3RhdGUgIT0gTU1PUF9PRkZMSU5FKSksXFxuK1xcdFxcdCBcXFwiSG90cGx1ZyBtZW1vcnkgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZTsgaSsrKSB7XFxuK1xcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVzW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmVtb3ZlX3Jlc291cmNlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc1tpXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXG4rXFx0LyogXFxcInVucGx1Z2dlZFxcXCIgaXMga21lbS1zcGVjaWZpYyAtIHRoZSByZXN0IG1hcCB0byBNTU9QXyAqL1xcbitcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcXFwidW5wbHVnZ2VkXFxcIikpXFxuK1xcdFxcdHJldHVybiBEQVhfS01FTV9VTlBMVUdHRUQ7XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihidWYpO1xcbitcXHQvKiBEaXNhbGxvdyBcXFwib2ZmbGluZVxcXCI6IGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyByYWNlIGNvbmRpdGlvbnMgKi9cXG4rXFx0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiBvbmxpbmVfdHlwZTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGNvbnN0IGNoYXIgKnN0YXRlX3N0cjtcXG4rXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXFxuK1xcdFxcdHN0YXRlX3N0ciA9IFxcXCJ1bnBsdWdnZWRcXFwiO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIHN0YXRlX3N0ciA/OiBcXFwidW5rbm93blxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcXG4rXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XFxuK1xcdGlmIChvbmxpbmVfdHlwZSBcXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIG9ubGluZV90eXBlO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIEFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBvbmxpbmVfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFxuK1xcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpIHtcXG4rXFx0XFx0cmMgPSBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0XFx0cmV0dXJuIGxlbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cXG4rXFx0aWYgKGRhdGEtXFx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0ZGF0YS1cXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RhdGUpO1xcbitcXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9sZW4gPSAwLCBvcmlnX2xlbiA9IDA7XFxuIFxcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptdHlwZTtcXG4tXFx0aW50IGksIHJjLCBtYXBwZWQgPSAwO1xcbi1cXHRtaHBfdCBtaHBfZmxhZ3M7XFxuK1xcdGludCBpLCByYztcXG4gXFx0aW50IG51bWFfbm9kZTtcXG4rXFx0aW50IG9ubGluZV90eXBlO1xcbiBcXHRpbnQgYWRpc3QgPSBNRU1USUVSX0RFRkFVTFRfREFYX0FESVNUQU5DRTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzMyw2OCArNDQ1LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWdfbWdpZDtcXG4gXFx0ZGF0YS1cXHUwMDNlbWdpZCA9IHJjO1xcbitcXHRkYXRhLVxcdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XFxuK1xcdGRhdGEtXFx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xcbitcXHRkYXRhLVxcdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGF0YS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4tXFx0XFx0c3RydWN0IHJhbmdlIHJhbmdlO1xcbi1cXG4tXFx0XFx0cmMgPSBkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcXHUwMDI2cmFuZ2UpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cXG4tXFx0XFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwgZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRpZiAoIXJlcykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0aSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxcbi1cXHRcXHRcXHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAobWFwcGVkKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0cmMgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfbWVtO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IHJlcztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXFxuLVxcdFxcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxcbi1cXHRcXHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xcbi1cXHRcXHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXMtXFx1MDAzZWZsYWdzID0gSU9SRVNPVVJDRV9TWVNURU1fUkFNO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4gXFxuLVxcdFxcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcXG4tXFx0XFx0aWYgKGRldl9kYXgtXFx1MDAzZW1lbW1hcF9vbl9tZW1vcnkpXFxuLVxcdFxcdFxcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcXG4rXFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzb3VyY2VzO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxcbi1cXHRcXHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXFx1MDAzZW1naWQsIHJhbmdlLnN0YXJ0LFxcbi1cXHRcXHRcXHRcXHRyYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSwga21lbV9uYW1lLCBtaHBfZmxhZ3MpO1xcbitcXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cXG4rXFx0b25saW5lX3R5cGUgPSBkZXZfZGF4LVxcdTAwM2VvbmxpbmVfdHlwZTtcXG4rXFx0aWYgKG9ubGluZV90eXBlID09IERBWF9PTkxJTkVfREVGQVVMVClcXG4rXFx0XFx0b25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4gXFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4tXFx0XFx0XFx0cmVtb3ZlX3Jlc291cmNlKHJlcyk7XFxuLVxcdFxcdFxcdGtmcmVlKHJlcyk7XFxuLVxcdFxcdFxcdGRhdGEtXFx1MDAzZXJlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdGlmIChtYXBwZWQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXBwZWQrKztcXG4tXFx0fVxcbitcXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuK1xcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2hvdHBsdWc7XFxuK1xcdGRhdGEtXFx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XFxuIFxcbi1cXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcXG4rXFx0cmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc3RhdGUgc3lzZnMgZW50cnlcXFxcblxcXCIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVxdWVzdF9tZW06XFxuK2Vycl9ob3RwbHVnOlxcbitcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG4rZXJyX3Jlc291cmNlczpcXG4rXFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuIFxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbiBlcnJfcmVnX21naWQ6XFxuIFxcdGtmcmVlKGRhdGEtXFx1MDAzZXJlc19uYW1lKTtcXG5AQCAtMjA4LDYzICs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiB7XFxuLVxcdGludCBpLCBzdWNjZXNzID0gMDtcXG4gXFx0aW50IG5vZGUgPSBkZXZfZGF4LVxcdTAwM2V0YXJnZXRfbm9kZTtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmRldl9kYXgtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFxuK1xcdGRldmljZV9yZW1vdmVfZmlsZShkZXYsIFxcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XFxuIFxcdC8qXFxuLVxcdCAqIFdlIGhhdmUgb25lIHNob3QgZm9yIHJlbW92aW5nIG1lbW9yeSwgaWYgc29tZSBtZW1vcnkgYmxvY2tzIHdlcmUgbm90XFxuLVxcdCAqIG9mZmxpbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHJlbW92ZV9tZW1vcnkoKSB3aWxsIGZhaWwsIGFuZFxcbi1cXHQgKiB0aGVyZSBpcyBubyB3YXkgdG8gaG90cmVtb3ZlIHRoaXMgbWVtb3J5IHVudGlsIHJlYm9vdCBiZWNhdXNlIGRldmljZVxcbi1cXHQgKiB1bmJpbmQgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgd2UgcmV0dXJuIGZhaWx1cmUuXFxuK1xcdCAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW5cXG4rXFx0ICogZGVhZGxvY2sgYSB0YXNrIGFzIHVuYmluZCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQpLiAgVW5mb3J0dW5hdGVseSB3ZVxcbitcXHQgKiBoYXZlIHRvIGxlYWsgYWxsIG9mIFtyZXNvdXJjZXMsIG1lbW9yeSBncm91cCwgQGRhdGEsIG1lbXR5cGVdLCB1bnRpbFxcbitcXHQgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uXFxuK1xcdCAqXFxuK1xcdCAqIG9mZmxpbmUgYmxvY2tzIGFyZSByZW1vdmVkIG9uIHVuYmluZCwgYnV0IG1heSBsZWFrIG9uIGZhaWx1cmUuXFxuIFxcdCAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2X2RheC1cXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XFxuLVxcdFxcdGludCByYztcXG4tXFxuLVxcdFxcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdC8qIHJhbmdlIHdhcyBuZXZlciBhZGRlZCBkdXJpbmcgcHJvYmUgKi9cXG4tXFx0XFx0aWYgKCFkYXRhLVxcdTAwM2VyZXNbaV0pIHtcXG4tXFx0XFx0XFx0c3VjY2VzcysrO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXFx1MDAyNnJhbmdlKSk7XFxuLVxcdFxcdGlmIChyYyA9PSAwKSB7XFxuLVxcdFxcdFxcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbi1cXHRcXHRcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNbaV0pO1xcbi1cXHRcXHRcXHRkYXRhLVxcdTAwM2VyZXNbaV0gPSBOVUxMO1xcbi1cXHRcXHRcXHRzdWNjZXNzKys7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoZGF0YS1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkhvdHBsdWcgcmVnaW9ucyBzdHVjayBvbmxpbmUgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG4gXFx0XFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xcbi1cXHRcXHRkZXZfZXJyKGRldixcXG4tXFx0XFx0XFx0XFxcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9IGVsc2UgaWYgKGRhdGEtXFx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3VjY2VzcyBcXHUwMDNlPSBkZXZfZGF4LVxcdTAwM2Vucl9yYW5nZSkge1xcbi1cXHRcXHRtZW1vcnlfZ3JvdXBfdW5yZWdpc3RlcihkYXRhLVxcdTAwM2VtZ2lkKTtcXG4tXFx0XFx0a2ZyZWUoZGF0YS1cXHUwMDNlcmVzX25hbWUpO1xcbi1cXHRcXHRrZnJlZShkYXRhKTtcXG4tXFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIENsZWFyIHRoZSBtZW10eXBlIGFzc29jaWF0aW9uIG9uIHN1Y2Nlc3NmdWwgdW5wbHVnLlxcbi1cXHRcXHQgKiBJZiBub3QsIHdlIGhhdmUgbWVtb3J5IGJsb2NrcyBsZWZ0IHdoaWNoIGNhbiBiZVxcbi1cXHRcXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXFxuLVxcdFxcdCAqIGZvciB0aGF0LiBUaGlzIGltcGxpZXMgdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBhcm91bmRcXG4tXFx0XFx0ICogdGlsbCBuZXh0IHJlYm9vdC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGNsZWFyX25vZGVfbWVtb3J5X3R5cGUobm9kZSwgTlVMTCk7XFxuLVxcdH1cXG4rXFx0ZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XFxuK1xcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcbitcXHRrZnJlZShkYXRhLVxcdTAwM2VyZXNfbmFtZSk7XFxuK1xcdGtmcmVlKGRhdGEpO1xcbitcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXFxuK1xcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXFxuK1xcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcXG4rXFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxcbitcXHQgKiB0aWxsIG5leHQgcmVib290LlxcbitcXHQgKi9cXG4rXFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcXG4gfVxcbiAjZWxzZVxcbiBzdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZkZXZfZGF4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogV2l0aG91dCBob3RyZW1vdmUgcHVycG9zZWx5IGxlYWsgdGhlIHJlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciB0aGVcXG4gXFx0ICogZGV2aWNlLWRheCByYW5nZSBhbmQgcmV0dXJuICcwJyB0byAtXFx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9wbWVtLmMgYi9kcml2ZXJzL2RheC9wbWVtLmNcXG5pbmRleCBiZWU5MzA2NmE4NDk3Ny4uZTdhZGFjZTY5MTk1MDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXFxuKysrIGIvZHJpdmVycy9kYXgvcG1lbS5jXFxuQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIHN0cnVjdCBkZXZfZGF4ICpfX2RheF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0LnBnbWFwID0gXFx1MDAyNnBnbWFwLFxcbiBcXHRcXHQuc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLFxcbiBcXHRcXHQubWVtbWFwX29uX21lbW9yeSA9IGZhbHNlLFxcbitcXHRcXHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXFxuIFxcdH07XFxuIFxcbiBcXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcXHUwMDI2ZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjlmNWVmMDMwOWY3NzM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JhbmdlLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1JTl9NRU1PUllfQkxPQ0tfU0laRSAgICAgKDFVTCBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OX1NJWkVfQklUUylcXG4gXFxuQEAgLTEwMCw2ICsxMDEsMjcgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XFxuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXModm9pZCk7XFxuIGludCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKTtcXG4gXFxuKy8qKlxcbisgKiBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZSAtIGFsaWduIGEgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSB0byBtZW1vcnkgYmxvY2tzXFxuKyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXFxuKyAqXFxuKyAqIEFsaWducyB0aGUgc3RhcnQgYWRkcmVzcyB1cCBhbmQgdGhlIGVuZCBhZGRyZXNzIGRvd24gdG8gbWVtb3J5IGJsb2NrXFxuKyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxcbisgKiBvcGVyYXRlIG9uIG1lbW9yeS1ibG9jayBhbGlnbmVkIHJhbmdlcy5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcXG4rICogcmFuZ2UgaXMgdmFsaWQgKGFsaWduZWQuc3RhcnQgXFx1MDAzYyBhbGlnbmVkLmVuZCkgYmVmb3JlIHVzaW5nIGl0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFuZ2UgbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFuZ2UgYWxpZ25lZDtcXG4rXFxuK1xcdGFsaWduZWQuc3RhcnQgPSBBTElHTihyYW5nZS1cXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xcbitcXHRhbGlnbmVkLmVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZWVuZCArIDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcXG4rXFxuK1xcdHJldHVybiBhbGlnbmVkO1xcbit9XFxuK1xcbiBzdHJ1Y3QgbWVtb3J5X25vdGlmeSB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcXG5pbmRleCA3YzlkNjY3MjljNjA5NS4uNDZjNzk2NTcwNjkyNmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXFxuQEAgLTEyNyw2ICsxMjcsNyBAQCBleHRlcm4gaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTtcXG4gXFxuIGV4dGVybiBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cik7XFxuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcXG4gXFxuIC8qIElmIG1vdmFibGVfbm9kZSBib290IG9wdGlvbiBzcGVjaWZpZWQgKi9cXG4gZXh0ZXJuIGJvb2wgbW92YWJsZV9ub2RlX2VuYWJsZWQ7XFxuQEAgLTI2Nyw2ICsyNjgsNyBAQCBleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuIGV4dGVybiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xcbiBleHRlcm4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuK2ludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XFxuIFxcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKSB7fVxcbkBAIC0yODMsNiArMjg1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBucl9yYW5nZXMpXFxuK3tcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5AQCAtMjk0LDYgKzMwMiw5IEBAIGV4dGVybiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncyk7XFxuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSxcXG4gXFx0XFx0XFx0ICAgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRlbnVtIG1tb3Agb25saW5lX3R5cGUpO1xcbiBleHRlcm4gaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgIG1ocF90IG1ocF9mbGFncyk7XFxuQEAgLTMxNiw2ICszMjcsOCBAQCBleHRlcm4gc3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsXFxuIGV4dGVybiBpbnQgYXJjaF9jcmVhdGVfbGluZWFyX21hcHBpbmcoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyk7XFxuIHZvaWQgYXJjaF9yZW1vdmVfbGluZWFyX21hcHBpbmcodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKSB7IHJldHVybiBNTU9QX09GRkxJTkU7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbkBAIC0yMzksNiArMjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxcbiBcXG4gXFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSk7XFxuIFxcbiB2b2lkIG1ocF9zZXRfZGVmYXVsdF9vbmxpbmVfdHlwZShlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG5AQCAtMTMzNyw3ICsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbiBcXG4gc3RhdGljIGludCBvbmxpbmVfbWVtb3J5X2Jsb2NrKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdm9pZCAqYXJnKVxcbiB7XFxuLVxcdG1lbS1cXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcXG4rXFx0ZW51bSBtbW9wICpvbmxpbmVfdHlwZSA9IGFyZztcXG4rXFxuK1xcdG1lbS1cXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XFxuIFxcdHJldHVybiBkZXZpY2Vfb25saW5lKFxcdTAwMjZtZW0tXFx1MDAzZWRldik7XFxuIH1cXG4gXFxuQEAgLTE0OTEsNyArMTQ5NCw4IEBAIHN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuICAqXFxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG4gICovXFxuLWludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIG1tb3Agb25saW5lX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IG1ocF9wYXJhbXMgcGFyYW1zID0geyAucGdwcm90ID0gcGdwcm90X21ocChQQUdFX0tFUk5FTCkgfTtcXG4gXFx0ZW51bSBtZW1ibG9ja19mbGFncyBtZW1ibG9ja19mbGFncyA9IE1FTUJMT0NLX05PTkU7XFxuQEAgLTE1ODEsOCArMTU4NSw5IEBAIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuIFxcdFxcdG1lcmdlX3N5c3RlbV9yYW1fcmVzb3VyY2UocmVzKTtcXG4gXFxuIFxcdC8qIG9ubGluZSBwYWdlcyBpZiByZXF1ZXN0ZWQgKi9cXG4tXFx0aWYgKG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpICE9IE1NT1BfT0ZGTElORSlcXG4tXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBOVUxMLCBvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0aWYgKG9ubGluZV90eXBlICE9IE1NT1BfT0ZGTElORSlcXG4rXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcXHUwMDI2b25saW5lX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gZXJyb3I6XFxuQEAgLTE1OTgsNyArMTYwMywxMyBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxuK2ludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSgpKTtcXG4rfVxcbitcXG4rLyogcmVxdWlyZXMgZGV2aWNlX2hvdHBsdWdfbG9jaywgc2VlIF9fYWRkX21lbW9yeV9yZXNvdXJjZSgpICovXFxuIGludCBfX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbkBAIC0xNjI2LDcgKzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xcbiBcXG4tLypcXG4rLyoqXFxuKyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxcbisgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcXG4rICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCJcXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcXG4rICogQG9ubGluZV90eXBlOiBBdXRvLU9ubGluZSBiZWhhdmlvciAob2ZmbGluZSwgb25saW5lLCBrZXJuZWwsIG1vdmFibGUpXFxuKyAqXFxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXFxuICAqIG1lbW9yeSBpcyBub3QgZXhwb3NlZCB2aWEgdGhlIHJhdyBmaXJtd2FyZS1wcm92aWRlZCBtZW1tYXAgYXMgc3lzdGVtXFxuICAqIFJBTSwgaW5zdGVhZCwgaXQgaXMgZGV0ZWN0ZWQgYW5kIGFkZGVkIGJ5IGEgZHJpdmVyIC0gZHVyaW5nIGNvbGQgYm9vdCxcXG5AQCAtMTYzNCw2ICsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuICAqXFxuICAqIFJlYXNvbnMgd2h5IHRoaXMgbWVtb3J5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgdGhlIGluaXRpYWwgbWVtbWFwIG9mIGFcXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcXG4rICpcXG4gICogLSBUaGUgYm9vdGluZyBrZXJuZWwgaXMgaW4gY2hhcmdlIG9mIGRldGVybWluaW5nIGhvdyB0aGlzIG1lbW9yeSB3aWxsIGJlXFxuICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pXFxuICAqIC0gQ29vcmRpbmF0aW9uIHdpdGggYSBoeXBlcnZpc29yIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIG1lbW9yeVxcbkBAIC0xNjQ2LDkgKzE2NjYsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XFxuICAqXFxuICAqIFRoZSByZXNvdXJjZV9uYW1lICh2aXNpYmxlIHZpYSAvcHJvYy9pb21lbSkgaGFzIHRvIGhhdmUgdGhlIGZvcm1hdFxcbiAgKiBcXFwiU3lzdGVtIFJBTSAoJERSSVZFUilcXFwiLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4taW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4tXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbitpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuK1xcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4rXFx0XFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxcbiB7XFxuIFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbiBcXHRpbnQgcmM7XFxuQEAgLTE2NTgsNiArMTY4MSw5IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdCAgICByZXNvdXJjZV9uYW1lW3N0cmxlbihyZXNvdXJjZV9uYW1lKSAtIDFdICE9ICcpJylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAob25saW5lX3R5cGUgXFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcXG4gXFxuIFxcdHJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSk7XFxuQEAgLTE2NjYsNyArMTY5Miw3IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmMgPSBhZGRfbWVtb3J5X3Jlc291cmNlKG5pZCwgcmVzLCBtaHBfZmxhZ3MpO1xcbitcXHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XFxuIFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XFxuIFxcbkBAIC0xNjc0LDYgKzE3MDAsMzAgQEAgaW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFx0dW5sb2NrX2RldmljZV9ob3RwbHVnKCk7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXFxcImttZW1cXFwiKTtcXG4rXFxuKy8qKlxcbisgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxcbisgKiBAbmlkOiBOVU1BIG5vZGUgSUQgd2hlcmUgdGhlIG1lbW9yeSB3aWxsIGJlIGFkZGVkXFxuKyAqIEBzdGFydDogU3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJhbmdlXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcXG4rICogQHJlc291cmNlX25hbWU6IFJlc291cmNlIG5hbWUgaW4gZm9ybWF0IFxcXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVxcXCJcXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcXG4rICpcXG4rICogQWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIHRoZSBzeXN0ZW0gZGVmYXVsdCBvbmxpbmUgdHlwZSBzZXQgYnlcXG4rICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci5cXG4rICpcXG4rICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcmVzb3VyY2VfbmFtZSwgbWhwX3QgbWhwX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQobmlkLCBzdGFydCwgc2l6ZSwgcmVzb3VyY2VfbmFtZSxcXG4rXFx0XFx0XFx0bWhwX2ZsYWdzLFxcbitcXHRcXHRcXHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCk7XFxuIFxcbiAvKlxcbkBAIC0yMzc5LDU4ICsyNDI5LDk4IEBAIHN0YXRpYyBpbnQgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcXG4gICovXFxuIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYl9jb3VudCA9IHNpemUgLyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpO1xcbitcXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7IC5zdGFydCA9IHN0YXJ0LCAuZW5kID0gc3RhcnQgKyBzaXplIC0gMSB9O1xcbitcXG4rXFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuK1xcbisvKipcXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xcbisgKiBAcmFuZ2VzOiBhcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB0byBvZmZsaW5lIGFuZCByZW1vdmVcXG4rICogQG5yX3JhbmdlczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQHJhbmdlc1xcbisgKlxcbisgKiBPZmZsaW5lIGFuZCByZW1vdmUgc2V2ZXJhbCBtZW1vcnkgcmFuZ2VzIGFzIG9uZSBvcGVyYXRpb24sIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBvdGhlciBob3RwbHVnIG9wZXJhdGlvbnMgYnkgYSBzaW5nbGUgbG9ja19kZXZpY2VfaG90cGx1ZygpLlxcbisgKlxcbisgKiBUaGlzIG9mZmxpbmVzIGFsbCByYW5nZXMgYmVmb3JlIHJlbW92aW5nIGFueSBvZiB0aGVtLiAgSWYgb2ZmbGluaW5nIGFueVxcbisgKiByYW5nZSBmYWlscywgdGhlIGVudGlyZSBwcm9jZXNzIGlzIHJldmVydGVkIGFuZCBub3RoaW5nIGlzIHJlbW92ZWQuXFxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cXG4rICpcXG4rICogRWFjaCByYW5nZSBtdXN0IGJlIG1lbW9yeS1ibG9jayBhbGlnbmVkIGluIHN0YXJ0IGFuZCBzaXplLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLiAgT24gZmFpbHVyZSBubyByYW5nZSBoYXNcXG4rICogYmVlbiByZW1vdmVkLlxcbisgKi9cXG4raW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLCBpbnQgbnJfcmFuZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWJfdG90YWwgPSAwO1xcbiBcXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XFxuLVxcdGludCByYztcXG4rXFx0aW50IGksIHJjID0gMDtcXG4gXFxuLVxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4tXFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRpZiAoIXJhbmdlcyB8fCBucl9yYW5nZXMgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0dTY0IHN0YXJ0ID0gcmFuZ2VzW2ldLnN0YXJ0O1xcbitcXHRcXHR1NjQgc2l6ZSA9IHJhbmdlX2xlbihcXHUwMDI2cmFuZ2VzW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0bWJfdG90YWwgKz0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFdlJ2xsIHJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZWFjaCBtZW1vcnkgYmxvY2ssIHNvIHdlIGNhblxcbi1cXHQgKiB0cnkgdG8gcmV2ZXJ0IHdoYXRldmVyIHdlIGRpZCB3aGVuIG9mZmxpbmluZyBvbmUgbWVtb3J5IGJsb2NrIGZhaWxzXFxuLVxcdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXFxuK1xcdCAqIFJlbWVtYmVyIHRoZSBvbGQgb25saW5lIHR5cGUgb2YgZXZlcnkgbWVtb3J5IGJsb2NrIGFjcm9zcyBhbGwgcmFuZ2VzLFxcbitcXHQgKiBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG9mZmxpbmluZyBhIGxhdGVyIGJsb2NrIGZhaWxzLiAgQWxsIGVudHJpZXMgc3RhcnRcXG4rXFx0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxcbiBcXHQgKi9cXG4tXFx0b25saW5lX3R5cGVzID0ga21hbGxvY19hcnJheShtYl9jb3VudCwgc2l6ZW9mKCpvbmxpbmVfdHlwZXMpLFxcbitcXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX3RvdGFsLCBzaXplb2YoKm9ubGluZV90eXBlcyksXFxuIFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghb25saW5lX3R5cGVzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0LypcXG4tXFx0ICogSW5pdGlhbGl6ZSBhbGwgc3RhdGVzIHRvIE1NT1BfT0ZGTElORSwgc28gd2hlbiB3ZSBhYm9ydCBwcm9jZXNzaW5nIGluXFxuLVxcdCAqIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jaygpLCB3ZSdsbCBza2lwIGFsbCB1bnByb2Nlc3NlZCBibG9ja3MgaW5cXG4tXFx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxcbi1cXHQgKi9cXG4tXFx0bWVtc2V0KG9ubGluZV90eXBlcywgTU1PUF9PRkZMSU5FLCBtYl9jb3VudCk7XFxuK1xcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpO1xcbiBcXG4gXFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4rXFx0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cXG4gXFx0dG1wID0gb25saW5lX3R5cGVzO1xcbi1cXHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhzdGFydCwgc2l6ZSwgXFx1MDAyNnRtcCwgdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuK1xcdFxcdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCwgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dG1wLCB0cnlfb2ZmbGluZV9tZW1vcnlfYmxvY2spO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJbiBjYXNlIHdlIHN1Y2NlZWRlZCB0byBvZmZsaW5lIGFsbCBtZW1vcnksIHJlbW92ZSBpdC5cXG4tXFx0ICogVGhpcyBjYW5ub3QgZmFpbCBhcyBpdCBjYW5ub3QgZ2V0IG9ubGluZWQgaW4gdGhlIG1lYW50aW1lLlxcbitcXHQgKiBQaGFzZSAyOiBSZW1vdmUgZWFjaCByYW5nZS4gVGhpcyBlc3NlbnRpYWxseSBjYW5ub3QgZmFpbCBhcyB3ZSBob2xkXFxuK1xcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cXG4gXFx0ICovXFxuIFxcdGlmICghcmMpIHtcXG4tXFx0XFx0cmMgPSB0cnlfcmVtb3ZlX21lbW9yeShzdGFydCwgc2l6ZSk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIiwgX19mdW5jX18sIHJjKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHJjID0gdHJ5X3JlbW92ZV9tZW1vcnkocmFuZ2VzW2ldLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcmFuZ2VfbGVuKFxcdTAwMjZyYW5nZXNbaV0pKTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyYykpIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogRmFpbGVkIHRvIHJlbW92ZSBtZW1vcnk6ICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fZnVuY19fLCByYyk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogUm9sbGJhY2sgd2hhdCB3ZSBkaWQuIFdoaWxlIG1lbW9yeSBvbmxpbmluZyBtaWdodCB0aGVvcmV0aWNhbGx5IGZhaWxcXG4tXFx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cXG4tXFx0ICovXFxuK1xcdC8qIE9uIGZhaWw6IHJvbGwgYmFjay4gQmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IG9mZmxpbmUgYXJlIHNraXBwZWQgKi9cXG4gXFx0aWYgKHJjKSB7XFxuIFxcdFxcdHRtcCA9IG9ubGluZV90eXBlcztcXG4tXFx0XFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcXHUwMDI2dG1wLFxcbi1cXHRcXHRcXHRcXHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKVxcbitcXHRcXHRcXHR3YWxrX21lbW9yeV9ibG9ja3MocmFuZ2VzW2ldLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICByYW5nZV9sZW4oXFx1MDAyNnJhbmdlc1tpXSksIFxcdTAwMjZ0bXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2spO1xcbiBcXHR9XFxuIFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiBcXG4gXFx0a2ZyZWUob25saW5lX3R5cGVzKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xcbitFWFBPUlRfU1lNQk9MX0dQTChvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyk7XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuaW5kZXggNmU1OWI4ZjYzZTQxNjMuLjhjMmI0Zjk3NjE5Y2VjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5AQCAtMTQsNiArMTQsNyBAQCBUQVJHRVRTICs9IGNvcmVcXG4gVEFSR0VUUyArPSBjcHVmcmVxXFxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcXG4gVEFSR0VUUyArPSBkYW1vblxcbitUQVJHRVRTICs9IGRheFxcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xcbiBUQVJHRVRTICs9IGRldmljZXMvcHJvYmVcXG4gVEFSR0VUUyArPSBkbWFidWYtaGVhcHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVhNGYzZDczYTViYWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXFxuQEAgLTAsMCArMSw2IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rYWxsOlxcbitcXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXFxuK1xcbitpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjOWFhZWI2Y2ViNDFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWdcXG5AQCAtMCwwICsxLDQgQEBcXG4rQ09ORklHX0RFVl9EQVg9bVxcbitDT05GSUdfREVWX0RBWF9LTUVNPW1cXG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvZGF4LWttZW0taG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcXG5AQCAtMCwwICsxLDIwNyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBFeGVyY2lzZSB0aGUgZGF4L2ttZW0gXFxcInN0YXRlXFxcIiBzeXNmcyBhdHRyaWJ1dGU6XFxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cXHUwMDNlICB1bnBsdWdnZWQgfCBvbmxpbmUgfCBvbmxpbmVfbW92YWJsZVxcbisjXFxuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxcbisjIElmIG5vIHN1aXRhYmxlIGRldmljZSBpcyBmb3VuZCB0aGUgdGVzdHMgU0tJUC5cXG4rI1xcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxcbisjICAgbWVtbWFwPTJHITRHXFxuKyNcXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcXG4rI1xcbisjICAgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtbSBkZXZkYXggLWUgbmFtZXNwYWNlMC4wIC1mXFxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cXG4rIyAgIC4vZGF4LWttZW0taG90cGx1Zy5zaFxcbitcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXFxuK0RJUj1cXFwiJChkaXJuYW1lIFxcXCIkKHJlYWRsaW5rIC1mIFxcXCIkMFxcXCIpXFxcIilcXFwiXFxuKy4gXFxcIiRESVJcXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK0RBWF9CQVNFPS9zeXMvYnVzL2RheC9kZXZpY2VzXFxuK1xcbittZW10b3RhbF9rYigpIHsgYXdrICcvXk1lbVRvdGFsOi8ge3ByaW50ICQyfScgL3Byb2MvbWVtaW5mbzsgfVxcbitnZXRfc3RhdGUoKSB7IGNhdCBcXFwiJEhQXFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgfVxcbisjIHNldF9zdGF0ZSBTVEFURSAtLSB3cml0ZSBhIHN0YXRlIHRvIHRoZSBzdGF0ZSBhdHRyaWJ1dGU7IHJldHVybnMgdGhlXFxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXFxuK3NldF9zdGF0ZSgpIHsgZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiRIUFxcXCIgMlxcdTAwM2UvZGV2L251bGw7IH1cXG4rXFxuK2ZpbmRfa21lbV9kYXgoKSB7XFxuK1xcdGxvY2FsIGQgZHJ2XFxuK1xcdGZvciBkIGluIFxcXCIkREFYX0JBU0VcXFwiL2RheCo7IGRvXFxuK1xcdFxcdFsgLWUgXFxcIiRkL3N0YXRlXFxcIiBdIHx8IGNvbnRpbnVlXFxuK1xcdFxcdGRydj0kKHJlYWRsaW5rIFxcXCIkZC9kcml2ZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRcXHRbIFxcXCIkKGJhc2VuYW1lIFxcXCIke2RydjotfVxcXCIpXFxcIiA9IGttZW0gXSB8fCBjb250aW51ZVxcbitcXHRcXHRiYXNlbmFtZSBcXFwiJGRcXFwiXFxuK1xcdFxcdHJldHVybiAwXFxuK1xcdGRvbmVcXG4rXFx0cmV0dXJuIDFcXG4rfVxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4rXFxuK2lmIFsgXFxcIiRVSURcXFwiICE9IDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4rREFYPSQoZmluZF9rbWVtX2RheClcXG4raWYgWyAteiBcXFwiJERBWFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJubyBrbWVtLWJvdW5kIGRheCBkZXZpY2Ugd2l0aCBhIHN0YXRlIGF0dHJpYnV0ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rSFA9JERBWF9CQVNFLyREQVgvc3RhdGVcXG4rT1JJRz0kKGdldF9zdGF0ZSlcXG4rXFxuKyMgQSBmYWlsdXJlIHRvIHJlYWNoIHRoZSBiYXNlbGluZSBpcyBlbnZpcm9ubWVudGFsIChtZW1vcnkgaW4gdXNlKSwgbm90IGFuXFxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gfHwgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiAhPSB1bnBsdWdnZWQgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkREFYOiBjYW5ub3QgcmVhY2ggJ3VucGx1Z2dlZCcgYmFzZWxpbmUgKG1lbW9yeSBpbiB1c2U/KVxcXCJcXG4rXFx0WyAtbiBcXFwiJE9SSUdcXFwiIF0gXFx1MDAyNlxcdTAwMjYgc2V0X3N0YXRlIFxcXCIkT1JJR1xcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rZmlcXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXFxuK1xcbitEUlY9L3N5cy9idXMvZGF4L2RyaXZlcnMva21lbVxcbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXFxuK1xcbitrdGFwX3ByaW50X21zZyBcXFwidXNpbmcgJERBWCAoaW5pdGlhbCBzdGF0ZSB3YXM6ICRPUklHKVxcXCJcXG4ra3RhcF9zZXRfcGxhbiAxMVxcbitcXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cXG4rbXRfb25saW5lPSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZSBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdF9vbmxpbmVcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lOiBzdGF0ZT1vbmxpbmUsIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZSBrQlxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X29ubGluZVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSBvbmxpbmU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZSBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgaWRlbXBvdGVudFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwib25saW5lIGlkZW1wb3RlbnQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcXFwiXFxuK2ZpXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK2lmIFsgXFxcIiRyY1xcXCIgIT0gMCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSBvbmxpbmUgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwicmVqZWN0IG9ubGluZV9tb3ZhYmxlIHdpdGhvdXQgaW50ZXJ2ZW5pbmcgdW5wbHVnXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJvbmxpbmUtXFx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVxcXCJcXG4rZmlcXG4rXFxuK3NldF9zdGF0ZSB1bnBsdWdnZWQ7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IHVucGx1Z2dlZCBdIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRtdFxcXCIgLWx0IFxcXCIkbXRfb25saW5lXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IE1lbVRvdGFsICRtdF9vbmxpbmUgLVxcdTAwM2UgJG10IGtCXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXFx1MDAzZSAkbXRcXFwiXFxuK2ZpXFxuK1xcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XFxuK210X21vdmFibGU9JChtZW10b3RhbF9rYilcXG4raWYgWyBcXFwiJHJjXFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lX21vdmFibGUgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfbW92YWJsZVxcXCIgLWd0IFxcXCIkbXRfdW5wbHVnZ2VkXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmVfbW92YWJsZSBhZnRlciB1bnBsdWc6IE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVxcdTAwM2UgJG10X21vdmFibGUga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9tb3ZhYmxlIGFmdGVyIHVucGx1ZzogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRfbW92YWJsZVxcXCJcXG4rZmlcXG4rXFxuKyMgVGhlIG9ubGluZSAtXFx1MDAzZSB1bnBsdWcgLVxcdTAwM2Ugb25saW5lX21vdmFibGUgLVxcdTAwM2UgdW5wbHVnIGN5Y2xlIG9uY2UgcmVncmVzc2VkOlxcbisjIGEgcmUtb25saW5lIGZhaWxlZCB0byByZS1yZXNlcnZlIHRoZSBwZXItcmFuZ2UgcmVzb3VyY2VzLCBzbyB0aGUgZmluYWwgdW5wbHVnXFxuKyMgcmVwb3J0ZWQgc3VjY2VzcyB3aGlsZSBsZWF2aW5nIHRoZSBtZW1vcnkgb25saW5lLiAgQXNzZXJ0IGl0IGlzIHJlYWxseSBmcmVlZC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cXG4rbXQ9JChtZW10b3RhbF9rYilcXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3NraXAgXFxcInVucGx1ZyBmcm9tIG1vdmFibGUgbm90IGFjY2VwdGVkIChtZW1vcnkgaW4gdXNlPykgcmM9JHJjXFxcIlxcbitlbGlmIFsgXFxcIiQoZ2V0X3N0YXRlKVxcXCIgPSB1bnBsdWdnZWQgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRcXFwiIC1sdCBcXFwiJG10X21vdmFibGVcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcInVucGx1ZyBmcm9tIG9ubGluZV9tb3ZhYmxlIHJlbW92ZWQgbWVtb3J5OiAkbXRfbW92YWJsZSAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInVucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLVxcdTAwM2UgJG10XFxcIlxcbitmaVxcbitcXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XFxuK210PSQobWVtdG90YWxfa2IpXFxuK2lmIFsgXFxcIiRyY1xcXCIgPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IG9ubGluZV9rZXJuZWwgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRcXFwiIC1ndCBcXFwiJG10X3VucGx1Z2dlZFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwib25saW5lX2tlcm5lbDogTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXFx1MDAzZSAkbXQga0JcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIm9ubGluZV9rZXJuZWw6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWw9JG10XFxcIlxcbitmaVxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK1xcbitiZWZvcmU9JChnZXRfc3RhdGUpXFxuK3NldF9zdGF0ZSBib2d1c19zdGF0ZTsgcmM9JD9cXG4raWYgWyBcXFwiJHJjXFxcIiAhPSAwIF0gXFx1MDAyNlxcdTAwMjYgWyBcXFwiJChnZXRfc3RhdGUpXFxcIiA9IFxcXCIkYmVmb3JlXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCJyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcImludmFsaWQgc3RhdGUgbm90IHJlamVjdGVkOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXFxcIlxcbitmaVxcbitcXG4rIyBSdW4gc2V2ZXJhbCBvbmxpbmUvdW5wbHVnIGN5Y2xlcyBhbmQgcmVxdWlyZSB0aGF0IGVhY2ggb25lIGFkZHMvcmVtb3ZlcyBtZW1vcnlcXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxcbitjeWNsZV9vaz0xOyBmYWlsX2k9MFxcbitmb3IgaSBpbiAxIDIgMzsgZG9cXG4rXFx0aWYgISBzZXRfc3RhdGUgb25saW5lOyB0aGVuIGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWs7IGZpXFxuK1xcdG9uPSQobWVtdG90YWxfa2IpXFxuK1xcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxcbitcXHRvZmY9JChtZW10b3RhbF9rYilcXG4rXFx0aWYgWyBcXFwiJG9uXFxcIiAtbGUgXFxcIiRtdF91bnBsdWdnZWRcXFwiIF0gfHwgWyBcXFwiJG9mZlxcXCIgLWdlIFxcXCIkb25cXFwiIF07IHRoZW5cXG4rXFx0XFx0Y3ljbGVfb2s9MDsgZmFpbF9pPSRpOyBicmVha1xcbitcXHRmaVxcbitkb25lXFxuK2lmIFsgXFxcIiRjeWNsZV9va1xcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm9ubGluZS91bnBsdWcgY3ljbGUgcmUtYWNxdWlyZXMgcmVzb3VyY2VzICgzeDogbWVtb3J5IGFkZGVkIGFuZCBmcmVlZCBlYWNoIHRpbWUpXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXFxcIlxcbitmaVxcbitcXG4rIyBjaGFuZ2Ugc3lzdGVtIGRlZmF1bHQgb25saW5lIHBvbGljeSB3aGlsZSB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIGFuZCBzaG93XFxuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXFxuK2lmIFsgLXcgXFxcIiRBT0JcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi9iaW5kXFxcIiBdOyB0aGVuXFxuK1xcdG9yaWdfYW9iPSQoY2F0IFxcXCIkQU9CXFxcIilcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGVjaG8gb2ZmbGluZSBcXHUwMDNlIFxcXCIkQU9CXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIFxcXCIkREFYXFxcIiBcXHUwMDNlIFxcXCIkRFJWL2JpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHNsZWVwIDFcXG4rXFx0c3Q9JChnZXRfc3RhdGUpXFxuK1xcdGVjaG8gXFxcIiRvcmlnX2FvYlxcXCIgXFx1MDAzZSBcXFwiJEFPQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXHRcXHQjIHJlc3RvcmUgc3lzdGVtIHBvbGljeVxcbitcXHRpZiBbIFxcXCIkc3RcXFwiID0gb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJvbmxpbmUgcG9saWN5IHJlc29sdmVkIGF0IGJpbmQ6IGF1dG9fb25saW5lX2Jsb2Nrcz1vZmZsaW5lIC1cXHUwMDNlIHN0YXRlPW9mZmxpbmVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcImJpbmQtdGltZSBwb2xpY3kgbm90IGhvbm9yZWQ6IHN0YXRlPSRzdCAoZXhwZWN0ZWQgb2ZmbGluZSlcXFwiXFxuK1xcdGZpXFxuK1xcdHNldF9zdGF0ZSB1bnBsdWdnZWQgMlxcdTAwM2UvZGV2L251bGxcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiYXV0b19vbmxpbmVfYmxvY2tzIG9yIGRyaXZlciBiaW5kL3VuYmluZCBub3Qgd3JpdGFibGVcXFwiXFxuK2ZpXFxuK1xcbitbIC1uIFxcXCIkT1JJR1xcXCIgXSBcXHUwMDI2XFx1MDAyNiBzZXRfc3RhdGUgXFxcIiRPUklHXFxcIlxcbitcXG4rIyBERVNUUlVDVElWRTogdW5iaW5kaW5nIHRoZSBkcml2ZXIgd2hpbGUgbWVtb3J5IGlzIG9ubGluZSBjYXVzZXMgdGhlIHJlc291cmNlc1xcbisjIHRvIGxlYWsgLSBidXQgdGhlIHVuYmluZCBzaG91bGQgbm90IGRlYWRsb2NrLiAgSW5zdGVhZCB0aGUgZHJpdmVyIGxlYWtzIGl0XFxuKyMgd2l0aCBhIHNpbmdsZSBcXFwic3VjayBvbmxpbmVcXFwiIHdhcm5pbmcuIFRoaXMgbGVhdmVzIHRoZSBtZW1vcnkgb25saW5lIGFuZCB0aGVcXG4rIyBkZXZpY2UgdW5ib3VuZCB1bnRpbCByZWJvb3QsIHNvIGl0IHJ1bnMgbGFzdC5cXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZVxcbitpZiBbIFxcXCIkKGdldF9zdGF0ZSlcXFwiID0gb25saW5lIF0gXFx1MDAyNlxcdTAwMjYgWyAtdyBcXFwiJERSVi91bmJpbmRcXFwiIF07IHRoZW5cXG4rXFx0bXRfb249JChtZW10b3RhbF9rYilcXG4rXFx0ZG1lc2cgLUMgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBcXFwiJERBWFxcXCIgXFx1MDAzZSBcXFwiJERSVi91bmJpbmRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXFxuK1xcdCMgVGhlIGxlYWtlZCBcXFwiU3lzdGVtIFJBTSAoa21lbSlcXFwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xcbitcXHQjIHRoZWlyIG5hbWVzIGRlcmVmZXJlbmNlcyByZXNfbmFtZSwgd2hpY2ggYSBidWdneSB1bmJpbmQgYWxyZWFkeSBmcmVlZC5cXG4rXFx0IyBXYWxrIC9wcm9jL2lvbWVtIHRvIHByb3Zva2UgdGhhdCB1c2UtYWZ0ZXItZnJlZSAoY2F1Z2h0IGJ5IEtBU0FOKS5cXG4rXFx0Y2F0IC9wcm9jL2lvbWVtIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c3BsYXQ9JChkbWVzZyAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcXFwiS0FTQU58QlVHOnx1c2UtYWZ0ZXItZnJlZXxnZW5lcmFsIHByb3RlY3Rpb258T29wc3xyZWZjb3VudF90XFxcIilcXG4rXFx0aWYgWyBcXFwiJHNwbGF0XFxcIiA9IDAgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkbXRfYWZ0ZXJcXFwiIC1nZSBcXFwiJG10X29uXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCJ1bmJpbmQgd2hpbGUgb25saW5lOiBtZW1vcnkgbGVmdCBvbmxpbmUsIG5vIFVBRi9vb3BzIChNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCKVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwidW5iaW5kIHdoaWxlIG9ubGluZSByZWdyZXNzZWQ6IHNwbGF0PSRzcGxhdCBNZW1Ub3RhbCAkbXRfb24gLVxcdTAwM2UgJG10X2FmdGVyIGtCXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9za2lwIFxcXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYTRkODVmNzRjZDZiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9OTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTg6NDUuOTU5OTQzMDQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NzAwNTk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiREVWX0RBWF9LTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9rbWVtX2RvX2hvdHBsdWdcIixcbiAgICBcImRheF9rbWVtX2luaXRfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9kb19ob3RyZW1vdmVcIixcbiAgICBcImRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzXCIsXG4gICAgXCJkYXhfa21lbV9wYXJzZV9zdGF0ZVwiLFxuICAgIFwiZGV2X2RheF9rbWVtX3Byb2JlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcmVtb3ZlXCIsXG4gICAgXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIixcbiAgICBcIm9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzZnMgaW50ZXJmYWNlIChgc3RhdGVgKSBmb3IgREFYIGttZW0gZGV2aWNlcyB0byBjb250cm9sIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXRlICh1bnBsdWdnZWQsIG9ubGluZSwgb25saW5lX2tlcm5lbCwgb25saW5lX21vdmFibGUpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0gdG8gc3VwcG9ydCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmUgdHlwZXMgYW5kIGF0b21pYyBob3QtcmVtb3ZhbCBvZiBtdWx0aXBsZSBtZW1vcnkgcmFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGU0MzE4YzUxNTBkMTdhMjcwZmZkODY2ODZjNWUwY2Q1Nzc1ODdlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE1OjE4OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZGF4XG5pbmRleCBiMzQyNjZiZmFlNDlhZS4uMmRjYWQxZTlkYWQwZDggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1kYXhcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWRheFxuQEAgLTE1MSwzICsxNTEsMjkgQEAgRGVzY3JpcHRpb246XG4gXHRcdG1lbW1hcF9vbl9tZW1vcnkgcGFyYW1ldGVyIGZvciBtZW1vcnlfaG90cGx1Zy4gVGhpcyBpc1xuIFx0XHR0eXBpY2FsbHkgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIC1cbiBcdFx0bWVtb3J5X2hvdHBsdWcubWVtbWFwX29uX21lbW9yeSBzZXQgdG8gJ3RydWUnIG9yICdmb3JjZScuXCJcbitcbitXaGF0Olx0XHQvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGVcbitEYXRlOlx0XHRKdW5lLCAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdHY2LjIxXG4rQ29udGFjdDpcdG52ZGltbUBsaXN0cy5saW51eC5kZXZcbitEZXNjcmlwdGlvbjpcbitcdFx0KFJXKSBDb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeSByZWdpb24uXG4rXHRcdEFwcGxpZXMgdG8gYWxsIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuXG4rXHRcdE9ubHkgYXBwbGllcyB0byBkYXhfa21lbSBkZXZpY2VzLlxuK1xuK1x0XHRSZWFkaW5nIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGU7IHRoZSB3cml0YWJsZSBzdGF0ZXMgbWlycm9yXG4rXHRcdHRoZSBwZXItYmxvY2sgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZSBBQkk6OlxuK1xuK1x0XHQgIFwidW5wbHVnZ2VkXCI6IG1lbW9yeSBibG9ja3MgYXJlIG5vdCBwcmVzZW50XG4rXHRcdCAgXCJvbmxpbmVcIjogbWVtb3J5IGlzIG9ubGluZSwgem9uZSBjaG9zZW4gYnkgdGhlIGtlcm5lbFxuK1x0XHQgIFwib25saW5lX2tlcm5lbFwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTk9STUFMXG4rXHRcdCAgXCJvbmxpbmVfbW92YWJsZVwiOiBtZW1vcnkgaXMgb25saW5lIGluIFpPTkVfTU9WQUJMRVxuK1xuK1x0XHRcIm9mZmxpbmVcIiAobWVtb3J5IGJsb2NrcyBhcmUgcHJlc2VudCBidXQgb2ZmbGluZSkgbWF5IGFsc28gYmVcbitcdFx0cmVwb3J0ZWQgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHdoaWxlIHRoZVxuK1x0XHRhdXRvX29ubGluZV9ibG9ja3MgcG9saWN5IGlzIFwib2ZmbGluZVwiLiAgSXQgY2Fubm90IGJlIHdyaXR0ZW4sXG4rXHRcdGFzIGl0J3Mgbm90IHVzZWZ1bCBhbmQgY3JlYXRlcyBkZXZpY2UgZGVzdHJ1Y3Rpb24gcmFjZXMuXG4rXG4rXHRcdEEgZGV2aWNlIGNhbiBvbmx5IGJlIG9ubGluZWQgZnJvbSB0aGUgXCJ1bnBsdWdnZWRcIiBzdGF0ZSwgc28gYVxuK1x0XHRkZXZpY2UgbXVzdCBiZSByZXR1cm5lZCB0byBcInVucGx1Z2dlZFwiIGJlZm9yZSBpdCBjYW4gYmUgb25saW5lZFxuK1x0XHRpbnRvIGEgZGlmZmVyZW50IHN0YXRlLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYjMxODM0NDQyNmZhYmMuLjNhMmY2OWQzYWY3YjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbkBAIC00Niw2ICs0NiwxNSBAQCBpbnQgbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0cilcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfZnJvbV9zdHIpO1xuK1xuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKVxuK3tcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgMCB8fCBvbmxpbmVfdHlwZSBcdTAwM2U9IChpbnQpQVJSQVlfU0laRShvbmxpbmVfdHlwZV90b19zdHIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBvbmxpbmVfdHlwZV90b19zdHJbb25saW5lX3R5cGVdO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfb25saW5lX3R5cGVfdG9fc3RyKTtcbiBcbiAjZGVmaW5lIHRvX21lbW9yeV9ibG9jayhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZW1vcnlfYmxvY2ssIGRldilcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9idXMuYyBiL2RyaXZlcnMvZGF4L2J1cy5jXG5pbmRleCA0OTI1NzNiNDdmNjYyNC4uNGEwM2IzMjNiMDAzN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9idXMuY1xuKysrIGIvZHJpdmVycy9kYXgvYnVzLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuQEAgLTM5NCw2ICszOTUsNyBAQCBzdGF0aWMgc3NpemVfdCBjcmVhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQuc2l6ZSA9IDAsXG4gXHRcdFx0LmlkID0gLTEsXG4gXHRcdFx0Lm1lbW1hcF9vbl9tZW1vcnkgPSBmYWxzZSxcbitcdFx0XHQub25saW5lX3R5cGUgPSBEQVhfT05MSU5FX0RFRkFVTFQsXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4ID0gX19kZXZtX2NyZWF0ZV9kZXZfZGF4KFx1MDAyNmRhdGEpO1xuIFxuQEAgLTE1MjcsNiArMTUyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpXG4gXHRpZGFfaW5pdChcdTAwMjZkZXZfZGF4LVx1MDAzZWlkYSk7XG4gXG4gXHRkZXZfZGF4LVx1MDAzZW1lbW1hcF9vbl9tZW1vcnkgPSBkYXRhLVx1MDAzZW1lbW1hcF9vbl9tZW1vcnk7XG4rXHRkZXZfZGF4LVx1MDAzZW9ubGluZV90eXBlID0gZGF0YS1cdTAwM2VvbmxpbmVfdHlwZTtcbiBcbiBcdGlub2RlID0gZGF4X2lub2RlKGRheF9kZXYpO1xuIFx0ZGV2LVx1MDAzZWRldnQgPSBpbm9kZS1cdTAwM2VpX3JkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvYnVzLmggYi9kcml2ZXJzL2RheC9idXMuaFxuaW5kZXggNTkwOTE3MWE0NDI4YjcuLmYzYzlkYWU1ZGU2YmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvYnVzLmhcbisrKyBiL2RyaXZlcnMvZGF4L2J1cy5oXG5AQCAtMyw2ICszLDcgQEBcbiAjaWZuZGVmIF9fREFYX0JVU19IX19cbiAjZGVmaW5lIF9fREFYX0JVU19IX19cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuQEAgLTE2LDYgKzE3LDEzIEBAIHN0cnVjdCBkYXhfcmVnaW9uO1xuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfU1RBVElDIEJJVCgwKVxuICNkZWZpbmUgSU9SRVNPVVJDRV9EQVhfS01FTSBCSVQoMSlcbiBcbisvKlxuKyAqIG9ubGluZV90eXBlIHNlbnRpbmVsOiB0aGUgZGV2aWNlIHdhcyBjcmVhdGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgb25saW5lXG4rICogcG9saWN5LCBzbyB0aGUgc3lzdGVtIGRlZmF1bHQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUga21lbSBkcml2ZXIgYmluZHMsXG4rICogKG5vdCBhdCBkZXZpY2UtY3JlYXRpb24gdGltZSwgd2hpY2ggd291bGQgZnJlZXplIGEgc3RhbGUgcG9saWN5KS5cbisgKi9cbisjZGVmaW5lIERBWF9PTkxJTkVfREVGQVVMVFx0KC0xKVxuK1xuIHN0cnVjdCBkYXhfcmVnaW9uICphbGxvY19kYXhfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IHJlZ2lvbl9pZCxcbiBcdFx0c3RydWN0IHJhbmdlICpyYW5nZSwgaW50IHRhcmdldF9ub2RlLCB1bnNpZ25lZCBpbnQgYWxpZ24sXG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuQEAgLTI2LDYgKzM0LDcgQEAgc3RydWN0IGRldl9kYXhfZGF0YSB7XG4gXHRyZXNvdXJjZV9zaXplX3Qgc2l6ZTtcbiBcdGludCBpZDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcbiB9O1xuIFxuIHN0cnVjdCBkZXZfZGF4ICpkZXZtX2NyZWF0ZV9kZXZfZGF4KHN0cnVjdCBkZXZfZGF4X2RhdGEgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2N4bC5jIGIvZHJpdmVycy9kYXgvY3hsLmNcbmluZGV4IDNhYjM5Yjc3ODQzZDVlLi4xYTdlYzYyMTIyMTM0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2N4bC5jXG4rKysgYi9kcml2ZXJzL2RheC9jeGwuY1xuQEAgLTI3LDYgKzI3LDcgQEAgc3RhdGljIGludCBjeGxfZGF4X3JlZ2lvbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5pZCA9IC0xLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZjeGxyX2RheC1cdTAwM2VocGFfcmFuZ2UpLFxuIFx0XHQubWVtbWFwX29uX21lbW9yeSA9IHRydWUsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmggYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5pbmRleCA4MWU0YWY0OWUzOWMxMC4uY2NkNzc5NjVmZTNlZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG4rKysgYi9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5X2hvdHBsdWcuaFx1MDAzZVxuIFxuIC8qIHByaXZhdGUgcm91dGluZXMgYmV0d2VlbiBjb3JlIGZpbGVzICovXG4gc3RydWN0IGRheF9kZXZpY2U7XG5AQCAtNzksNiArODAsOCBAQCBzdHJ1Y3QgZGV2X2RheF9yYW5nZSB7XG4gICogQGRldjogZGV2aWNlIGNvcmVcbiAgKiBAcGdtYXA6IHBnbWFwIGZvciBtZW1tYXAgc2V0dXAgLyBsaWZldGltZSAoZHJpdmVyIG93bmVkKVxuICAqIEBtZW1tYXBfb25fbWVtb3J5OiBhbGxvdyBrbWVtIHRvIHB1dCB0aGUgbWVtbWFwIGluIHRoZSBtZW1vcnlcbisgKiBAb25saW5lX3R5cGU6IE1NT1BfKiBvbmxpbmUgdHlwZSBmb3IgbWVtb3J5IGhvdHBsdWcsIG9yIERBWF9PTkxJTkVfREVGQVVMVFxuKyAqXHRcdCB0byByZXNvbHZlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgd2hlbiBrbWVtIGJpbmRzXG4gICogQG5yX3JhbmdlOiBzaXplIG9mIEByYW5nZXNcbiAgKiBAcmFuZ2VzOiByYW5nZSB0dXBsZXMgb2YgbWVtb3J5IHVzZWRcbiAgKi9cbkBAIC05NSw2ICs5OCw3IEBAIHN0cnVjdCBkZXZfZGF4IHtcbiBcdHN0cnVjdCBkZXZpY2UgZGV2O1xuIFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiBcdGJvb2wgbWVtbWFwX29uX21lbW9yeTtcbitcdGVudW0gbW1vcCBvbmxpbmVfdHlwZTtcbiBcdGludCBucl9yYW5nZTtcbiBcdHN0cnVjdCBkZXZfZGF4X3JhbmdlICpyYW5nZXM7XG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9obWVtL2htZW0uYyBiL2RyaXZlcnMvZGF4L2htZW0vaG1lbS5jXG5pbmRleCBhZjIxZjY2YmY4NzJjNi4uMmRlM2JjOTI1MTcyOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RheC9obWVtL2htZW0uY1xuKysrIGIvZHJpdmVycy9kYXgvaG1lbS9obWVtLmNcbkBAIC0zNyw2ICszNyw3IEBAIHN0YXRpYyBpbnQgZGF4X2htZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0LmlkID0gLTEsXG4gXHRcdC5zaXplID0gcmVnaW9uX2lkbGUgPyAwIDogcmFuZ2VfbGVuKFx1MDAyNm1yaS1cdTAwM2VyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRldm1fY3JlYXRlX2Rldl9kYXgoXHUwMDI2ZGF0YSkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L2ttZW0uYyBiL2RyaXZlcnMvZGF4L2ttZW0uY1xuaW5kZXggYTE4ZTJiOTY4ZTRkYWUuLjM0MDQ4NjU4NmQ4MmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgva21lbS5jXG4rKysgYi9kcml2ZXJzL2RheC9rbWVtLmNcbkBAIC0zMyw5ICszMyw3IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXG4gXHRzdHJ1Y3QgZGV2X2RheF9yYW5nZSAqZGF4X3JhbmdlID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VyYW5nZXNbaV07XG4gXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXHUwMDI2ZGF4X3JhbmdlLVx1MDAzZXJhbmdlO1xuIFxuLVx0LyogbWVtb3J5LWJsb2NrIGFsaWduIHRoZSBob3RwbHVnIHJhbmdlICovXG4tXHRyLVx1MDAzZXN0YXJ0ID0gQUxJR04ocmFuZ2UtXHUwMDNlc3RhcnQsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpO1xuLVx0ci1cdTAwM2VlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWVuZCArIDEsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIC0gMTtcbitcdCpyID0gbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UocmFuZ2UpO1xuIFx0aWYgKHItXHUwMDNlc3RhcnQgXHUwMDNlPSByLVx1MDAzZWVuZCkge1xuIFx0XHRyLVx1MDAzZXN0YXJ0ID0gcmFuZ2UtXHUwMDNlc3RhcnQ7XG4gXHRcdHItXHUwMDNlZW5kID0gcmFuZ2UtXHUwMDNlZW5kO1xuQEAgLTQ0LDkgKzQyLDE1IEBAIHN0YXRpYyBpbnQgZGF4X2ttZW1fcmFuZ2Uoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIGludCBpLCBzdHJ1Y3QgcmFuZ2UgKnIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2RlZmluZSBEQVhfS01FTV9VTlBMVUdHRURcdCgtMSlcbitcbiBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSB7XG4gXHRjb25zdCBjaGFyICpyZXNfbmFtZTtcbiBcdGludCBtZ2lkO1xuK1x0aW50IG51bWFfbm9kZTtcbitcdHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4O1xuK1x0aW50IHN0YXRlO1xuK1x0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIGhvdHBsdWcgc3RhdGUgdHJhbnNpdGlvbnMgKi9cbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzW107XG4gfTtcbiBcbkBAIC02NSwxNSArNjksMzIzIEBAIHN0YXRpYyB2b2lkIGttZW1fcHV0X21lbW9yeV90eXBlcyh2b2lkKVxuIFx0bXRfcHV0X21lbW9yeV90eXBlcyhcdTAwMjZrbWVtX21lbW9yeV90eXBlcyk7XG4gfVxuIFxuKy8qIFRydWUgZm9yIHRoZSBvbmxpbmUgc3RhdGVzIGEga21lbSBkYXggZGV2aWNlIGNhbiBob2xkLiAqL1xuK3N0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXG4re1xuK1x0cmV0dXJuIHN0YXRlID09IE1NT1BfT05MSU5FIHx8XG4rXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfS0VSTkVMIHx8XG4rXHQgICAgICAgc3RhdGUgPT0gTU1PUF9PTkxJTkVfTU9WQUJMRTtcbit9XG4rXG4rLyoqXG4rICogZGF4X2ttZW1fZG9faG90cGx1ZyAtIGhvdHBsdWcgbWVtb3J5IGZvciBkYXgga21lbSBkZXZpY2VcbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKiBAb25saW5lX3R5cGU6IHRoZSBvbmxpbmUgcG9saWN5IHRvIHVzZSBmb3IgdGhlIG1lbW9yeSBibG9ja3NcbisgKlxuKyAqIEhvdHBsdWdzIGFsbCByYW5nZXMgaW4gdGhlIGRldl9kYXggcmVnaW9uIGFzIHN5c3RlbSBtZW1vcnkgd2l0aCB0aGVcbisgKiBwcm92aWRlZCBvbmxpbmUgcG9saWN5IChvZmZsaW5lLCBvbmxpbmUsIG9ubGluZV9tb3ZhYmxlLCBvbmxpbmVfa2VybmVsKS5cbisgKlxuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgbWFwcGVkIHJhbmdlcywgb3IgbmVnYXRpdmUgZXJyb3IuXG4rICovXG4rc3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSxcbitcdFx0XHQgICAgICAgaW50IG9ubGluZV90eXBlKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1x0aW50IGksIHJjLCBhZGRlZCA9IDA7XG4rXHRtaHBfdCBtaHBfZmxhZ3M7XG4rXG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChvbmxpbmVfdHlwZSBcdTAwM2MgTU1PUF9PRkZMSU5FIHx8IG9ubGluZV90eXBlIFx1MDAzZSBNTU9QX09OTElORV9NT1ZBQkxFKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4rXG4rXHRcdHJjID0gZGF4X2ttZW1fcmFuZ2UoZGV2X2RheCwgaSwgXHUwMDI2cmFuZ2UpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG1ocF9mbGFncyA9IE1IUF9OSURfSVNfTUdJRDtcbitcdFx0aWYgKGRldl9kYXgtXHUwMDNlbWVtbWFwX29uX21lbW9yeSlcbitcdFx0XHRtaHBfZmxhZ3MgfD0gTUhQX01FTU1BUF9PTl9NRU1PUlk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEVuc3VyZSB0aGF0IGZ1dHVyZSBrZXhlYydkIGtlcm5lbHMgd2lsbCBub3QgdHJlYXRcbitcdFx0ICogdGhpcyBhcyBSQU0gYXV0b21hdGljYWxseS5cbitcdFx0ICovXG4rXHRcdHJjID0gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4rXHRcdFx0XHRyYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcbitcdFx0XHRcdG9ubGluZV90eXBlKTtcbitcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggbWVtb3J5IGFkZCBmYWlsZWRcXG5cIixcbitcdFx0XHRcdCBpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlbGVhc2UgdGhlIHJlc2VydmF0aW9uIGZvciB0aGUgcmFuZ2UgdGhhdCBmYWlsZWQgdG9cbitcdFx0XHQgKiBhZGQgc28gYSBsYXRlciBob3RyZW1vdmUgZG9lcyBub3QgdHJ5IHRvIHJlbW92ZSBtZW1vcnlcbitcdFx0XHQgKiB0aGF0IHdhcyBuZXZlciBhZGRlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZGF0YS1cdTAwM2VyZXNbaV0pIHtcbitcdFx0XHRcdHJlbW92ZV9yZXNvdXJjZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdFx0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChhZGRlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHRhZGRlZCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGFkZGVkO1xuK31cbitcbisvKipcbisgKiBkYXhfa21lbV9pbml0X3Jlc291cmNlcyAtIGNyZWF0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgZGF4IGttZW1cbisgKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcbisgKiBAZGF0YTogdGhlIGRheF9rbWVtX2RhdGEgc3RydWN0dXJlIHdpdGggcmVzb3VyY2UgdHJhY2tpbmdcbisgKlxuKyAqIEluaXRpYWxpemVzIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgREFYXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IG1hcHBlZCByYW5nZXMsIG9yIG5lZ2F0aXZlIGVycm9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbitcdGludCBpLCByYywgbWFwcGVkID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbitcdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuK1xuK1x0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTa2lwIHJhbmdlcyBhbHJlYWR5IGFkZGVkICovXG4rXHRcdGlmIChkYXRhLVx1MDAzZXJlc1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogUmVnaW9uIGlzIHBlcm1hbmVudGx5IHJlc2VydmVkIGlmIGhvdHJlbW92ZSBmYWlscy4gKi9cbitcdFx0cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLFxuK1x0XHRcdFx0XHQgZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4rXHRcdGlmICghcmVzKSB7XG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY291bGQgbm90IHJlc2VydmUgcmVnaW9uXFxuXCIsXG4rXHRcdFx0XHQgaSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBPbmNlIHNvbWUgbWVtb3J5IGhhcyBiZWVuIG9ubGluZWQgd2UgY2FuJ3RcbitcdFx0XHQgKiBhc3N1bWUgdGhhdCBpdCBjYW4gYmUgdW4tb25saW5lZCBzYWZlbHkuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKG1hcHBlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbitcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4rXHRcdC8qXG4rXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG4rXHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuK1x0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuK1x0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4rXHRcdG1hcHBlZCsrO1xuK1x0fVxuK1x0cmV0dXJuIG1hcHBlZDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4rLyoqXG4rICogZGF4X2ttZW1fZG9faG90cmVtb3ZlIC0gaG90LXJlbW92ZSBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuKyAqXG4rICogT2ZmbGluZXMgYW5kIHJlbW92ZXMgZXZlcnkgY3VycmVudGx5LWFkZGVkIHJhbmdlIGluIHRoZSBkZXZfZGF4IHJlZ2lvblxuKyAqIGF0b21pY2FsbHk6IGVpdGhlciBhbGwgcmFuZ2VzIGFyZSBvZmZsaW5lZCBhbmQgcmVtb3ZlZCwgb3Igbm9uZSBhcmUgYW5kXG4rICogdGhlIGRldmljZSBpcyByZXR1cm5lZCB0byBpdHMgcHJpb3Igc3RhdGUuXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmRldl9kYXgtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJhbmdlICpyYW5nZXM7XG4rXHRpbnQgaSwgbnJfcmFuZ2VzID0gMCwgcmM7XG4rXG4rXHRyYW5nZXMgPSBrbWFsbG9jX2FycmF5KGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UsIHNpemVvZigqcmFuZ2VzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhbmdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDb2xsZWN0IHRoZSByYW5nZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IGFkZGVkIGR1cmluZyBwcm9iZS4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcmFuZ2UgcmFuZ2U7XG4rXG4rXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChkYXhfa21lbV9yYW5nZShkZXZfZGF4LCBpLCBcdTAwMjZyYW5nZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJhbmdlc1tucl9yYW5nZXMrK10gPSByYW5nZTtcbitcdH1cbitcbitcdC8qIE5vdGhpbmcgYWRkZWQgbWVhbnMgbm90aGluZyB0byByZW1vdmUuICovXG4rXHRpZiAoIW5yX3Jhbmdlcykge1xuK1x0XHRrZnJlZShyYW5nZXMpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJjID0gb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMocmFuZ2VzLCBucl9yYW5nZXMpO1xuK1x0a2ZyZWUocmFuZ2VzKTtcbitcdGlmIChyYykge1xuK1x0XHRhbnlfaG90cmVtb3ZlX2ZhaWxlZCA9IHRydWU7XG4rXHRcdGRldl9lcnIoZGV2LCBcImhvdHJlbW92ZSBmYWlsZWQsIGRldmljZSBsZWZ0IG9ubGluZTogJWRcXG5cIiwgcmMpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHQvKiBBbGwgcmFuZ2VzIHJlbW92ZWQ7IHJlbGVhc2UgdGhlIHJlc2VydmVkIHJlc291cmNlcy4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxuK1x0XHRcdFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxuK3tcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuK1xuKy8qKlxuKyAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xuKyAqIEBkZXZfZGF4OiB0aGUgZGV2X2RheCBpbnN0YW5jZVxuKyAqIEBkYXRhOiB0aGUgZGF4X2ttZW1fZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZXNvdXJjZSB0cmFja2luZ1xuKyAqXG4rICogUmVtb3ZlcyBhbGwgcmVzb3VyY2VzIGluIHRoZSBkZXZfZGF4IHJlZ2lvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgZGV2aWNlIHVuYmluZCBvY2N1cnMgYmVmb3JlIG1lbW9yeSBpcyBob3RyZW1vdmVkLCB3ZSBjYW4gbmV2ZXJcbitcdCAqIHJlbW92ZSB0aGUgbWVtb3J5IChyZXF1aXJlcyByZWJvb3QpLiAgQXR0ZW1wdGluZyBhbiBvZmZsaW5lIG9wZXJhdGlvblxuK1x0ICogaGVyZSBtYXkgY2F1c2UgZGVhZGxvY2sgYW5kIGEgZmFpbHVyZSB0byBmaW5pc2ggdGhlIHVuYmluZC5cbitcdCAqXG4rXHQgKiBOb3RlOiBUaGlzIGxlYWtzIHRoZSByZXNvdXJjZXMuXG4rXHQgKi9cbitcdGlmIChXQVJOKCgoZGF0YS1cdTAwM2VzdGF0ZSAhPSBEQVhfS01FTV9VTlBMVUdHRUQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgIChkYXRhLVx1MDAzZXN0YXRlICE9IE1NT1BfT0ZGTElORSkpLFxuK1x0XHQgXCJIb3RwbHVnIG1lbW9yeSByZWdpb25zIHN0dWNrIG9ubGluZSB1bnRpbCByZWJvb3RcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuK1x0XHRpZiAoIWRhdGEtXHUwMDNlcmVzW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuK1x0XHRrZnJlZShkYXRhLVx1MDAzZXJlc1tpXSk7XG4rXHRcdGRhdGEtXHUwMDNlcmVzW2ldID0gTlVMTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXG4re1xuK1x0aW50IG9ubGluZV90eXBlO1xuK1xuK1x0LyogXCJ1bnBsdWdnZWRcIiBpcyBrbWVtLXNwZWNpZmljIC0gdGhlIHJlc3QgbWFwIHRvIE1NT1BfICovXG4rXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBcInVucGx1Z2dlZFwiKSlcbitcdFx0cmV0dXJuIERBWF9LTUVNX1VOUExVR0dFRDtcbitcbitcdG9ubGluZV90eXBlID0gbWhwX29ubGluZV90eXBlX2Zyb21fc3RyKGJ1Zik7XG4rXHQvKiBEaXNhbGxvdyBcIm9mZmxpbmVcIjogaXQncyBub3QgdXNlZnVsIGFuZCBjcmVhdGVzIHJhY2UgY29uZGl0aW9ucyAqL1xuK1x0aWYgKG9ubGluZV90eXBlID09IE1NT1BfT0ZGTElORSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gb25saW5lX3R5cGU7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRjb25zdCBjaGFyICpzdGF0ZV9zdHI7XG4rXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRpZiAoZGF0YS1cdTAwM2VzdGF0ZSA9PSBEQVhfS01FTV9VTlBMVUdHRUQpXG4rXHRcdHN0YXRlX3N0ciA9IFwidW5wbHVnZ2VkXCI7XG4rXHRlbHNlXG4rXHRcdHN0YXRlX3N0ciA9IG1ocF9vbmxpbmVfdHlwZV90b19zdHIoZGF0YS1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXNcXG5cIiwgc3RhdGVfc3RyID86IFwidW5rbm93blwiKTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCA9IHRvX2Rldl9kYXgoZGV2KTtcbitcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRpbnQgb25saW5lX3R5cGU7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRvbmxpbmVfdHlwZSA9IGRheF9rbWVtX3BhcnNlX3N0YXRlKGJ1Zik7XG4rXHRpZiAob25saW5lX3R5cGUgXHUwMDNjIERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0cmV0dXJuIG9ubGluZV90eXBlO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmRhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBBbHJlYWR5IGluIHJlcXVlc3RlZCBzdGF0ZSAqL1xuK1x0aWYgKGRhdGEtXHUwMDNlc3RhdGUgPT0gb25saW5lX3R5cGUpXG4rXHRcdHJldHVybiBsZW47XG4rXG4rXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XG4rXHRcdHJjID0gZGF4X2ttZW1fZG9faG90cmVtb3ZlKGRldl9kYXgsIGRhdGEpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRkYXRhLVx1MDAzZXN0YXRlID0gREFYX0tNRU1fVU5QTFVHR0VEO1xuK1x0XHRyZXR1cm4gbGVuO1xuK1x0fVxuK1xuK1x0LyogT25saW5pbmcgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHVucGx1Z2dlZCBzdGF0ZS4gKi9cbitcdGlmIChkYXRhLVx1MDAzZXN0YXRlICE9IERBWF9LTUVNX1VOUExVR0dFRClcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qIFJlLWFjcXVpcmUgcmVzb3VyY2VzIGlmIHByZXZpb3VzbHkgdW5wbHVnZ2VkLCBvdGhlcndpc2Ugbm8tb3AgKi9cbitcdHJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJldHVybiByYztcbitcbitcdGRhdGEtXHUwMDNlc3RhdGUgPSBvbmxpbmVfdHlwZTtcbitcdHJldHVybiBsZW47XG4rfVxuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhzdGF0ZSk7XG4rXG4gc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2xlbiA9IDAsIG9yaWdfbGVuID0gMDtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhO1xuIFx0c3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbXR5cGU7XG4tXHRpbnQgaSwgcmMsIG1hcHBlZCA9IDA7XG4tXHRtaHBfdCBtaHBfZmxhZ3M7XG4rXHRpbnQgaSwgcmM7XG4gXHRpbnQgbnVtYV9ub2RlO1xuK1x0aW50IG9ubGluZV90eXBlO1xuIFx0aW50IGFkaXN0ID0gTUVNVElFUl9ERUZBVUxUX0RBWF9BRElTVEFOQ0U7XG4gXG4gXHQvKlxuQEAgLTEzMyw2OCArNDQ1LDM4IEBAIHN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWdfbWdpZDtcbiBcdGRhdGEtXHUwMDNlbWdpZCA9IHJjO1xuK1x0ZGF0YS1cdTAwM2VudW1hX25vZGUgPSBudW1hX25vZGU7XG4rXHRkYXRhLVx1MDAzZWRldl9kYXggPSBkZXZfZGF4O1xuK1x0ZGF0YS1cdTAwM2VzdGF0ZSA9IERBWF9LTUVNX1VOUExVR0dFRDtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGF0YS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldl9kYXgtXHUwMDNlbnJfcmFuZ2U7IGkrKykge1xuLVx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbi1cdFx0c3RydWN0IHJhbmdlIHJhbmdlO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiBSZWdpb24gaXMgcGVybWFuZW50bHkgcmVzZXJ2ZWQgaWYgaG90cmVtb3ZlIGZhaWxzLiAqL1xuLVx0XHRyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZSksIGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuLVx0XHRpZiAoIXJlcykge1xuLVx0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IGNvdWxkIG5vdCByZXNlcnZlIHJlZ2lvblxcblwiLFxuLVx0XHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIE9uY2Ugc29tZSBtZW1vcnkgaGFzIGJlZW4gb25saW5lZCB3ZSBjYW4ndFxuLVx0XHRcdCAqIGFzc3VtZSB0aGF0IGl0IGNhbiBiZSB1bi1vbmxpbmVkIHNhZmVseS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAobWFwcGVkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0cmMgPSAtRUJVU1k7XG4tXHRcdFx0Z290byBlcnJfcmVxdWVzdF9tZW07XG4tXHRcdH1cbi1cdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSByZXM7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFNldCBmbGFncyBhcHByb3ByaWF0ZSBmb3IgU3lzdGVtIFJBTS4gIExlYXZlIC4uLl9CVVNZIGNsZWFyXG4tXHRcdCAqIHNvIHRoYXQgYWRkX21lbW9yeSgpIGNhbiBhZGQgYSBjaGlsZCByZXNvdXJjZS4gIERvIG5vdFxuLVx0XHQgKiBpbmhlcml0IGZsYWdzIGZyb20gdGhlIHBhcmVudCBzaW5jZSBpdCBtYXkgc2V0IG5ldyBmbGFnc1xuLVx0XHQgKiB1bmtub3duIHRvIHVzIHRoYXQgd2lsbCBicmVhayBhZGRfbWVtb3J5KCkgYmVsb3cuXG4tXHRcdCAqL1xuLVx0XHRyZXMtXHUwMDNlZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU07XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbiBcbi1cdFx0bWhwX2ZsYWdzID0gTUhQX05JRF9JU19NR0lEO1xuLVx0XHRpZiAoZGV2X2RheC1cdTAwM2VtZW1tYXBfb25fbWVtb3J5KVxuLVx0XHRcdG1ocF9mbGFncyB8PSBNSFBfTUVNTUFQX09OX01FTU9SWTtcbitcdHJjID0gZGF4X2ttZW1faW5pdF9yZXNvdXJjZXMoZGV2X2RheCwgZGF0YSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc291cmNlcztcbiBcbi1cdFx0Lypcbi1cdFx0ICogRW5zdXJlIHRoYXQgZnV0dXJlIGtleGVjJ2Qga2VybmVscyB3aWxsIG5vdCB0cmVhdFxuLVx0XHQgKiB0aGlzIGFzIFJBTSBhdXRvbWF0aWNhbGx5LlxuLVx0XHQgKi9cbi1cdFx0cmMgPSBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGRhdGEtXHUwMDNlbWdpZCwgcmFuZ2Uuc3RhcnQsXG4tXHRcdFx0XHRyYW5nZV9sZW4oXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyk7XG4rXHQvKiBSZXNvbHZlIHN5c3RlbSBkZWZhdWx0IGF0IGJpbmQgdGltZSBpbiBjYXNlIGl0IGNoYW5nZWQgKi9cbitcdG9ubGluZV90eXBlID0gZGV2X2RheC1cdTAwM2VvbmxpbmVfdHlwZTtcbitcdGlmIChvbmxpbmVfdHlwZSA9PSBEQVhfT05MSU5FX0RFRkFVTFQpXG4rXHRcdG9ubGluZV90eXBlID0gbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCk7XG4gXG4tXHRcdGlmIChyYykge1xuLVx0XHRcdGRldl93YXJuKGRldiwgXCJtYXBwaW5nJWQ6ICUjbGx4LSUjbGx4IG1lbW9yeSBhZGQgZmFpbGVkXFxuXCIsXG4tXHRcdFx0XHRcdGksIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuLVx0XHRcdHJlbW92ZV9yZXNvdXJjZShyZXMpO1xuLVx0XHRcdGtmcmVlKHJlcyk7XG4tXHRcdFx0ZGF0YS1cdTAwM2VyZXNbaV0gPSBOVUxMO1xuLVx0XHRcdGlmIChtYXBwZWQpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRnb3RvIGVycl9yZXF1ZXN0X21lbTtcbi1cdFx0fVxuLVx0XHRtYXBwZWQrKztcbi1cdH1cbitcdC8qIEFsd2F5cyBjcmVhdGUgYmxvY2tzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBldmVuIGlmIG9mZmxpbmUgKi9cbitcdHJjID0gZGF4X2ttZW1fZG9faG90cGx1ZyhkZXZfZGF4LCBkYXRhLCBvbmxpbmVfdHlwZSk7XG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2hvdHBsdWc7XG4rXHRkYXRhLVx1MDAzZXN0YXRlID0gb25saW5lX3R5cGU7XG4gXG4tXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTtcbitcdHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgXHUwMDI2ZGV2X2F0dHJfc3RhdGUpO1xuK1x0aWYgKHJjKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiZmFpbGVkIHRvIGNyZWF0ZSBzdGF0ZSBzeXNmcyBlbnRyeVxcblwiKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuLWVycl9yZXF1ZXN0X21lbTpcbitlcnJfaG90cGx1ZzpcbitcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuK2Vycl9yZXNvdXJjZXM6XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbiBcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXHUwMDNlbWdpZCk7XG4gZXJyX3JlZ19tZ2lkOlxuIFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG5AQCAtMjA4LDYzICs0OTAsNTAgQEAgc3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4gc3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbiB7XG4tXHRpbnQgaSwgc3VjY2VzcyA9IDA7XG4gXHRpbnQgbm9kZSA9IGRldl9kYXgtXHUwMDNldGFyZ2V0X25vZGU7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZkZXZfZGF4LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXG4rXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4gXHQvKlxuLVx0ICogV2UgaGF2ZSBvbmUgc2hvdCBmb3IgcmVtb3ZpbmcgbWVtb3J5LCBpZiBzb21lIG1lbW9yeSBibG9ja3Mgd2VyZSBub3Rcbi1cdCAqIG9mZmxpbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHJlbW92ZV9tZW1vcnkoKSB3aWxsIGZhaWwsIGFuZFxuLVx0ICogdGhlcmUgaXMgbm8gd2F5IHRvIGhvdHJlbW92ZSB0aGlzIG1lbW9yeSB1bnRpbCByZWJvb3QgYmVjYXVzZSBkZXZpY2Vcbi1cdCAqIHVuYmluZCB3aWxsIHN1Y2NlZWQgZXZlbiBpZiB3ZSByZXR1cm4gZmFpbHVyZS5cbitcdCAqIE9ubGluZSBtZW1vcnkgY2Fubm90IHNhZmVseSBiZSByZW1vdmVkIChvZmZsaW5pbmcgZHVyaW5nIHVuYmluZCBjYW5cbitcdCAqIGRlYWRsb2NrIGEgdGFzayBhcyB1bmJpbmQgY2Fubm90IGJlIGludGVycnVwdGVkKS4gIFVuZm9ydHVuYXRlbHkgd2VcbitcdCAqIGhhdmUgdG8gbGVhayBhbGwgb2YgW3Jlc291cmNlcywgbWVtb3J5IGdyb3VwLCBAZGF0YSwgbWVtdHlwZV0sIHVudGlsXG4rXHQgKiB0aGUgbmV4dCByZWJvb3QgLSBhbmQgdGhlIG1lbW9yeSB3aWxsIHN0YXkgb25saW5lIHVudGlsIHRoZW4uXG4rXHQgKlxuK1x0ICogb2ZmbGluZSBibG9ja3MgYXJlIHJlbW92ZWQgb24gdW5iaW5kLCBidXQgbWF5IGxlYWsgb24gZmFpbHVyZS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2X2RheC1cdTAwM2Vucl9yYW5nZTsgaSsrKSB7XG4tXHRcdHN0cnVjdCByYW5nZSByYW5nZTtcbi1cdFx0aW50IHJjO1xuLVxuLVx0XHRyYyA9IGRheF9rbWVtX3JhbmdlKGRldl9kYXgsIGksIFx1MDAyNnJhbmdlKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByYW5nZSB3YXMgbmV2ZXIgYWRkZWQgZHVyaW5nIHByb2JlICovXG4tXHRcdGlmICghZGF0YS1cdTAwM2VyZXNbaV0pIHtcbi1cdFx0XHRzdWNjZXNzKys7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0cmMgPSByZW1vdmVfbWVtb3J5KHJhbmdlLnN0YXJ0LCByYW5nZV9sZW4oXHUwMDI2cmFuZ2UpKTtcbi1cdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRyZW1vdmVfcmVzb3VyY2UoZGF0YS1cdTAwM2VyZXNbaV0pO1xuLVx0XHRcdGtmcmVlKGRhdGEtXHUwMDNlcmVzW2ldKTtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlc1tpXSA9IE5VTEw7XG4tXHRcdFx0c3VjY2VzcysrO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4rXHRpZiAoZGF4X2ttZW1fc3RhdGVfaXNfb25saW5lKGRhdGEtXHUwMDNlc3RhdGUpKSB7XG4rXHRcdGRldl93YXJuKGRldiwgXCJIb3RwbHVnIHJlZ2lvbnMgc3R1Y2sgb25saW5lIHVudGlsIHJlYm9vdFxcblwiKTtcbiBcdFx0YW55X2hvdHJlbW92ZV9mYWlsZWQgPSB0cnVlO1xuLVx0XHRkZXZfZXJyKGRldixcbi1cdFx0XHRcIm1hcHBpbmclZDogJSNsbHgtJSNsbHggY2Fubm90IGJlIGhvdHJlbW92ZWQgdW50aWwgdGhlIG5leHQgcmVib290XFxuXCIsXG4tXHRcdFx0XHRpLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbitcdFx0cmV0dXJuO1xuK1x0fSBlbHNlIGlmIChkYXRhLVx1MDAzZXN0YXRlID09IE1NT1BfT0ZGTElORSBcdTAwMjZcdTAwMjZcbitcdCAgICBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSkpIHtcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAoc3VjY2VzcyBcdTAwM2U9IGRldl9kYXgtXHUwMDNlbnJfcmFuZ2UpIHtcbi1cdFx0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbi1cdFx0a2ZyZWUoZGF0YS1cdTAwM2VyZXNfbmFtZSk7XG4tXHRcdGtmcmVlKGRhdGEpO1xuLVx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbi1cdFx0Lypcbi1cdFx0ICogQ2xlYXIgdGhlIG1lbXR5cGUgYXNzb2NpYXRpb24gb24gc3VjY2Vzc2Z1bCB1bnBsdWcuXG4tXHRcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4tXHRcdCAqIG9mZmxpbmVkL29ubGluZWQgbGF0ZXIuIFdlIG5lZWQgdG8ga2VlcCBtZW1vcnlfZGV2X3R5cGVcbi1cdFx0ICogZm9yIHRoYXQuIFRoaXMgaW1wbGllcyB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGFyb3VuZFxuLVx0XHQgKiB0aWxsIG5leHQgcmVib290LlxuLVx0XHQgKi9cbi1cdFx0Y2xlYXJfbm9kZV9tZW1vcnlfdHlwZShub2RlLCBOVUxMKTtcbi1cdH1cbitcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xuK1x0bWVtb3J5X2dyb3VwX3VucmVnaXN0ZXIoZGF0YS1cdTAwM2VtZ2lkKTtcbitcdGtmcmVlKGRhdGEtXHUwMDNlcmVzX25hbWUpO1xuK1x0a2ZyZWUoZGF0YSk7XG4rXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTtcbitcdC8qXG4rXHQgKiBDbGVhciB0aGUgbWVtdHlwZSBhc3NvY2lhdGlvbiBvbiBzdWNjZXNzZnVsIHVucGx1Zy5cbitcdCAqIElmIG5vdCwgd2UgaGF2ZSBtZW1vcnkgYmxvY2tzIGxlZnQgd2hpY2ggY2FuIGJlXG4rXHQgKiBvZmZsaW5lZC9vbmxpbmVkIGxhdGVyLiBXZSBuZWVkIHRvIGtlZXAgbWVtb3J5X2Rldl90eXBlXG4rXHQgKiBmb3IgdGhhdC4gVGhpcyBpbXBsaWVzIHRoaXMgcmVmZXJlbmNlIHdpbGwgYmUgYXJvdW5kXG4rXHQgKiB0aWxsIG5leHQgcmVib290LlxuK1x0ICovXG4rXHRjbGVhcl9ub2RlX21lbW9yeV90eXBlKG5vZGUsIE5VTEwpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyB2b2lkIGRldl9kYXhfa21lbV9yZW1vdmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2ZGV2X2RheC1cdTAwM2VkZXY7XG4rXG4rXHRkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCBcdTAwMjZkZXZfYXR0cl9zdGF0ZSk7XG4rXG4gXHQvKlxuIFx0ICogV2l0aG91dCBob3RyZW1vdmUgcHVycG9zZWx5IGxlYWsgdGhlIHJlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciB0aGVcbiBcdCAqIGRldmljZS1kYXggcmFuZ2UgYW5kIHJldHVybiAnMCcgdG8gLVx1MDAzZXJlbW92ZSgpIGF0dGVtcHRzLiBUaGUgcmVtb3ZhbFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGF4L3BtZW0uYyBiL2RyaXZlcnMvZGF4L3BtZW0uY1xuaW5kZXggYmVlOTMwNjZhODQ5NzcuLmU3YWRhY2U2OTE5NTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvcG1lbS5jXG4rKysgYi9kcml2ZXJzL2RheC9wbWVtLmNcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGV2X2RheCAqX19kYXhfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdC5wZ21hcCA9IFx1MDAyNnBnbWFwLFxuIFx0XHQuc2l6ZSA9IHJhbmdlX2xlbihcdTAwMjZyYW5nZSksXG4gXHRcdC5tZW1tYXBfb25fbWVtb3J5ID0gZmFsc2UsXG4rXHRcdC5vbmxpbmVfdHlwZSA9IERBWF9PTkxJTkVfREVGQVVMVCxcbiBcdH07XG4gXG4gXHRyZXR1cm4gZGV2bV9jcmVhdGVfZGV2X2RheChcdTAwMjZkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuaW5kZXggNDYzZGMwMmY2Y2ZmMDUuLjlmNWVmMDMwOWY3NzM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaFxuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5nZS5oXHUwMDNlXG4gXG4gI2RlZmluZSBNSU5fTUVNT1JZX0JMT0NLX1NJWkUgICAgICgxVUwgXHUwMDNjXHUwMDNjIFNFQ1RJT05fU0laRV9CSVRTKVxuIFxuQEAgLTEwMCw2ICsxMDEsMjcgQEAgaW50IGFyY2hfZ2V0X21lbW9yeV9waHlzX2RldmljZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbik7XG4gdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcyh2b2lkKTtcbiBpbnQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcik7XG4gXG4rLyoqXG4rICogbWVtb3J5X2Jsb2NrX2FsaWduZWRfcmFuZ2UgLSBhbGlnbiBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgdG8gbWVtb3J5IGJsb2Nrc1xuKyAqIEByYW5nZTogdGhlIGlucHV0IHJhbmdlIHRvIGFsaWduXG4rICpcbisgKiBBbGlnbnMgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgYW5kIHRoZSBlbmQgYWRkcmVzcyBkb3duIHRvIG1lbW9yeSBibG9ja1xuKyAqIGJvdW5kYXJpZXMuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMgd2hpY2ggbXVzdFxuKyAqIG9wZXJhdGUgb24gbWVtb3J5LWJsb2NrIGFsaWduZWQgcmFuZ2VzLlxuKyAqXG4rICogUmV0dXJucyB0aGUgYWxpZ25lZCByYW5nZS4gQ2FsbGVycyBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmV0dXJuZWRcbisgKiByYW5nZSBpcyB2YWxpZCAoYWxpZ25lZC5zdGFydCBcdTAwM2MgYWxpZ25lZC5lbmQpIGJlZm9yZSB1c2luZyBpdC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCByYW5nZSBtZW1vcnlfYmxvY2tfYWxpZ25lZF9yYW5nZShjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCByYW5nZSBhbGlnbmVkO1xuK1xuK1x0YWxpZ25lZC5zdGFydCA9IEFMSUdOKHJhbmdlLVx1MDAzZXN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKTtcbitcdGFsaWduZWQuZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VlbmQgKyAxLCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSAtIDE7XG4rXG4rXHRyZXR1cm4gYWxpZ25lZDtcbit9XG4rXG4gc3RydWN0IG1lbW9yeV9ub3RpZnkge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaFxuaW5kZXggN2M5ZDY2NzI5YzYwOTUuLjQ2Yzc5NjU3MDY5MjZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmhcbkBAIC0xMjcsNiArMTI3LDcgQEAgZXh0ZXJuIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBleHRlcm4gdTY0IG1heF9tZW1fc2l6ZTtcbiBcbiBleHRlcm4gaW50IG1ocF9vbmxpbmVfdHlwZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpO1xuK2NvbnN0IGNoYXIgKm1ocF9vbmxpbmVfdHlwZV90b19zdHIoaW50IG9ubGluZV90eXBlKTtcbiBcbiAvKiBJZiBtb3ZhYmxlX25vZGUgYm9vdCBvcHRpb24gc3BlY2lmaWVkICovXG4gZXh0ZXJuIGJvb2wgbW92YWJsZV9ub2RlX2VuYWJsZWQ7XG5AQCAtMjY3LDYgKzI2OCw3IEBAIGV4dGVybiBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBleHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7XG4gZXh0ZXJuIHZvaWQgX19yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpO1xuIGV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcbitpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsIGludCBucl9yYW5nZXMpO1xuIFxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZCkge31cbkBAIC0yODMsNiArMjg1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKGNvbnN0IHN0cnVjdCByYW5nZSAqcmFuZ2VzLFxuK1x0XHRcdFx0XHRcdCAgIGludCBucl9yYW5nZXMpXG4re1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xuQEAgLTI5NCw2ICszMDIsOSBAQCBleHRlcm4gaW50IF9fYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLFxuIFx0XHRcdCAgICAgICBtaHBfdCBtaHBfZmxhZ3MpO1xuK2ludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0XHRcdGVudW0gbW1vcCBvbmxpbmVfdHlwZSk7XG4gZXh0ZXJuIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsXG4gXHRcdFx0XHQgICAgIG1ocF90IG1ocF9mbGFncyk7XG5AQCAtMzE2LDYgKzMyNyw4IEBAIGV4dGVybiBzdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSxcbiBleHRlcm4gaW50IGFyY2hfY3JlYXRlX2xpbmVhcl9tYXBwaW5nKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIGFyY2hfcmVtb3ZlX2xpbmVhcl9tYXBwaW5nKHU2NCBzdGFydCwgdTY0IHNpemUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSBlbnVtIG1tb3AgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKHZvaWQpIHsgcmV0dXJuIE1NT1BfT0ZGTElORTsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li43ZDU2ZTBjNmVkZTBjYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0yMzksNiArMjM5LDcgQEAgZW51bSBtbW9wIG1ocF9nZXRfZGVmYXVsdF9vbmxpbmVfdHlwZSh2b2lkKVxuIFxuIFx0cmV0dXJuIG1ocF9kZWZhdWx0X29ubGluZV90eXBlO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUpO1xuIFxuIHZvaWQgbWhwX3NldF9kZWZhdWx0X29ubGluZV90eXBlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSlcbiB7XG5AQCAtMTMzNyw3ICsxMzM4LDkgQEAgc3RhdGljIGludCBjaGVja19ob3RwbHVnX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuIFxuIHN0YXRpYyBpbnQgb25saW5lX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHZvaWQgKmFyZylcbiB7XG4tXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSBtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKTtcbitcdGVudW0gbW1vcCAqb25saW5lX3R5cGUgPSBhcmc7XG4rXG4rXHRtZW0tXHUwMDNlb25saW5lX3R5cGUgPSAqb25saW5lX3R5cGU7XG4gXHRyZXR1cm4gZGV2aWNlX29ubGluZShcdTAwMjZtZW0tXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtMTQ5MSw3ICsxNDk0LDggQEAgc3RhdGljIGludCBjcmVhdGVfYWx0bWFwc19hbmRfbWVtb3J5X2Jsb2NrcyhpbnQgbmlkLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbiAgKlxuICAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuK3N0YXRpYyBpbnQgX19hZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBtaHBfdCBtaHBfZmxhZ3MsXG4rXHRcdFx0XHQgZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCBtaHBfcGFyYW1zIHBhcmFtcyA9IHsgLnBncHJvdCA9IHBncHJvdF9taHAoUEFHRV9LRVJORUwpIH07XG4gXHRlbnVtIG1lbWJsb2NrX2ZsYWdzIG1lbWJsb2NrX2ZsYWdzID0gTUVNQkxPQ0tfTk9ORTtcbkBAIC0xNTgxLDggKzE1ODUsOSBAQCBpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuIFx0XHRtZXJnZV9zeXN0ZW1fcmFtX3Jlc291cmNlKHJlcyk7XG4gXG4gXHQvKiBvbmxpbmUgcGFnZXMgaWYgcmVxdWVzdGVkICovXG4tXHRpZiAobWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkgIT0gTU1PUF9PRkZMSU5FKVxuLVx0XHR3YWxrX21lbW9yeV9ibG9ja3Moc3RhcnQsIHNpemUsIE5VTEwsIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuK1x0aWYgKG9ubGluZV90eXBlICE9IE1NT1BfT0ZGTElORSlcbitcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZvbmxpbmVfdHlwZSxcbitcdFx0XHRcdCAgIG9ubGluZV9tZW1vcnlfYmxvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbiBlcnJvcjpcbkBAIC0xNTk4LDcgKzE2MDMsMTMgQEAgaW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIHJlcXVpcmVzIGRldmljZV9ob3RwbHVnX2xvY2ssIHNlZSBhZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbitpbnQgYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzKVxuK3tcbitcdHJldHVybiBfX2FkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyxcbitcdFx0XHRcdCAgICAgbWhwX2dldF9kZWZhdWx0X29ubGluZV90eXBlKCkpO1xuK31cbitcbisvKiByZXF1aXJlcyBkZXZpY2VfaG90cGx1Z19sb2NrLCBzZWUgX19hZGRfbWVtb3J5X3Jlc291cmNlKCkgKi9cbiBpbnQgX19hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsIG1ocF90IG1ocF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbkBAIC0xNjI2LDcgKzE2MzcsMTUgQEAgaW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcbiBcbi0vKlxuKy8qKlxuKyAqIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCAtIGFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCBleHBsaWNpdCBvbmxpbmVfdHlwZVxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbisgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbisgKiBAb25saW5lX3R5cGU6IEF1dG8tT25saW5lIGJlaGF2aW9yIChvZmZsaW5lLCBvbmxpbmUsIGtlcm5lbCwgbW92YWJsZSlcbisgKlxuICAqIEFkZCBzcGVjaWFsLCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSBhcyBzeXN0ZW0gUkFNLiBTdWNoXG4gICogbWVtb3J5IGlzIG5vdCBleHBvc2VkIHZpYSB0aGUgcmF3IGZpcm13YXJlLXByb3ZpZGVkIG1lbW1hcCBhcyBzeXN0ZW1cbiAgKiBSQU0sIGluc3RlYWQsIGl0IGlzIGRldGVjdGVkIGFuZCBhZGRlZCBieSBhIGRyaXZlciAtIGR1cmluZyBjb2xkIGJvb3QsXG5AQCAtMTYzNCw2ICsxNjUzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG4gICpcbiAgKiBSZWFzb25zIHdoeSB0aGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lbW1hcCBvZiBhXG4gICoga2V4ZWMga2VybmVsIG9yIGZvciBwbGFjaW5nIGtleGVjIGltYWdlczpcbisgKlxuICAqIC0gVGhlIGJvb3Rpbmcga2VybmVsIGlzIGluIGNoYXJnZSBvZiBkZXRlcm1pbmluZyBob3cgdGhpcyBtZW1vcnkgd2lsbCBiZVxuICAqICAgdXNlZCAoZS5nLiwgdXNlIHBlcnNpc3RlbnQgbWVtb3J5IGFzIHN5c3RlbSBSQU0pXG4gICogLSBDb29yZGluYXRpb24gd2l0aCBhIGh5cGVydmlzb3IgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgbWVtb3J5XG5AQCAtMTY0Niw5ICsxNjY2LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpO1xuICAqXG4gICogVGhlIHJlc291cmNlX25hbWUgKHZpc2libGUgdmlhIC9wcm9jL2lvbWVtKSBoYXMgdG8gaGF2ZSB0aGUgZm9ybWF0XG4gICogXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLVx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncylcbitpbnQgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4rXHRcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcbitcdFx0ZW51bSBtbW9wIG9ubGluZV90eXBlKVxuIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0aW50IHJjO1xuQEAgLTE2NTgsNiArMTY4MSw5IEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHQgICAgcmVzb3VyY2VfbmFtZVtzdHJsZW4ocmVzb3VyY2VfbmFtZSkgLSAxXSAhPSAnKScpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKG9ubGluZV90eXBlIFx1MDAzYyBNTU9QX09GRkxJTkUgfHwgb25saW5lX3R5cGUgXHUwMDNlIE1NT1BfT05MSU5FX01PVkFCTEUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuIFx0cmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lKTtcbkBAIC0xNjY2LDcgKzE2OTIsNyBAQCBpbnQgYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyYyA9IGFkZF9tZW1vcnlfcmVzb3VyY2UobmlkLCByZXMsIG1ocF9mbGFncyk7XG4rXHRyYyA9IF9fYWRkX21lbW9yeV9yZXNvdXJjZShuaWQsIHJlcywgbWhwX2ZsYWdzLCBvbmxpbmVfdHlwZSk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7XG4gXG5AQCAtMTY3NCw2ICsxNzAwLDMwIEBAIGludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcdHJldHVybiByYztcbiB9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQsIFwia21lbVwiKTtcbitcbisvKipcbisgKiBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeVxuKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcbisgKiBAc3RhcnQ6IFN0YXJ0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByYW5nZVxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBtZW1vcnkgcmFuZ2UgaW4gYnl0ZXNcbisgKiBAcmVzb3VyY2VfbmFtZTogUmVzb3VyY2UgbmFtZSBpbiBmb3JtYXQgXCJTeXN0ZW0gUkFNICgkRFJJVkVSKVwiXG4rICogQG1ocF9mbGFnczogTWVtb3J5IGhvdHBsdWcgZmxhZ3NcbisgKlxuKyAqIEFkZCBkcml2ZXItbWFuYWdlZCBtZW1vcnkgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHQgb25saW5lIHR5cGUgc2V0IGJ5XG4rICogYnVpbGQgY29uZmlnIG9yIGtlcm5lbCBib290IHBhcmFtZXRlci5cbisgKlxuKyAqIFNlZSBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQgZm9yIG1vcmUgZGV0YWlscy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChuaWQsIHN0YXJ0LCBzaXplLCByZXNvdXJjZV9uYW1lLFxuK1x0XHRcdG1ocF9mbGFncyxcbitcdFx0XHRtaHBfZ2V0X2RlZmF1bHRfb25saW5lX3R5cGUoKSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQpO1xuIFxuIC8qXG5AQCAtMjM3OSw1OCArMjQyOSw5OCBAQCBzdGF0aWMgaW50IHRyeV9yZW9ubGluZV9tZW1vcnlfYmxvY2soc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB2b2lkICphcmcpXG4gICovXG4gaW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG1iX2NvdW50ID0gc2l6ZSAvIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCk7XG4rXHRzdHJ1Y3QgcmFuZ2UgcmFuZ2UgPSB7IC5zdGFydCA9IHN0YXJ0LCAuZW5kID0gc3RhcnQgKyBzaXplIC0gMSB9O1xuK1xuK1x0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFx1MDAyNnJhbmdlLCAxKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XG4rXG4rLyoqXG4rICogb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMgLSBvZmZsaW5lIGFuZCByZW1vdmUgbXVsdGlwbGUgbWVtb3J5IHJhbmdlc1xuKyAqIEByYW5nZXM6IGFycmF5IG9mIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzIHRvIG9mZmxpbmUgYW5kIHJlbW92ZVxuKyAqIEBucl9yYW5nZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIEByYW5nZXNcbisgKlxuKyAqIE9mZmxpbmUgYW5kIHJlbW92ZSBzZXZlcmFsIG1lbW9yeSByYW5nZXMgYXMgb25lIG9wZXJhdGlvbiwgc2VyaWFsaXplZFxuKyAqIGFnYWluc3Qgb3RoZXIgaG90cGx1ZyBvcGVyYXRpb25zIGJ5IGEgc2luZ2xlIGxvY2tfZGV2aWNlX2hvdHBsdWcoKS5cbisgKlxuKyAqIFRoaXMgb2ZmbGluZXMgYWxsIHJhbmdlcyBiZWZvcmUgcmVtb3ZpbmcgYW55IG9mIHRoZW0uICBJZiBvZmZsaW5pbmcgYW55XG4rICogcmFuZ2UgZmFpbHMsIHRoZSBlbnRpcmUgcHJvY2VzcyBpcyByZXZlcnRlZCBhbmQgbm90aGluZyBpcyByZW1vdmVkLlxuKyAqIFRoaXMgcHJvdmlkZXMgYSBmdWxseSBhdG9taWMgc2VtYW50aWMgZm9yIHVucGx1Z2dpbmcgYW4gZW50aXJlIGRldmljZS5cbisgKlxuKyAqIEVhY2ggcmFuZ2UgbXVzdCBiZSBtZW1vcnktYmxvY2sgYWxpZ25lZCBpbiBzdGFydCBhbmQgc2l6ZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuICBPbiBmYWlsdXJlIG5vIHJhbmdlIGhhc1xuKyAqIGJlZW4gcmVtb3ZlZC5cbisgKi9cbitpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMoY29uc3Qgc3RydWN0IHJhbmdlICpyYW5nZXMsIGludCBucl9yYW5nZXMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtYl90b3RhbCA9IDA7XG4gXHR1aW50OF90ICpvbmxpbmVfdHlwZXMsICp0bXA7XG4tXHRpbnQgcmM7XG4rXHRpbnQgaSwgcmMgPSAwO1xuIFxuLVx0aWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtZW1vcnlfYmxvY2tfc2l6ZV9ieXRlcygpKSB8fFxuLVx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0aWYgKCFyYW5nZXMgfHwgbnJfcmFuZ2VzIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHR1NjQgc3RhcnQgPSByYW5nZXNbaV0uc3RhcnQ7XG4rXHRcdHU2NCBzaXplID0gcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSk7XG4rXG4rXHRcdGlmICghSVNfQUxJR05FRChzdGFydCwgbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKSkgfHxcbitcdFx0ICAgICFJU19BTElHTkVEKHNpemUsIG1lbW9yeV9ibG9ja19zaXplX2J5dGVzKCkpIHx8ICFzaXplKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRtYl90b3RhbCArPSBzaXplIC8gbWVtb3J5X2Jsb2NrX3NpemVfYnl0ZXMoKTtcbitcdH1cbitcbiBcdC8qXG4tXHQgKiBXZSdsbCByZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGVhY2ggbWVtb3J5IGJsb2NrLCBzbyB3ZSBjYW5cbi1cdCAqIHRyeSB0byByZXZlcnQgd2hhdGV2ZXIgd2UgZGlkIHdoZW4gb2ZmbGluaW5nIG9uZSBtZW1vcnkgYmxvY2sgZmFpbHNcbi1cdCAqIGFmdGVyIG9mZmxpbmluZyBzb21lIG90aGVycyBzdWNjZWVkZWQuXG4rXHQgKiBSZW1lbWJlciB0aGUgb2xkIG9ubGluZSB0eXBlIG9mIGV2ZXJ5IG1lbW9yeSBibG9jayBhY3Jvc3MgYWxsIHJhbmdlcyxcbitcdCAqIHNvIHdlIGNhbiByZXZlcnQgaWYgb2ZmbGluaW5nIGEgbGF0ZXIgYmxvY2sgZmFpbHMuICBBbGwgZW50cmllcyBzdGFydFxuK1x0ICogYXMgTU1PUF9PRkZMSU5FIHNvIGJsb2NrcyB3ZSBuZXZlciB0b3VjaGVkIGFyZSBza2lwcGVkIG9uIHJvbGxiYWNrLlxuIFx0ICovXG4tXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX2NvdW50LCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4rXHRvbmxpbmVfdHlwZXMgPSBrbWFsbG9jX2FycmF5KG1iX3RvdGFsLCBzaXplb2YoKm9ubGluZV90eXBlcyksXG4gXHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFvbmxpbmVfdHlwZXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Lypcbi1cdCAqIEluaXRpYWxpemUgYWxsIHN0YXRlcyB0byBNTU9QX09GRkxJTkUsIHNvIHdoZW4gd2UgYWJvcnQgcHJvY2Vzc2luZyBpblxuLVx0ICogdHJ5X29mZmxpbmVfbWVtb3J5X2Jsb2NrKCksIHdlJ2xsIHNraXAgYWxsIHVucHJvY2Vzc2VkIGJsb2NrcyBpblxuLVx0ICogdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jaygpLlxuLVx0ICovXG4tXHRtZW1zZXQob25saW5lX3R5cGVzLCBNTU9QX09GRkxJTkUsIG1iX2NvdW50KTtcbitcdG1lbXNldChvbmxpbmVfdHlwZXMsIE1NT1BfT0ZGTElORSwgbWJfdG90YWwpO1xuIFxuIFx0bG9ja19kZXZpY2VfaG90cGx1ZygpO1xuIFxuK1x0LyogUGhhc2UgMTogb2ZmbGluZSBldmVyeSBibG9jayBpbiBldmVyeSByYW5nZS4gKi9cbiBcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdHJjID0gd2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkrKykge1xuK1x0XHRyYyA9IHdhbGtfbWVtb3J5X2Jsb2NrcyhyYW5nZXNbaV0uc3RhcnQsIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pLFxuK1x0XHRcdFx0XHRcdTAwMjZ0bXAsIHRyeV9vZmZsaW5lX21lbW9yeV9ibG9jayk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRicmVhaztcbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBJbiBjYXNlIHdlIHN1Y2NlZWRlZCB0byBvZmZsaW5lIGFsbCBtZW1vcnksIHJlbW92ZSBpdC5cbi1cdCAqIFRoaXMgY2Fubm90IGZhaWwgYXMgaXQgY2Fubm90IGdldCBvbmxpbmVkIGluIHRoZSBtZWFudGltZS5cbitcdCAqIFBoYXNlIDI6IFJlbW92ZSBlYWNoIHJhbmdlLiBUaGlzIGVzc2VudGlhbGx5IGNhbm5vdCBmYWlsIGFzIHdlIGhvbGRcbitcdCAqIHRoZSBob3RwbHVnIGxvY2sgLiBXQVJOIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBldmVyIGJyb2tlbi5cbiBcdCAqL1xuIFx0aWYgKCFyYykge1xuLVx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHN0YXJ0LCBzaXplKTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHByX2VycihcIiVzOiBGYWlsZWQgdG8gcmVtb3ZlIG1lbW9yeTogJWRcIiwgX19mdW5jX18sIHJjKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcbitcdFx0XHRyYyA9IHRyeV9yZW1vdmVfbWVtb3J5KHJhbmdlc1tpXS5zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgIHJhbmdlX2xlbihcdTAwMjZyYW5nZXNbaV0pKTtcbitcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHJjKSkge1xuK1x0XHRcdFx0cHJfZXJyKFwiJXM6IEZhaWxlZCB0byByZW1vdmUgbWVtb3J5OiAlZFwiLFxuK1x0XHRcdFx0ICAgICAgIF9fZnVuY19fLCByYyk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBSb2xsYmFjayB3aGF0IHdlIGRpZC4gV2hpbGUgbWVtb3J5IG9ubGluaW5nIG1pZ2h0IHRoZW9yZXRpY2FsbHkgZmFpbFxuLVx0ICogKG5hY2tlZCBieSBhIG5vdGlmaWVyKSwgaXQgYmFyZWx5IGV2ZXIgaGFwcGVucy5cbi1cdCAqL1xuK1x0LyogT24gZmFpbDogcm9sbCBiYWNrLiBCbG9ja3MgdGhhdCB3ZXJlIGFscmVhZHkgb2ZmbGluZSBhcmUgc2tpcHBlZCAqL1xuIFx0aWYgKHJjKSB7XG4gXHRcdHRtcCA9IG9ubGluZV90eXBlcztcbi1cdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHN0YXJ0LCBzaXplLCBcdTAwMjZ0bXAsXG4tXHRcdFx0XHQgICB0cnlfcmVvbmxpbmVfbWVtb3J5X2Jsb2NrKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpKyspXG4rXHRcdFx0d2Fsa19tZW1vcnlfYmxvY2tzKHJhbmdlc1tpXS5zdGFydCxcbitcdFx0XHRcdFx0ICAgcmFuZ2VfbGVuKFx1MDAyNnJhbmdlc1tpXSksIFx1MDAyNnRtcCxcbitcdFx0XHRcdFx0ICAgdHJ5X3Jlb25saW5lX21lbW9yeV9ibG9jayk7XG4gXHR9XG4gXHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiBcbiBcdGtmcmVlKG9ubGluZV90eXBlcyk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA2ZTU5YjhmNjNlNDE2My4uOGMyYjRmOTc2MTljZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xNCw2ICsxNCw3IEBAIFRBUkdFVFMgKz0gY29yZVxuIFRBUkdFVFMgKz0gY3B1ZnJlcVxuIFRBUkdFVFMgKz0gY3B1LWhvdHBsdWdcbiBUQVJHRVRTICs9IGRhbW9uXG4rVEFSR0VUUyArPSBkYXhcbiBUQVJHRVRTICs9IGRldmljZXMvZXJyb3JfbG9nc1xuIFRBUkdFVFMgKz0gZGV2aWNlcy9wcm9iZVxuIFRBUkdFVFMgKz0gZG1hYnVmLWhlYXBzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1YTRmM2Q3M2E1YmFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNiBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbithbGw6XG4rXG4rVEVTVF9QUk9HUyA6PSBkYXgta21lbS1ob3RwbHVnLnNoXG4rXG4raW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YzlhYWViNmNlYjQxYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ1xuQEAgLTAsMCArMSw0IEBAXG4rQ09ORklHX0RFVl9EQVg9bVxuK0NPTkZJR19ERVZfREFYX0tNRU09bVxuK0NPTkZJR19NRU1PUllfSE9UUExVRz15XG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2RheC1rbWVtLWhvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODAzYmJkNWE2NDA5OGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9kYXgta21lbS1ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDIwNyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIEV4ZXJjaXNlIHRoZSBkYXgva21lbSBcInN0YXRlXCIgc3lzZnMgYXR0cmlidXRlOlxuKyMgICAvc3lzL2J1cy9kYXgvZGV2aWNlcy9kYXhYLlkvc3RhdGUgIC1cdTAwM2UgIHVucGx1Z2dlZCB8IG9ubGluZSB8IG9ubGluZV9tb3ZhYmxlXG4rI1xuKyMgVGhlIHRlc3QgbmVlZHMgYSBkYXggZGV2aWNlIGFscmVhZHkgYm91bmQgdG8gdGhlIGttZW0gZHJpdmVyLlxuKyMgSWYgbm8gc3VpdGFibGUgZGV2aWNlIGlzIGZvdW5kIHRoZSB0ZXN0cyBTS0lQLlxuKyNcbisjIEEgZGF4IGRldmljZSBjYW4gYmUgcHJvdmlzaW9uZWQgd2l0aCB0aGUgbWVtbWFwPSBib290IHBhcmFtLCBlLmcuOlxuKyMgICBtZW1tYXA9MkchNEdcbisjXG4rIyB0aGVuLCBpbiB0aGUgYm9vdGVkIHN5c3RlbTpcbisjXG4rIyAgIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLW0gZGV2ZGF4IC1lIG5hbWVzcGFjZTAuMCAtZlxuKyMgICBkYXhjdGwgcmVjb25maWd1cmUtZGV2aWNlIC1OIC1tIHN5c3RlbS1yYW0gZGF4MC4wICAgIyBiaW5kIGttZW1cbisjICAgLi9kYXgta21lbS1ob3RwbHVnLnNoXG4rXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MxMDkxXG4rRElSPVwiJChkaXJuYW1lIFwiJChyZWFkbGluayAtZiBcIiQwXCIpXCIpXCJcbisuIFwiJERJUlwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitcbitEQVhfQkFTRT0vc3lzL2J1cy9kYXgvZGV2aWNlc1xuK1xuK21lbXRvdGFsX2tiKCkgeyBhd2sgJy9eTWVtVG90YWw6LyB7cHJpbnQgJDJ9JyAvcHJvYy9tZW1pbmZvOyB9XG4rZ2V0X3N0YXRlKCkgeyBjYXQgXCIkSFBcIiAyXHUwMDNlL2Rldi9udWxsOyB9XG4rIyBzZXRfc3RhdGUgU1RBVEUgLS0gd3JpdGUgYSBzdGF0ZSB0byB0aGUgc3RhdGUgYXR0cmlidXRlOyByZXR1cm5zIHRoZVxuKyMgd3JpdGUncyBleGl0IHN0YXR1cyAoMCA9IGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwpXG4rc2V0X3N0YXRlKCkgeyBlY2hvIFwiJDFcIiBcdTAwM2UgXCIkSFBcIiAyXHUwMDNlL2Rldi9udWxsOyB9XG4rXG4rZmluZF9rbWVtX2RheCgpIHtcbitcdGxvY2FsIGQgZHJ2XG4rXHRmb3IgZCBpbiBcIiREQVhfQkFTRVwiL2RheCo7IGRvXG4rXHRcdFsgLWUgXCIkZC9zdGF0ZVwiIF0gfHwgY29udGludWVcbitcdFx0ZHJ2PSQocmVhZGxpbmsgXCIkZC9kcml2ZXJcIiAyXHUwMDNlL2Rldi9udWxsKVxuK1x0XHRbIFwiJChiYXNlbmFtZSBcIiR7ZHJ2Oi19XCIpXCIgPSBrbWVtIF0gfHwgY29udGludWVcbitcdFx0YmFzZW5hbWUgXCIkZFwiXG4rXHRcdHJldHVybiAwXG4rXHRkb25lXG4rXHRyZXR1cm4gMVxuK31cbitcbitrdGFwX3ByaW50X2hlYWRlclxuK1xuK2lmIFsgXCIkVUlEXCIgIT0gMCBdOyB0aGVuXG4rXHRrdGFwX3NraXBfYWxsIFwibXVzdCBiZSBydW4gYXMgcm9vdFwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rZmlcbitcbitEQVg9JChmaW5kX2ttZW1fZGF4KVxuK2lmIFsgLXogXCIkREFYXCIgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm5vIGttZW0tYm91bmQgZGF4IGRldmljZSB3aXRoIGEgc3RhdGUgYXR0cmlidXRlXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK0hQPSREQVhfQkFTRS8kREFYL3N0YXRlXG4rT1JJRz0kKGdldF9zdGF0ZSlcbitcbisjIEEgZmFpbHVyZSB0byByZWFjaCB0aGUgYmFzZWxpbmUgaXMgZW52aXJvbm1lbnRhbCAobWVtb3J5IGluIHVzZSksIG5vdCBhblxuKyMgaW50ZXJmYWNlIGZhaWx1cmUsIHNvIHNraXAgcmF0aGVyIHRoYW4gZmFpbC5cbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK2lmIFsgXCIkcmNcIiAhPSAwIF0gfHwgWyBcIiQoZ2V0X3N0YXRlKVwiICE9IHVucGx1Z2dlZCBdOyB0aGVuXG4rXHRrdGFwX3NraXBfYWxsIFwiJERBWDogY2Fubm90IHJlYWNoICd1bnBsdWdnZWQnIGJhc2VsaW5lIChtZW1vcnkgaW4gdXNlPylcIlxuK1x0WyAtbiBcIiRPUklHXCIgXSBcdTAwMjZcdTAwMjYgc2V0X3N0YXRlIFwiJE9SSUdcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rbXRfdW5wbHVnZ2VkPSQobWVtdG90YWxfa2IpXG4rXG4rRFJWPS9zeXMvYnVzL2RheC9kcml2ZXJzL2ttZW1cbitBT0I9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYXV0b19vbmxpbmVfYmxvY2tzXG4rXG4ra3RhcF9wcmludF9tc2cgXCJ1c2luZyAkREFYIChpbml0aWFsIHN0YXRlIHdhczogJE9SSUcpXCJcbitrdGFwX3NldF9wbGFuIDExXG4rXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cbittdF9vbmxpbmU9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdIFx1MDAyNlx1MDAyNiBbIFwiJG10X29ubGluZVwiIC1ndCBcIiRtdF91bnBsdWdnZWRcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZTogc3RhdGU9b25saW5lLCBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X29ubGluZSBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X3VucGx1Z2dlZCAtXHUwMDNlICRtdF9vbmxpbmVcIlxuK2ZpXG4rXG4rc2V0X3N0YXRlIG9ubGluZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZSBpZGVtcG90ZW50XCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm9ubGluZSBpZGVtcG90ZW50OiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpXCJcbitmaVxuK1xuK3NldF9zdGF0ZSBvbmxpbmVfbW92YWJsZTsgcmM9JD9cbitpZiBbIFwiJHJjXCIgIT0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSBvbmxpbmUgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3Qgb25saW5lX21vdmFibGUgd2l0aG91dCBpbnRlcnZlbmluZyB1bnBsdWdcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lLVx1MDAzZW9ubGluZV9tb3ZhYmxlIG5vdCByZWplY3RlZDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKVwiXG4rZmlcbitcbitzZXRfc3RhdGUgdW5wbHVnZ2VkOyByYz0kP1xuK210PSQobWVtdG90YWxfa2IpXG4raWYgWyBcIiRyY1wiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJChnZXRfc3RhdGUpXCIgPSB1bnBsdWdnZWQgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1sdCBcIiRtdF9vbmxpbmVcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcInVucGx1ZyBmcm9tIG9ubGluZTogTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdCBrQlwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJ1bnBsdWcgZnJvbSBvbmxpbmU6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X29ubGluZSAtXHUwMDNlICRtdFwiXG4rZmlcbitcbitzZXRfc3RhdGUgb25saW5lX21vdmFibGU7IHJjPSQ/XG4rbXRfbW92YWJsZT0kKG1lbXRvdGFsX2tiKVxuK2lmIFsgXCIkcmNcIiA9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gb25saW5lX21vdmFibGUgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdF9tb3ZhYmxlXCIgLWd0IFwiJG10X3VucGx1Z2dlZFwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwib25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiBNZW1Ub3RhbCAkbXRfdW5wbHVnZ2VkIC1cdTAwM2UgJG10X21vdmFibGUga0JcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX21vdmFibGUgYWZ0ZXIgdW5wbHVnOiByYz0kcmMgc3RhdGU9JChnZXRfc3RhdGUpIE1lbVRvdGFsPSRtdF9tb3ZhYmxlXCJcbitmaVxuK1xuKyMgVGhlIG9ubGluZSAtXHUwMDNlIHVucGx1ZyAtXHUwMDNlIG9ubGluZV9tb3ZhYmxlIC1cdTAwM2UgdW5wbHVnIGN5Y2xlIG9uY2UgcmVncmVzc2VkOlxuKyMgYSByZS1vbmxpbmUgZmFpbGVkIHRvIHJlLXJlc2VydmUgdGhlIHBlci1yYW5nZSByZXNvdXJjZXMsIHNvIHRoZSBmaW5hbCB1bnBsdWdcbisjIHJlcG9ydGVkIHN1Y2Nlc3Mgd2hpbGUgbGVhdmluZyB0aGUgbWVtb3J5IG9ubGluZS4gIEFzc2VydCBpdCBpcyByZWFsbHkgZnJlZWQuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgcmM9JD9cbittdD0kKG1lbXRvdGFsX2tiKVxuK2lmIFsgXCIkcmNcIiAhPSAwIF07IHRoZW5cbitcdGt0YXBfdGVzdF9za2lwIFwidW5wbHVnIGZyb20gbW92YWJsZSBub3QgYWNjZXB0ZWQgKG1lbW9yeSBpbiB1c2U/KSByYz0kcmNcIlxuK2VsaWYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gdW5wbHVnZ2VkIF0gXHUwMDI2XHUwMDI2IFsgXCIkbXRcIiAtbHQgXCIkbXRfbW92YWJsZVwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwidW5wbHVnIGZyb20gb25saW5lX21vdmFibGUgcmVtb3ZlZCBtZW1vcnk6ICRtdF9tb3ZhYmxlIC1cdTAwM2UgJG10IGtCXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcInVucGx1ZyBmcm9tIG1vdmFibGUgcmVwb3J0ZWQgc3VjY2VzcyBidXQgbWVtb3J5IHJlbWFpbmVkOiBzdGF0ZT0kKGdldF9zdGF0ZSkgTWVtVG90YWwgJG10X21vdmFibGUgLVx1MDAzZSAkbXRcIlxuK2ZpXG4rXG4rc2V0X3N0YXRlIG9ubGluZV9rZXJuZWw7IHJjPSQ/XG4rbXQ9JChtZW10b3RhbF9rYilcbitpZiBbIFwiJHJjXCIgPSAwIF0gXHUwMDI2XHUwMDI2IFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZV9rZXJuZWwgXSBcdTAwMjZcdTAwMjYgWyBcIiRtdFwiIC1ndCBcIiRtdF91bnBsdWdnZWRcIiBdOyB0aGVuXG4rXHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZV9rZXJuZWw6IE1lbVRvdGFsICRtdF91bnBsdWdnZWQgLVx1MDAzZSAkbXQga0JcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwib25saW5lX2tlcm5lbDogcmM9JHJjIHN0YXRlPSQoZ2V0X3N0YXRlKSBNZW1Ub3RhbD0kbXRcIlxuK2ZpXG4rc2V0X3N0YXRlIHVucGx1Z2dlZFxuK1xuK2JlZm9yZT0kKGdldF9zdGF0ZSlcbitzZXRfc3RhdGUgYm9ndXNfc3RhdGU7IHJjPSQ/XG4raWYgWyBcIiRyY1wiICE9IDAgXSBcdTAwMjZcdTAwMjYgWyBcIiQoZ2V0X3N0YXRlKVwiID0gXCIkYmVmb3JlXCIgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJyZWplY3QgaW52YWxpZCBzdGF0ZSBzdHJpbmdcIlxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwiaW52YWxpZCBzdGF0ZSBub3QgcmVqZWN0ZWQ6IHJjPSRyYyBzdGF0ZT0kKGdldF9zdGF0ZSlcIlxuK2ZpXG4rXG4rIyBSdW4gc2V2ZXJhbCBvbmxpbmUvdW5wbHVnIGN5Y2xlcyBhbmQgcmVxdWlyZSB0aGF0IGVhY2ggb25lIGFkZHMvcmVtb3ZlcyBtZW1vcnlcbitzZXRfc3RhdGUgdW5wbHVnZ2VkXG4rY3ljbGVfb2s9MTsgZmFpbF9pPTBcbitmb3IgaSBpbiAxIDIgMzsgZG9cbitcdGlmICEgc2V0X3N0YXRlIG9ubGluZTsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuK1x0b249JChtZW10b3RhbF9rYilcbitcdGlmICEgc2V0X3N0YXRlIHVucGx1Z2dlZDsgdGhlbiBjeWNsZV9vaz0wOyBmYWlsX2k9JGk7IGJyZWFrOyBmaVxuK1x0b2ZmPSQobWVtdG90YWxfa2IpXG4rXHRpZiBbIFwiJG9uXCIgLWxlIFwiJG10X3VucGx1Z2dlZFwiIF0gfHwgWyBcIiRvZmZcIiAtZ2UgXCIkb25cIiBdOyB0aGVuXG4rXHRcdGN5Y2xlX29rPTA7IGZhaWxfaT0kaTsgYnJlYWtcbitcdGZpXG4rZG9uZVxuK2lmIFsgXCIkY3ljbGVfb2tcIiA9IDEgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlLWFjcXVpcmVzIHJlc291cmNlcyAoM3g6IG1lbW9yeSBhZGRlZCBhbmQgZnJlZWQgZWFjaCB0aW1lKVwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJvbmxpbmUvdW5wbHVnIGN5Y2xlIHJlZ3Jlc3NlZCBhdCBpdGVyYXRpb24gJGZhaWxfaSAob249JG9uIG9mZj0kb2ZmIGJhc2VsaW5lPSRtdF91bnBsdWdnZWQpXCJcbitmaVxuK1xuKyMgY2hhbmdlIHN5c3RlbSBkZWZhdWx0IG9ubGluZSBwb2xpY3kgd2hpbGUgdGhlIGRldmljZSBpcyB1bmJvdW5kLCBhbmQgc2hvd1xuKyMgdGhlIG5ldyBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgaXMgdXRpbGl6ZWQgYWNyb3NzIGJpbmRpbmdzLlxuK3NldF9zdGF0ZSB1bnBsdWdnZWRcbitpZiBbIC13IFwiJEFPQlwiIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCIkRFJWL3VuYmluZFwiIF0gXHUwMDI2XHUwMDI2IFsgLXcgXCIkRFJWL2JpbmRcIiBdOyB0aGVuXG4rXHRvcmlnX2FvYj0kKGNhdCBcIiRBT0JcIilcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi91bmJpbmRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIG9mZmxpbmUgXHUwMDNlIFwiJEFPQlwiIDJcdTAwM2UvZGV2L251bGxcbitcdGVjaG8gXCIkREFYXCIgXHUwMDNlIFwiJERSVi9iaW5kXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0c2xlZXAgMVxuK1x0c3Q9JChnZXRfc3RhdGUpXG4rXHRlY2hvIFwiJG9yaWdfYW9iXCIgXHUwMDNlIFwiJEFPQlwiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZXN0b3JlIHN5c3RlbSBwb2xpY3lcbitcdGlmIFsgXCIkc3RcIiA9IG9mZmxpbmUgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIm9ubGluZSBwb2xpY3kgcmVzb2x2ZWQgYXQgYmluZDogYXV0b19vbmxpbmVfYmxvY2tzPW9mZmxpbmUgLVx1MDAzZSBzdGF0ZT1vZmZsaW5lXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCJiaW5kLXRpbWUgcG9saWN5IG5vdCBob25vcmVkOiBzdGF0ZT0kc3QgKGV4cGVjdGVkIG9mZmxpbmUpXCJcbitcdGZpXG4rXHRzZXRfc3RhdGUgdW5wbHVnZ2VkIDJcdTAwM2UvZGV2L251bGxcbitlbHNlXG4rXHRrdGFwX3Rlc3Rfc2tpcCBcImF1dG9fb25saW5lX2Jsb2NrcyBvciBkcml2ZXIgYmluZC91bmJpbmQgbm90IHdyaXRhYmxlXCJcbitmaVxuK1xuK1sgLW4gXCIkT1JJR1wiIF0gXHUwMDI2XHUwMDI2IHNldF9zdGF0ZSBcIiRPUklHXCJcbitcbisjIERFU1RSVUNUSVZFOiB1bmJpbmRpbmcgdGhlIGRyaXZlciB3aGlsZSBtZW1vcnkgaXMgb25saW5lIGNhdXNlcyB0aGUgcmVzb3VyY2VzXG4rIyB0byBsZWFrIC0gYnV0IHRoZSB1bmJpbmQgc2hvdWxkIG5vdCBkZWFkbG9jay4gIEluc3RlYWQgdGhlIGRyaXZlciBsZWFrcyBpdFxuKyMgd2l0aCBhIHNpbmdsZSBcInN1Y2sgb25saW5lXCIgd2FybmluZy4gVGhpcyBsZWF2ZXMgdGhlIG1lbW9yeSBvbmxpbmUgYW5kIHRoZVxuKyMgZGV2aWNlIHVuYm91bmQgdW50aWwgcmVib290LCBzbyBpdCBydW5zIGxhc3QuXG4rc2V0X3N0YXRlIHVucGx1Z2dlZDsgc2V0X3N0YXRlIG9ubGluZVxuK2lmIFsgXCIkKGdldF9zdGF0ZSlcIiA9IG9ubGluZSBdIFx1MDAyNlx1MDAyNiBbIC13IFwiJERSVi91bmJpbmRcIiBdOyB0aGVuXG4rXHRtdF9vbj0kKG1lbXRvdGFsX2tiKVxuK1x0ZG1lc2cgLUMgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWNobyBcIiREQVhcIiBcdTAwM2UgXCIkRFJWL3VuYmluZFwiIDJcdTAwM2UvZGV2L251bGxcbitcdG10X2FmdGVyPSQobWVtdG90YWxfa2IpXG4rXHQjIFRoZSBsZWFrZWQgXCJTeXN0ZW0gUkFNIChrbWVtKVwiIHJlZ2lvbnMgc3RheSBpbiB0aGUgaW9tZW0gdHJlZTsgcmVhZGluZ1xuK1x0IyB0aGVpciBuYW1lcyBkZXJlZmVyZW5jZXMgcmVzX25hbWUsIHdoaWNoIGEgYnVnZ3kgdW5iaW5kIGFscmVhZHkgZnJlZWQuXG4rXHQjIFdhbGsgL3Byb2MvaW9tZW0gdG8gcHJvdm9rZSB0aGF0IHVzZS1hZnRlci1mcmVlIChjYXVnaHQgYnkgS0FTQU4pLlxuK1x0Y2F0IC9wcm9jL2lvbWVtIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdHNwbGF0PSQoZG1lc2cgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLWNpRSBcIktBU0FOfEJVRzp8dXNlLWFmdGVyLWZyZWV8Z2VuZXJhbCBwcm90ZWN0aW9ufE9vcHN8cmVmY291bnRfdFwiKVxuK1x0aWYgWyBcIiRzcGxhdFwiID0gMCBdIFx1MDAyNlx1MDAyNiBbIFwiJG10X2FmdGVyXCIgLWdlIFwiJG10X29uXCIgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcInVuYmluZCB3aGlsZSBvbmxpbmU6IG1lbW9yeSBsZWZ0IG9ubGluZSwgbm8gVUFGL29vcHMgKE1lbVRvdGFsICRtdF9vbiAtXHUwMDNlICRtdF9hZnRlciBrQilcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcInVuYmluZCB3aGlsZSBvbmxpbmUgcmVncmVzc2VkOiBzcGxhdD0kc3BsYXQgTWVtVG90YWwgJG10X29uIC1cdTAwM2UgJG10X2FmdGVyIGtCXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X3NraXAgXCJjb3VsZCBub3Qgb25saW5lIGRldmljZSBmb3IgdW5iaW5kLXdoaWxlLW9ubGluZSB0ZXN0XCJcbitmaVxuK1xuK2t0YXBfZmluaXNoZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3MgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmE0ZDg1Zjc0Y2Q2Yjlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9zZXR0aW5nc1xuQEAgLTAsMCArMSBAQFxuK3RpbWVvdXQ9OTBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE4OjQ1Ljk1OTk0NDgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NjIwMjEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQVggS21lbSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG1lbW9yeSBob3RwbHVnZ2luZywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIERBWCBrbWVtIGRyaXZlci4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIGFuZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBiZSBjb25zaWRlcmluZyB0aGlzIGZvciBmdXp6aW5nLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaXMgdGhpcyBuZXcgc3lzZnMgYXR0cmlidXRlLCBgL3N5cy9idXMvZGF4L2RldmljZXMvZGF4WC5ZL3N0YXRlYC4gIFRoaXMgaXMgaG93IHRoZSB1c2VyIHdpbGwgY29udHJvbCB0aGUgbWVtb3J5IHJlZ2lvbidzIHN0YXRl4oCUdW5wbHVnZ2VkLCBvbmxpbmUsIHRoZSBrZXJuZWwsIGFuZCBtb3ZhYmxlLiAgQSBjbGVhciBjb250cm9sIG1lY2hhbmlzbSBpcyBhbHdheXMgc29tZXRoaW5nIEknbSBpbnRlcmVzdGVkIGluIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9kYXgva21lbS5jYCB0byBoYW5kbGUgaG90cGx1ZyBhbmQgaG90cmVtb3ZlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gaWRlbnRpZnkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSBhcmVhcyBiZWluZyBpbXBhY3RlZDpcblxuKiAgICoqYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AqKjogRnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFwcGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhbiBvbmxpbmUgdHlwZSwgYW5kIHZpY2UgdmVyc2EuXG4qICAgKipgZHJpdmVycy9kYXgvYnVzLmMsIGN4bC5jLCBobWVtLmMsIHBtZW0uY2AqKjogV2UgaGF2ZSBzZXZlcmFsIHByb2JlcyBiZWluZyBtb2RpZmllZCB0byBhZGQgREFYIGNhcGFiaWxpdGllcyBmb3IgdmFyaW91cyBEQVggZGV2aWNlcy5cbiogICAqKmBkcml2ZXJzL2RheC9rbWVtLmNgKio6IFRoaXMgaXMgd2hlcmUgdGhlIGhlYXZ5IGxpZnRpbmcgaXMgaGFwcGVuaW5nLiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgc3RhdGVfc2hvd2AsIGBzdGF0ZV9zdG9yZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAgYXBwZWFyIHRvIGJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiwgYXMgdGhleSBhcmUgbGlrZWx5IHRvIGJlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eS5cbiogICAqKmBtbS9tZW1vcnlfaG90cGx1Zy5jYCoqOiBDb3JlIGhvdHBsdWdnaW5nIGluZnJhc3RydWN0dXJlIGZ1bmN0aW9ucyBsaWtlIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcy5cblxuTm93LCBmcm9tIHRoZSBsb29rIG9mIGl0LCB0aGUgY29kZSBzZWVtcyB3ZWxsLXN0cnVjdHVyZWQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGltbXVuZSB0byBidWdzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcy4gQmFzZWQgb24gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnYCBmaWxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVzZSBzZXQ6IGBDT05GSUdfREVWX0RBWGAsIGBDT05GSUdfREVWX0RBWF9LTUVNYCwgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIGFuZCBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBlbmFibGVkIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5Pa2F5LCBsZXQncyBzZWUgaG93IHRoaXMgc2hhcGVzIHVwLiBJJ20gcmVhZHkgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCBmb3JtdWxhdGluZyBzb21lIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxODo1NC42MjE5Njc3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU4NDQxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVl9EQVhfS01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnPTMwPWNvbmZpZyBERVZfREFYX0hNRU1cXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDMtXFx0ICBkZXZpY2UtZGF4IGluc3RhbmNlcyBmb3IgdGhlc2UgbWVtb3J5IHJhbmdlcywgYW5kIHRoYXQgYWxzb1xcbmRyaXZlcnMvZGF4L0tjb25maWc6NDQ6XFx0ICBlbmFibGVzIHRoZSBwb3NzaWJpbGl0eSB0byBhc3NpZ24gdGhlbSB0byB0aGUgREVWX0RBWF9LTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy00NS1cXHQgIGRyaXZlciB0byBvdmVycmlkZSB0aGUgcmVzZXJ2YXRpb24gYW5kIGFkZCB0aGVtIHRvIGtlcm5lbFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz02OD1jb25maWcgREVWX0RBWF9GU0RFVlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjczOmNvbmZpZyBERVZfREFYX0tNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJLTUVNIERBWDogbWFwIGRheC1kZXZpY2VzIGFzIFN5c3RlbS1SQU1cXFwiXFxuLS1cXG5kcml2ZXJzL2RheC9NYWtlZmlsZT00PW9iai0kKENPTkZJR19ERVZfREFYKSArPSBkZXZpY2VfZGF4Lm9cXG5kcml2ZXJzL2RheC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19ERVZfREFYX0tNRU0pICs9IGttZW0ub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgKz0gZGF4X3BtZW0ub1xcbi0tXFxuZHJpdmVycy9kYXgvYnVzLmM9Njg9c3RhdGljIGludCBkYXhfbWF0Y2hfdHlwZShjb25zdCBzdHJ1Y3QgZGF4X2RldmljZV9kcml2ZXIgKmRheF9kcnYsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvZGF4L2J1cy5jLTgwLVxcdGlmIChkYXhfZHJ2LVxcdTAwM2V0eXBlID09IERBWERSVl9ERVZJQ0VfVFlQRSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZGF4L2J1cy5jOjgxOlxcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9LTUVNKSlcXG5kcml2ZXJzL2RheC9idXMuYy04Mi1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9MT1DT05GSUdfREVWX0RBWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoyOkNPTkZJR19ERVZfREFYX0tNRU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxODo1Ny4wODA0MTQ1NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk5NDYxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucywgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgbWVtb3J5IHNpdHVhdGlvbi4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGEgZmV3IGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0IHVwLCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19ERVZfREFYYC4gVGhhdCdzIGNydWNpYWwuIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydC4gSXQncyBpbXBvcnRhbnQgdG8ga25vdyBpZiBEQVggaXMgZW5hYmxlZCwgZ2l2ZW4gdGhhdCBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBvciBwZXJzaXN0ZW50IG1lbW9yeS4gVGhlIGRldGFpbHMgd2lsbCBhbGxvdyBtZSB0byBkZWNpZGUgd2hldGhlciBEQVggd2lsbCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBteSBjb2RlLiBOZXh0LCBJJ2xsIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIEdpdmVuIHRoZSB3YXkgbWVtb3J5IGlzIGNoYW5naW5nIG92ZXIgdGltZSB3aXRoIHRoZSByaXNlIG9mIHNlcnZlcnMsIHRoaXMgaXMgaW1wb3J0YW50LiBUaGVuLCBJIHdpbGwgYWxzbyBoYXZlIHRvIGNoZWNrIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIHR3byBvcHRpb25zIGdvIGhhbmQgaW4gaGFuZCwgZGVmaW5pbmcgaWYgSSBjYW4gYWRkIGFuZCByZW1vdmUgbWVtb3J5IGF0IHJ1bnRpbWUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBhbmFseXplIGhvdyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIG1hbmFnZSB0aGUgb3ZlcmFsbCBtZW1vcnkgcG9vbCBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOTUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTowNC4wNzk4NzgxOTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjM3MTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZfREFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz02NDc9Q09ORklHX1ZIT1NUX1ZEUEE9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo2NDg6Q09ORklHX0RFVl9EQVg9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy02NDktQ09ORklHX0VYVDRfRlM9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTYzNz1DT05GSUdfVkhPU1RfVkRQQT1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjYzODpDT05GSUdfREVWX0RBWD1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTYzOS1DT05GSUdfRVhUNF9GUz15XFxuLS1cXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM9ODU5PXN0YXRpYyB2b2lkIGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X2RldmljZXMoc3RydWN0IG1lbW9yeV90YXJnZXQgKnRhcmdldClcXG4tLVxcbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NjYtXFx0ICovXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jOjg2NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSkpXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg2OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnPTY9aWYgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctMTgtXFxuZHJpdmVycy9kYXgvS2NvbmZpZzoxOTpjb25maWcgREVWX0RBWF9QTUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuZHJpdmVycy9kYXgvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnOjIyOlxcdGRlZmF1bHQgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL2RheC9LY29uZmlnOjMwOmNvbmZpZyBERVZfREFYX0hNRU1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJITUVNIERBWDogZGlyZWN0IGFjY2VzcyB0byAnc3BlY2lmaWMgcHVycG9zZScgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0zMy1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQV9NRU1CTEtTXFxuZHJpdmVycy9kYXgvS2NvbmZpZzozNDpcXHRkZWZhdWx0IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTM1LVxcdGRlcGVuZHMgb24gQ1hMX0FDUEkgfHwgIUNYTF9BQ1BJXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTQzLVxcdCAgZGV2aWNlLWRheCBpbnN0YW5jZXMgZm9yIHRoZXNlIG1lbW9yeSByYW5nZXMsIGFuZCB0aGF0IGFsc29cXG5kcml2ZXJzL2RheC9LY29uZmlnOjQ0OlxcdCAgZW5hYmxlcyB0aGUgcG9zc2liaWxpdHkgdG8gYXNzaWduIHRoZW0gdG8gdGhlIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDUtXFx0ICBkcml2ZXIgdG8gb3ZlcnJpZGUgdGhlIHJlc2VydmF0aW9uIGFuZCBhZGQgdGhlbSB0byBrZXJuZWxcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWctNDktXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo1MDpjb25maWcgREVWX0RBWF9DWExcXG5kcml2ZXJzL2RheC9LY29uZmlnLTUxLVxcdHRyaXN0YXRlIFxcXCJDWEwgREFYOiBkaXJlY3QgYWNjZXNzIHRvIENYTCBSQU0gcmVnaW9uc1xcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gQ1hMX0JVUyBcXHUwMDI2XFx1MDAyNiBDWExfUkVHSU9OIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnOjUzOlxcdGRlZmF1bHQgQ1hMX1JFR0lPTiBcXHUwMDI2XFx1MDAyNiBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSB8fCAhREVWX0RBWF9ITUVNXFxuZHJpdmVycy9kYXgvS2NvbmZpZy01NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RheC9LY29uZmlnLTYzLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NjQ6Y29uZmlnIERFVl9EQVhfSE1FTV9ERVZJQ0VTXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo2NTpcXHRkZXBlbmRzIG9uIERFVl9EQVhfSE1FTSBcXHUwMDI2XFx1MDAyNiBEQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY2LVxcdGRlZl9ib29sIHlcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY3LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6Njg6Y29uZmlnIERFVl9EQVhfRlNERVZcXG5kcml2ZXJzL2RheC9LY29uZmlnLTY5LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERFVl9EQVggXFx1MDAyNlxcdTAwMjYgRlNfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERFVl9EQVhcXG5kcml2ZXJzL2RheC9LY29uZmlnLTcyLVxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzM6Y29uZmlnIERFVl9EQVhfS01FTVxcbmRyaXZlcnMvZGF4L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIktNRU0gREFYOiBtYXAgZGF4LWRldmljZXMgYXMgU3lzdGVtLVJBTVxcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjc1OlxcdGRlZmF1bHQgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWc6NzY6XFx0ZGVwZW5kcyBvbiBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03Ny1cXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHICMgZm9yIGFkZF9tZW1vcnkoKSBhbmQgZnJpZW5kc1xcbi0tXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfREFYKSArPSBkYXgub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVgpICs9IGRldmljZV9kYXgub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RFVl9EQVhfS01FTSkgKz0ga21lbS5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREVWX0RBWF9QTUVNKSArPSBkYXhfcG1lbS5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfREVWX0RBWF9DWEwpICs9IGRheF9jeGwub1xcbmRyaXZlcnMvZGF4L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0RFVl9EQVhfRlNERVYpICs9IGZzZGV2X2RheC5vXFxuZHJpdmVycy9kYXgvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvZGF4L2J1cy5jPTY4PXN0YXRpYyBpbnQgZGF4X21hdGNoX3R5cGUoY29uc3Qgc3RydWN0IGRheF9kZXZpY2VfZHJpdmVyICpkYXhfZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2RheC9idXMuYy04MC1cXHRpZiAoZGF4X2Rydi1cXHUwMDNldHlwZSA9PSBEQVhEUlZfREVWSUNFX1RZUEUgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2RheC9idXMuYzo4MTpcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfS01FTSkpXFxuZHJpdmVycy9kYXgvYnVzLmMtODItXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5kcml2ZXJzL2RheC9idXMuaD03Mz10b19obWVtX3BsYXRmb3JtX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9kYXgvYnVzLmgtNzctXFxuZHJpdmVycy9kYXgvYnVzLmg6Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfSE1FTSlcXG5kcml2ZXJzL2RheC9idXMuaC03OS12b2lkIGRheF9obWVtX2ZsdXNoX3dvcmsodm9pZCk7XFxuLS1cXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlLTItIyBkZXZpY2VfaG1lbS5vIGRlbGliZXJhdGVseSBwcmVjZWRlcyBkYXhfaG1lbS5vIGZvciBpbml0Y2FsbCBvcmRlcmluZ1xcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfREVWX0RBWF9ITUVNX0RFVklDRVMpICs9IGRldmljZV9obWVtLm9cXG5kcml2ZXJzL2RheC9obWVtL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RFVl9EQVhfSE1FTSkgKz0gZGF4X2htZW0ub1xcbmRyaXZlcnMvZGF4L2htZW0vTWFrZWZpbGUtNS1cXG4tLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jPTE2Nj1zdGF0aWMgaW50IGhtZW1fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmhvc3QsIGludCB0YXJnZXRfbmlkLFxcbi0tXFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTcxLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jOjE3MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVWX0RBWF9DWEwpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmMtMTczLVxcdCAgICByZWdpb25faW50ZXJzZWN0cyhyZXMtXFx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIElPUkVTT1VSQ0VfTUVNLFxcbi0tXFxuZHJpdmVycy9kYXgvaG1lbS9obWVtLmM9MjA4PXN0YXRpYyBfX2luaXQgaW50IGRheF9obWVtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxNi1cXHQgKi9cXG5kcml2ZXJzL2RheC9obWVtL2htZW0uYzoyMTc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFVl9EQVhfQ1hMKSkge1xcbmRyaXZlcnMvZGF4L2htZW0vaG1lbS5jLTIxOC1cXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwiY3hsX2FjcGlcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWc9MT1jb25maWcgRE1fUENBQ0hFXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX0RNXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gREVWX0RBWFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcXG4tLVxcbmZzL0tjb25maWctODAtXFxuZnMvS2NvbmZpZzo4MTogICAgICAgICAgRm9yIG5kY3RsIHRvIHdvcmsgQ09ORklHX0RFVl9EQVggbmVlZHMgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBGb3IgbW9zdFxcbmZzL0tjb25maWctODItXFx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxcbi0tXFxuaW5jbHVkZS9saW51eC9kYXguaD0zMDk9c3RhdGljIGlubGluZSBpbnQgZGF4X21lbTJibGtfZXJyKGludCBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oLTMxMy1cXG5pbmNsdWRlL2xpbnV4L2RheC5oOjMxNDojaWZkZWYgQ09ORklHX0RFVl9EQVhfSE1FTV9ERVZJQ0VTXFxuaW5jbHVkZS9saW51eC9kYXguaC0zMTUtdm9pZCBobWVtX3JlZ2lzdGVyX3Jlc291cmNlKGludCB0YXJnZXRfbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTM0PWVuZGlmXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjM1Om9iai0kKENPTkZJR19ERVZfREFYKSArPSBkZXZpY2VfZGF4Lm9cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MzY6b2JqLSQoQ09ORklHX0RFVl9EQVhfUE1FTSkgKz0gZGF4X3BtZW0ub1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0zNy1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jPTQ9dm9pZCBjaGVjayh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmMtMTUtXFx0XFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0FDUElfTkZJVCkpO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jOjE2OlxcdEJVSUxEX0JVR19PTighSVNfTU9EVUxFKENPTkZJR19ERVZfREFYKSk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vY29uZmlnX2NoZWNrLmM6MTc6XFx0QlVJTERfQlVHX09OKCFJU19NT0RVTEUoQ09ORklHX0RFVl9EQVhfUE1FTSkpO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL2NvbmZpZ19jaGVjay5jLTE4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6MTpDT05GSUdfREVWX0RBWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZzoyOkNPTkZJR19ERVZfREFYX0tNRU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWctMy1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTowNi4zODIyNTU5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcxMjc0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBNZW1vcnkgSG90cGx1ZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gSG1tLCBnaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBtZW1vcnktcmVsYXRlZCBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBJJ2xsIGRlbHZlIGludG8gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgcGVyZm9ybWFuY2UgYmVuY2htYXJrcyB0byBncmFzcCBob3cgdGhlc2UgZmVhdHVyZXMgaW1wYWN0IG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBIb3cgZG8gdGhleSBpbnRlcmFjdD8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToxMS4xNTM1NDAyNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTc5MjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1PUllfSE9UUkVNT1ZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzNj1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozNzg6XFx0XFx0ICAgIEF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM3OS1cXHRcXHQgICAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xMzE9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjEzMjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xMzMtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTIyNDE9c3RhdGljIGludCBfX2luaXQgcHJldmVudF9tZW1vcnlfcmVtb3ZlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjI0NC1cXG5hcmNoL2FybTY0L21tL21tdS5jOjIyNDU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSlcXG5hcmNoL2FybTY0L21tL21tdS5jLTIyNDYtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTAxPUNPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUTz15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwMy0jIENPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfTU9WQUJMRSBpcyBub3Qgc2V0XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMDQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTA1LUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0xMTY9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTE4LSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjExOTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMjAtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZz01OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjU5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy02MC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz04OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTkwLUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9MjIyPXN0YXRpYyBpbnQgZGxwYXJfb25saW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy0yMjYtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM6MjI3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTIyOC1zdGF0aWMgaW50IGRscGFyX29mZmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU1OD1zdGF0aWMgaW50IGRscGFyX21lbW9yeV9yZW1vdmVfYnlfaWModTMyIGxtYnNfdG9fcmVtb3ZlLCB1MzIgZHJjX2luZGV4KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYxLX1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtNTYzLVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwMT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMDI6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xMDMtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9OTQ9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6OTU6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy05Ni1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MjcwPWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmMtMzE2LX1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMxNzojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTU9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDAtXFx0LypcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MDE6XFx0ICogSWYgbm8gaW1tb3ZhYmxlIG1lbW9yeSBmb3VuZCwgb3IgTUVNT1JZX0hPVFJFTU9WRSBkaXNhYmxlZCxcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MDItXFx0ICogdXNlIEByZWdpb24gZGlyZWN0bHkuXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTMtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NjE0OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTYxNS1cXHQvKlxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaD0xNzE9c3RhdGljIGlubGluZSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgZ2V0X3JzZHBfYWRkcih2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE3NDojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FDUEkpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTE2Nz1zdGF0aWMgc3NpemVfdCBwaHlzX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3Ni0gKiBMZWdhY3kgaW50ZXJmYWNlIHRoYXQgd2UgY2Fubm90IHJlbW92ZS4gQWx3YXlzIGluZGljYXRlIFxcXCJyZW1vdmFibGVcXFwiXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjE3NzogKiB3aXRoIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIC0gYmFkIGhldXJpc3RpYy5cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc4LSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODEte1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIChpbnQpSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTQ1MD1zdGF0aWMgc3NpemVfdCBwaHlzX2RldmljZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00NTktXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQ2MDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02NzE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9tZW1ibGtfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzUtXFx0XFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2NzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3Ny1cXHRcXHUwMDI2ZGV2X2F0dHJfdmFsaWRfem9uZXMuYXR0cixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjIwMTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjAyLS8qKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTI2MT1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjUtfVxcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZHJpdmVycy9kYXgva21lbS5jLTI2Ny1cXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDg5LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0OTA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9kYXgva21lbS5jLTQ5MS1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTUzMT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU0NS19XFxuZHJpdmVycy9kYXgva21lbS5jOjU0NjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTQ3LVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xMjM9Y29uZmlnIFZJUlRJT19NRU1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjEyODpcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTEyOS1cXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMzkyLVxcdFxcdFxcdFxcdHJlc291cmNlX3NpemVfdCk7XFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTQtZXh0ZXJuIHZvaWQgcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUocmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjItXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI4OT1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yOTMtfVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTQ6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI5NS1cXG4tLVxcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnOjE2OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnLTE3LUNPTkZJR19aT05FX0RFVklDRT15XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0xNDQ2PUVYUE9SVF9TWU1CT0woX19yZWxlYXNlX3JlZ2lvbik7XFxua2VybmVsL3Jlc291cmNlLmMtMTQ0Ny1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDktc3RhdGljIHZvaWQgYXBwZW5kX2NoaWxkX3RvX3BhcmVudChzdHJ1Y3QgcmVzb3VyY2UgKm5ld19wYXJlbnQsIHN0cnVjdCByZXNvdXJjZSAqbmV3X2NoaWxkKVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYy0xNTk2LX1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxua2VybmVsL3Jlc291cmNlLmMtMTU5OC1cXG4tLVxcbm1tL0tjb25maWc9NTM2PWVuZGNob2ljZVxcbm1tL0tjb25maWctNTM3LVxcbm1tL0tjb25maWc6NTM4OmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01MzktXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTgzPWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMTg1LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjExODY6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy0xMTg3LVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL2tzbS5jPTMyNjk9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzI5Mi1cXG5tbS9rc20uYzozMjkzOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL2tzbS5jLTMyOTQtc3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jPTM0MTc9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jLTM0MTktfVxcbm1tL2tzbS5jOjM0MjA6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxubW0va3NtLmMtMzQyMS1cXG4tLVxcbm1tL2tzbS5jPTM5Nzc9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcXG4tLVxcbm1tL2tzbS5jLTQwMDktXFxubW0va3NtLmM6NDAxMDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5tbS9rc20uYy00MDExLVxcdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzcxPWJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg0OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4NS0vKlxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTI1PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI1MjY6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDM3ND1zdGF0aWMgdW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfYmVnaW4odm9pZClcXG5tbS9wYWdlX2FsbG9jLmMtNDM3NS17XFxubW0vcGFnZV9hbGxvYy5jOjQzNzY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzc3LVxcdFxcdHJldHVybiByZWFkX3NlcWJlZ2luKFxcdTAwMjZ6b25lbGlzdF91cGRhdGVfc2VxKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgyPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfcmV0cnlfem9uZWxpc3QodW5zaWduZWQgaW50IHNlcSlcXG5tbS9wYWdlX2FsbG9jLmMtNDM4My17XFxubW0vcGFnZV9hbGxvYy5jOjQzODQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg1LVxcdFxcdHJldHVybiByZWFkX3NlcXJldHJ5KFxcdTAwMjZ6b25lbGlzdF91cGRhdGVfc2VxLCBzZXEpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc1MTc9dm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NTM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3NTM2OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL3BhZ2VfYWxsb2MuYy03NTM3LS8qXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ9OTA9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ6OTE6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NC05Mi1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4PTc2PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweDo3NzpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweC03OC1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnPTM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnPTM9Q09ORklHX01FTU9SWV9OT1RJRklFUl9FUlJPUl9JTkpFQ1Q9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZzo0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92c29jay9jb25maWc6MTEwOkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92c29jay9jb25maWctMTExLUNPTkZJR19aT05FX0RFVklDRT15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjEzLjM5MzMzOTM1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzc5NDI2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgREFYIEtNRU0gSG90cGx1ZyBhbmQgSG90cmVtb3ZlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVmaW5lIHRoaXMgREFYIEtNRU0gZnVuY3Rpb25hbGl0eTogYERFVl9EQVhgLCBgREVWX0RBWF9LTUVNYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC4gIEdvdCBpdC4gTm93IEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBob3RwbHVnIGFuZCBob3RyZW1vdmUgcHJvY2VzcyBmb3IgREFYIEtNRU0uIEkndmUgY29tcGlsZWQgYSBsaXN0OiBgZGF4X2ttZW1fZG9faG90cGx1Z2AsIGBkYXhfa21lbV9pbml0X3Jlc291cmNlc2AsIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgLCBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgLCBgc3RhdGVfc2hvd2AsIGBzdGF0ZV9zdG9yZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC5cblxuUmlnaHQsIGxldCdzIHF1aWNrbHkgY2hlY2sgZnVuY3Rpb24gdmlzaWJpbGl0eS4gYGRheF9rbWVtX2RvX2hvdHBsdWdgIGlzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGlzIGNvbXBvbmVudC4gYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGAgYW5kIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AgYXJlIGV4cG9ydGVkLCB3aGljaCBpbXBsaWVzIHRoZXkgYXJlIGxpa2VseSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIGBzdGF0ZV9zdG9yZWAgYW5kIGBkZXZfZGF4X2ttZW1fcHJvYmVgIGFyZSBhbHNvIHN0YXRpYywgc28gaW50ZXJuYWwgdG8gdGhpcyBrbWVtIGltcGxlbWVudGF0aW9uLiBOb3cgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgY29kZSB3aXRoaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AgdG8gc2VlIGlmIEkgbWlzc2VkIGFueSBmdW5jdGlvbiBuYW1lcy4gQWx3YXlzIHdvcnRoIGEgbG9vayB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToxOS4wNzEyODU1NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjY1MjA2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGRheF9rbWVtX2RvX2hvdHBsdWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTczPXN0YXRpYyBib29sIGRheF9rbWVtX3N0YXRlX2lzX29ubGluZShpbnQgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtOTAtICovXFxuZHJpdmVycy9kYXgva21lbS5jOjkxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtOTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOToyMi4yOTc4MTM1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDkxNjkwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBzdGF0ZV9zdG9yZWAgaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2AqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBgc3RhdGVfc3RvcmVgIGZ1bmN0aW9uIHJlc2lkZXMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvZGF4L2ttZW0uY2AgZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgREFYIGFuZCBrbWVtLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaG93IGl0cyBzdGF0ZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLCB3aGljaCBpcyB0aGUgY3J1eCBvZiB0aGUgRGlyZWN0IEFjY2VzcyAoREFYKSBpbXBsZW1lbnRhdGlvbiBmb3Iga2VybmVsIG1lbW9yeS4gSSdtIGd1ZXNzaW5nIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGluZ3MgbGlrZSBwb3dlciBzdGF0ZSwgZXJyb3Igc3RhdGUsIG9yIHBlcmhhcHMgZXZlbiBwcm92aXNpb25pbmcvZGVwcm92aXNpb25pbmcgb2YgREFYLW1hbmFnZWQgbWVtb3J5IHJlZ2lvbnMuIFRpbWUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIERBWCBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ3NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjMwLjc4OTUwNzg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNzIwNDc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogc3RhdGVfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTM5ND1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDAzLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDA1LVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM9MTk9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmMtMzAtXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3lzZnMuYy0zMi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zMTY9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzMyLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozMzM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzM0LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9ncmV5YnVzL2J1bmRsZS5jPTMwPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvZ3JleWJ1cy9idW5kbGUuYy00MC1cXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmM6NDE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2dyZXlidXMvYnVuZGxlLmMtNDItXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jPTQyPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmMtNTItXFxuZHJpdmVycy9yZWd1bGF0b3IvdXNlcnNwYWNlLWNvbnN1bWVyLmM6NTM6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYy01NC1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM9MTc4PXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmMtMTg4LS8qIENoYW5nZSByZW1vdGUgcHJvY2Vzc29yIHN0YXRlIHZpYSBzeXNmcyAqL1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3N5c2ZzLmM6MTg5OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19zeXNmcy5jLTE5MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmM9MjQ0PXZvaWQgYXBiX2N0cmxfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYy0yNDgtXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtYXBiLWN0cmwuYzoyNDk6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLWFwYi1jdHJsLmMtMjUwLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL2dyZXlidXMvYXJjaGUtcGxhdGZvcm0uYz0yODE9YXJjaGVfcGxhdGZvcm1fcG93ZXJvZmZfc2VxKHN0cnVjdCBhcmNoZV9wbGF0Zm9ybV9kcnZkYXRhICphcmNoZV9wZGF0YSlcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmMtMzA1LVxcbmRyaXZlcnMvc3RhZ2luZy9ncmV5YnVzL2FyY2hlLXBsYXRmb3JtLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3N0YWdpbmcvZ3JleWJ1cy9hcmNoZS1wbGF0Zm9ybS5jLTMwNy1cXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmM9NzcyPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTc5OC1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjc5OTpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbmtlcm5lbC9wb3dlci9tYWluLmMtODAwLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4MC1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzODE6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODItXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5uZXQvcmZraWxsL2NvcmUuYz04MDg9c3RhdGljIHNzaXplX3Qgc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L3Jma2lsbC9jb3JlLmMtODE5LVxcbm5ldC9yZmtpbGwvY29yZS5jOjgyMDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbm5ldC9yZmtpbGwvY29yZS5jLTgyMS1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6MzQuMzA2NzIwNzQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzUxOTcxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgRHluYW1pYyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBEQVgga21lbSwgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYmVzdCBvbmVzIHRvIGluc3RydW1lbnQgZm9yIGR5bmFtaWMgYW5hbHlzaXMuIEkndmUgaW5pdGlhbGx5IGlkZW50aWZpZWQgYSBsaXN0LCBidXQgSSBuZWVkIHRvIHJlZmluZSBpdCB0byBlbnN1cmUgZWZmZWN0aXZlIGNvdmVyYWdlIGFuZCBhdm9pZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuRmlyc3QsIGxldCdzIGdvIG92ZXIgdGhlIGNhbmRpZGF0ZXM6IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFuZCBgc3RhdGVfc3RvcmVgICggc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvZGF4L2ttZW0uY2ApLCBhbG9uZyB3aXRoIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgIGFuZCBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgLlxuXG5Ob3csIHRoZSBjb25jZXJuIGlzIHRoYXQgYHN0YXRlX3N0b3JlYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIFN0YXRpYyBmdW5jdGlvbnMgd2l0aCBjb21tb24gbmFtZXMgbGlrZSB0aGF0IGFyZSBhIHJlZCBmbGFnLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyBpdCBjb3JyZWN0bHksIG9yLCB3b3JzZSwgaXQgbWlnaHQgaW5zdHJ1bWVudCAqZXZlcnkqIGBzdGF0ZV9zdG9yZWAgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCwgbGVhZGluZyB0byBtYXNzaXZlIG5vaXNlIGFuZCBwb3RlbnRpYWxseSBza2V3ZWQgcmVzdWx0cy4gVGhhdCdzIGEgd2FzdGUgb2YgdGltZS4gSSBuZWVkIHNwZWNpZmljaXR5LiBJJ20gYWltaW5nIGZvciB1bmlxdWUgZW50cnkgcG9pbnRzLlxuXG5TbywgZGl0Y2hpbmcgYHN0YXRlX3N0b3JlYCBhcyB0aGUgcHJpbWFyeSBmb2N1cywgSSBzaG91bGQgY2hvb3NlIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzLiBJIHRoaW5rIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgb3IgYGRheF9rbWVtX2RvX2hvdHBsdWdgIHdvdWxkIGJlIGJldHRlciBjaG9pY2VzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgbGl0dGxlIHJlZmluZW1lbnQsIEkgd2FudCB0byB1c2UgdGhpcyBsaXN0IGFzIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHM6XG4tIGBkYXhfa21lbV9kb19ob3RwbHVnYFxuLSBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgXG4tIGBkYXhfa21lbV9kb19ob3RyZW1vdmVgXG4tIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2Bcbi0gYGRheF9rbWVtX3BhcnNlX3N0YXRlYFxuLSBgZGV2X2RheF9rbWVtX3Byb2JlYFxuLSBgZGV2X2RheF9rbWVtX3JlbW92ZWBcbi0gYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGBcbi0gYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYFxuXG5JJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAgaXMgYWN0dWFsbHkgd2hhdCBJIHRoaW5rIGl0IGlzLiBPa2F5LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6NDcuMDU4Njk1MjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI1ODg1Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz0yNzU9c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzAwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozMDE6c3RhdGljIGludCBkYXhfa21lbV9wYXJzZV9zdGF0ZShjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9kYXgva21lbS5jLTMwMi17XFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzQzLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozNDQ6XFx0b25saW5lX3R5cGUgPSBkYXhfa21lbV9wYXJzZV9zdGF0ZShidWYpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNDUtXFx0aWYgKG9ubGluZV90eXBlIFxcdTAwM2MgREFYX0tNRU1fVU5QTFVHR0VEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTo0OS40ODQ2MDI1MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjM1MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGRpcmVjdCwgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyBQcmVzZW5jZSoqXG5cblJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRheF9rbWVtX2RvX2hvdHBsdWdgLiBJdCdzIGNydWNpYWwgZm9yIG15IG5leHQgc3RlcCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVsZXZhbnQsIGJ1dCBiZXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE5OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjE5OjUzLjI3Njk1ODE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjMxMDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9kb19ob3RwbHVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz03Mz1zdGF0aWMgYm9vbCBkYXhfa21lbV9zdGF0ZV9pc19vbmxpbmUoaW50IHN0YXRlKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTgwLS8qKlxcbmRyaXZlcnMvZGF4L2ttZW0uYzo4MTogKiBkYXhfa21lbV9kb19ob3RwbHVnIC0gaG90cGx1ZyBtZW1vcnkgZm9yIGRheCBrbWVtIGRldmljZVxcbmRyaXZlcnMvZGF4L2ttZW0uYy04Mi0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy05MC0gKi9cXG5kcml2ZXJzL2RheC9rbWVtLmM6OTE6c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy05Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzMzPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMzcwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzozNzE6XFx0cmMgPSBkYXhfa21lbV9kb19ob3RwbHVnKGRldl9kYXgsIGRhdGEsIG9ubGluZV90eXBlKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzcyLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTQ2NC1cXHQvKiBBbHdheXMgY3JlYXRlIGJsb2NrcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZXZlbiBpZiBvZmZsaW5lICovXFxuZHJpdmVycy9kYXgva21lbS5jOjQ2NTpcXHRyYyA9IGRheF9rbWVtX2RvX2hvdHBsdWcoZGV2X2RheCwgZGF0YSwgb25saW5lX3R5cGUpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy00NjYtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MTk6NTUuNTk5Mjc3MDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzg1MzY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIEV4aXN0ZW5jZSBhbmQgUHJvY2VlZGluZyB3aXRoIFZlcmlmaWNhdGlvbioqXG5cblllcywgSSBrbm93IHRoaXMgaXMgcmVhbCwgdGhlIGNvbmNlcHQgaXMgdmFsaWQuIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGFjdHVhbGx5IGV4aXN0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBkZWZpbmVkIGFuZCBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIG9yIHJlbGV2YW5jZSB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqdGhlcmUqIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byAqd2hhdCogaXQgZG9lcy4gU28sIGxldCdzIGNoZWNrIGl0cyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3ODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToxOTo1OC44Mzc4MTY4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjY1MzgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2ttZW1fZG9faG90cmVtb3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGF4L2ttZW0uYz0xNTY9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDItLyoqXFxuZHJpdmVycy9kYXgva21lbS5jOjIwMzogKiBkYXhfa21lbV9kb19ob3RyZW1vdmUgLSBob3QtcmVtb3ZlIG1lbW9yeSBmb3IgZGF4IGttZW0gZGV2aWNlXFxuZHJpdmVycy9kYXgva21lbS5jLTIwNC0gKiBAZGV2X2RheDogdGhlIGRldl9kYXggaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMTItICovXFxuZHJpdmVycy9kYXgva21lbS5jOjIxMzpzdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjE0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF4X2ttZW1fZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjAtI2Vsc2VcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjYxOnN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNjItXFx0XFx0XFx0XFx0IHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM1NC1cXHRpZiAob25saW5lX3R5cGUgPT0gREFYX0tNRU1fVU5QTFVHR0VEKSB7XFxuZHJpdmVycy9kYXgva21lbS5jOjM1NTpcXHRcXHRyYyA9IGRheF9rbWVtX2RvX2hvdHJlbW92ZShkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMzU2LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTAtXFx0fSBlbHNlIGlmIChkYXRhLVxcdTAwM2VzdGF0ZSA9PSBNTU9QX09GRkxJTkUgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2RheC9rbWVtLmM6NTExOlxcdCAgICBkYXhfa21lbV9kb19ob3RyZW1vdmUoZGV2X2RheCwgZGF0YSkpIHtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTEyLVxcdFxcdGRldl93YXJuKGRldiwgXFxcIlVucGx1ZyBmYWlsZWQsIHJlc291cmNlcyBsZWFrZWQgdW50aWwgcmVib290XFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MDEuMDY0MzY2MDQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTg4MTc0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBrbm93IHRoaXMgY29uY2VwdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgaW4gcGxheS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIHRoaW5nIGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIExldCBtZSBqdXN0IGNoZWNrIGlmIHRoZSBgX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGV4aXN0cyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGZyYW1ld29yay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIG1lbW9yeSBkcml2ZXIgaXMgbWFuYWdlZC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjA0LjI4MzE4NjU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMTQ4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTkxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cGx1ZyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xMTktXFx0XFx0ICovXFxuZHJpdmVycy9kYXgva21lbS5jOjEyMDpcXHRcXHRyYyA9IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChkYXRhLVxcdTAwM2VtZ2lkLCByYW5nZS5zdGFydCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTIxLVxcdFxcdFxcdFxcdHJhbmdlX2xlbihcXHUwMDI2cmFuZ2UpLCBrbWVtX25hbWUsIG1ocF9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0zMDM9ZXh0ZXJuIGludCBhZGRfbWVtb3J5X3Jlc291cmNlKGludCBuaWQsIHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTMwNC1cXHRcXHRcXHQgICAgICAgbWhwX3QgbWhwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MzA1OmludCBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMzA2LVxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlc291cmNlX25hbWUsIG1ocF90IG1ocF9mbGFncyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTYzOD1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY0MC0vKipcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NDE6ICogX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkIC0gYWRkIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZV90eXBlXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjQyLSAqIEBuaWQ6IE5VTUEgbm9kZSBJRCB3aGVyZSB0aGUgbWVtb3J5IHdpbGwgYmUgYWRkZWRcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3MS0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2NzI6aW50IF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY3My1cXHRcXHRjb25zdCBjaGFyICpyZXNvdXJjZV9uYW1lLCBtaHBfdCBtaHBfZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDItfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcwMzpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCwgXFxcImttZW1cXFwiKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MDQtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MTUtICpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3MTY6ICogU2VlIF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZCBmb3IgbW9yZSBkZXRhaWxzLlxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTcxNy0gKlxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzIwPWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3MjIte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTcyMzpcXHRyZXR1cm4gX19hZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKG5pZCwgc3RhcnQsIHNpemUsIHJlc291cmNlX25hbWUsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNzI0LVxcdFxcdFxcdG1ocF9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MDYuNDE0NjczNDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU5NTM1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipJbnRlcm5hbCBDb2RlIENoZWNrKipcblxuUmlnaHQsIEkndmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHByZW1pc2Ug4oCTIGl0ICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBhbmQgcGFydGljdWxhcmx5IGJlZm9yZSBJIHN0YXJ0IG1hbmlwdWxhdGluZyBvciByZWx5aW5nIG9uIGFueSBwb3RlbnRpYWxseSBkZWxpY2F0ZSBtZW1vcnkgcmFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24sIGBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlc2AsIGlzIGluZGVlZCBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGVyZSdzIG5vIHBvaW50IGluIGNvbnRpbnVpbmcgZG93biB0aGlzIHBhdGggaWYgdGhhdCBjb3JlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgcHJlc2VudC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4gSSB3aWxsIG5vdCBwcm9jZWVkIHdpdGhvdXQgYmVpbmcgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MjYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToyMDowOS42MzA2Mjg5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTYyNjY2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kYXgva21lbS5jPTIxMz1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNDAtXFxuZHJpdmVycy9kYXgva21lbS5jOjI0MTpcXHRyYyA9IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKHJhbmdlcywgbnJfcmFuZ2VzKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjQyLVxcdGtmcmVlKHJhbmdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcwPWV4dGVybiBpbnQgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6MjcxOmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3Jhbmdlcyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yODc9c3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKSB7fVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yODgtXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI4OTpzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBucl9yYW5nZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzA9aW50IG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSlcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjQzMy1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI0MzQ6XFx0cmV0dXJuIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKFxcdTAwMjZyYW5nZSwgMSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNDM1LX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI0MzY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0MzgtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDM5OiAqIG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzIC0gb2ZmbGluZSBhbmQgcmVtb3ZlIG11bHRpcGxlIG1lbW9yeSByYW5nZXNcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NDAtICogQHJhbmdlczogYXJyYXkgb2YgcGh5c2ljYWwgYWRkcmVzcyByYW5nZXMgdG8gb2ZmbGluZSBhbmQgcmVtb3ZlXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTQtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyNDU1OmludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcywgaW50IG5yX3JhbmdlcylcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI0NTYte1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yNTI0LX1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjI1MjU6RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjUyNi0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTU6MjA6MTEuNjg2OTA1OTc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTExMTE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFYIEtNRU0gSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlIGhhdmUgY29uZmlybWF0aW9uLiBUaGlzIERBWCBLTUVNIHRoaW5nIGlzIGEgcmVhbCB0aGluZywgaXQgZG9lcyBleGlzdC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgc3ltYm9scy4gSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBob3RwbHVnIGZ1bmN0aW9uYWxpdHk6XG5cbiogICBgZGF4X2ttZW1fZG9faG90cGx1Z2BcbiogICBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgXG4qICAgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWBcbiogICBgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNgXG4qICAgYGRheF9rbWVtX3BhcnNlX3N0YXRlYFxuKiAgIGBkZXZfZGF4X2ttZW1fcHJvYmVgXG4qICAgYGRldl9kYXhfa21lbV9yZW1vdmVgXG4qICAgYF9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZGBcbiogICBgb2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNgXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxhdGVkIHRvIERBWCBLTUVNLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZ2AuIEl0IGxvb2tzIGxpa2UgdGhlc2UgY29uZmlncyBhcmUgdGhlIG9uZXMgd2UgbmVlZDpcblxuYGBgXG5DT05GSUdfREVWX0RBWD1tXG5DT05GSUdfREVWX0RBWF9LTUVNPW1cbkNPTkZJR19NRU1PUllfSE9UUExVRz15XG5DT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5gYGBcblxuSSdsbCBwcm9jZWVkIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGFuZCB2ZXJpZnlpbmcgdGhlIGV4aXN0ZW5jZSBvZiBgZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNgLiBUaGlzIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Mjk3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjE3Ljg5ODAyMTE1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTEzMzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9pbml0X3Jlc291cmNlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9OTE9c3RhdGljIGludCBkYXhfa21lbV9kb19ob3RwbHVnKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTE0Ny0vKipcXG5kcml2ZXJzL2RheC9rbWVtLmM6MTQ4OiAqIGRheF9rbWVtX2luaXRfcmVzb3VyY2VzIC0gY3JlYXRlIG1lbW9yeSByZWdpb25zIGZvciBkYXgga21lbVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0xNDktICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMTU1LSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzoxNTY6c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG5kcml2ZXJzL2RheC9rbWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYXhfa21lbV9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTMzMz1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTM2Ni1cXHQvKiBSZS1hY3F1aXJlIHJlc291cmNlcyBpZiBwcmV2aW91c2x5IHVucGx1Z2dlZCwgb3RoZXJ3aXNlIG5vLW9wICovXFxuZHJpdmVycy9kYXgva21lbS5jOjM2NzpcXHRyYyA9IGRheF9rbWVtX2luaXRfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0zNjgtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODA9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDU0LVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0NTU6XFx0cmMgPSBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNDU2LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjE5LjkxNzE5NjI4NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE3OTA4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBhbmQga2VlcGluZyBpdCBjb25jaXNlIGFuZCByZWxldmFudDpcblxuKipDb25maXJtaW5nIGFuZCBWZXJpZnlpbmcgRnVuY3Rpb24gRXhpc3RlbmNlKipcblxuWWVzLCB0aGF0IGNydWNpYWwgZWxlbWVudCBpcyBpbmRlZWQgcHJlc2VudC4gTm93LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY29uZmlybSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBJIHJlcXVpcmUsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hlY2sgSSBjYW4ndCBza2lwIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjI0LjczNTEwODE2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTc1MjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9rbWVtLmM9MjYxPXN0YXRpYyBpbnQgZGF4X2ttZW1fZG9faG90cmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTI2OC0vKipcXG5kcml2ZXJzL2RheC9rbWVtLmM6MjY5OiAqIGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzIC0gcmVtb3ZlIHRoZSBkYXggbWVtb3J5IHJlc291cmNlc1xcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzAtICogQGRldl9kYXg6IHRoZSBkZXZfZGF4IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LSAqL1xcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzU6c3RhdGljIHZvaWQgZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXFxuZHJpdmVycy9kYXgva21lbS5jLTI3Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRheF9rbWVtX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9rbWVtX3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTQ3Ni1lcnJfaG90cGx1ZzpcXG5kcml2ZXJzL2RheC9rbWVtLmM6NDc3OlxcdGRheF9rbWVtX2NsZWFudXBfcmVzb3VyY2VzKGRldl9kYXgsIGRhdGEpO1xcbmRyaXZlcnMvZGF4L2ttZW0uYy00NzgtZXJyX3Jlc291cmNlczpcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz00OTE9c3RhdGljIHZvaWQgZGV2X2RheF9rbWVtX3JlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy01MTUtXFxuZHJpdmVycy9kYXgva21lbS5jOjUxNjpcXHRkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlcyhkZXZfZGF4LCBkYXRhKTtcXG5kcml2ZXJzL2RheC9rbWVtLmMtNTE3LVxcdG1lbW9yeV9ncm91cF91bnJlZ2lzdGVyKGRhdGEtXFx1MDAzZW1naWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNToyMDoyNi43MDA4NjY0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA1NDYyODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSBjYW4gY29uZmlybSwgKnllcyosIHRoaXMgd2FycmFudHMgbXkgYXR0ZW50aW9uLiBJdCBpbnRyb2R1Y2VzIG1vZGlmaWNhdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBhY3QgY3J1Y2lhbCBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBEQVgga21lbSBkcml2ZXIgYW5kIHRoZSBtZW1vcnkgaG90cGx1ZyBzdWJzeXN0ZW0uXG5cblRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEkgc2VlIGl0J3MgYWRkZWQgYSBuZXcgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlICdzdGF0ZScgaW50ZXJmYWNlIGZvciBEQVgga21lbSBkZXZpY2VzLCB3aGljaCBtZWFucyB3ZSBub3cgaGF2ZSB0aGUgYWJpbGl0eSB0byBjb250cm9sIG1lbW9yeSByZWdpb24gc3RhdGVzICh1bnBsdWdnZWQsIG9ubGluZSwgZXRjLikgZGlyZWN0bHkuIEZ1cnRoZXIsIHRoZSBwYXRjaCBnb2VzIGV2ZW4gZnVydGhlciwgYW5kIG1vZGlmaWVzIHRoZSBtZW1vcnkgaG90cGx1ZyBzeXN0ZW0gdG8gaGFuZGxlIGRyaXZlci1tYW5hZ2VkIG1lbW9yeSEgVGhhdCBhbG9uZSBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2Ugd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuXG5cbkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHRoaXMgY2xlYXJseSBwcmVzZW50cyBzZXZlcmFsIGtleSBhcmVhcyB0aGF0IGNvdWxkIGJlIHRhcmdldGVkIGZvciBmdXp6aW5nLiBJJ2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgZnV6emluZywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBkYXhfa21lbV9kb19ob3RwbHVnYCwgYGRheF9rbWVtX2luaXRfcmVzb3VyY2VzYCwgYGRheF9rbWVtX2RvX2hvdHJlbW92ZWAsIGBkYXhfa21lbV9jbGVhbnVwX3Jlc291cmNlc2AsIGBkYXhfa21lbV9wYXJzZV9zdGF0ZWAsIGBkZXZfZGF4X2ttZW1fcHJvYmVgLCBgZGV2X2RheF9rbWVtX3JlbW92ZWAsIGBfX2FkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWRgLCBhbmQgYG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzYC5cblxuQW5kIEknbGwgYmUgc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlc2UgY29uZmlncyBzZXQ6IGBERVZfREFYYCwgYERFVl9EQVhfS01FTWAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZXNlIGFyZSBrZXksIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGV5IGRlZmluZSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIG5ld2x5IGludHJvZHVjZWQgY29kZSBvcGVyYXRlcy5cblxuVGhpcyBpcyBhIHdlbGwtZGVmaW5lZCBzZXQgb2YgY2hhbmdlcywgaW50cm9kdWNpbmcgbmV3IHBhdGh3YXlzIGFuZCBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcywgc28gaXQncyByaXBlIGZvciBmdXp6ZXIgYXR0ZW50aW9uLiBJdCBpcyBhIGdvb2QgdGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MjYsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE1OjIwOjM5Ljc1NTQ5NjYyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDk4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJERVZfREFYX0tNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ttZW1fZG9faG90cGx1Z1wiLFxuICAgIFwiZGF4X2ttZW1faW5pdF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX2RvX2hvdHJlbW92ZVwiLFxuICAgIFwiZGF4X2ttZW1fY2xlYW51cF9yZXNvdXJjZXNcIixcbiAgICBcImRheF9rbWVtX3BhcnNlX3N0YXRlXCIsXG4gICAgXCJkZXZfZGF4X2ttZW1fcHJvYmVcIixcbiAgICBcImRldl9kYXhfa21lbV9yZW1vdmVcIixcbiAgICBcIl9fYWRkX21lbW9yeV9kcml2ZXJfbWFuYWdlZFwiLFxuICAgIFwib2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNmcyBpbnRlcmZhY2UgKGBzdGF0ZWApIGZvciBEQVgga21lbSBkZXZpY2VzIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSByZWdpb24gc3RhdGUgKHVucGx1Z2dlZCwgb25saW5lLCBvbmxpbmVfa2VybmVsLCBvbmxpbmVfbW92YWJsZSkuIEl0IGFsc28gbW9kaWZpZXMgdGhlIG1lbW9yeSBob3RwbHVnIHN1YnN5c3RlbSB0byBzdXBwb3J0IGRyaXZlci1tYW5hZ2VkIG1lbW9yeSB3aXRoIGV4cGxpY2l0IG9ubGluZSB0eXBlcyBhbmQgYXRvbWljIGhvdC1yZW1vdmFsIG9mIG11bHRpcGxlIG1lbW9yeSByYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[1] Phase: Succeeded StartedAt: 2026-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 15:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 15:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2] Phase: Succeeded StartedAt: 2026-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 15:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:20:51 +0000 UTC FinishedAt: 2026-06-24 15:20:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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-workflownmk6q/series-workflownmk6q-convert-artifact-1123123261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:21:01 +0000 UTC FinishedAt: 2026-06-24 15:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:21:01 +0000 UTC FinishedAt: 2026-06-24 15:47:23 +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:*954bed1b-506b-40b3-9a6e-a5d4228d1d83,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-workflownmk6q/series-workflownmk6q-convert-artifact-1123123261/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": "21a06d0c-4502-4deb-8b6b-c0a3414c70db", "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-workflownmk6q/series-workflownmk6q-build-action-1699391859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:21:01 +0000 UTC FinishedAt: 2026-06-24 15:47:13 +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:*954bed1b-506b-40b3-9a6e-a5d4228d1d83,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-workflownmk6q/series-workflownmk6q-convert-artifact-1123123261/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": "21a06d0c-4502-4deb-8b6b-c0a3414c70db", "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-workflownmk6q/series-workflownmk6q-build-action-1699391859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:23 +0000 UTC FinishedAt: 2026-06-24 15:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:23 +0000 UTC FinishedAt: 2026-06-24 15:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:23 +0000 UTC FinishedAt: 2026-06-24 15:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:23 +0000 UTC FinishedAt: 2026-06-24 15:47:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-workflownmk6q/series-workflownmk6q-convert-artifact-1955539864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:33 +0000 UTC FinishedAt: 2026-06-24 15:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:47:33 +0000 UTC FinishedAt: 2026-06-24 15:49:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21a06d0c-4502-4deb-8b6b-c0a3414c70db,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-workflownmk6q/series-workflownmk6q-build-action-1699391859/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-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:49:49 +0000 UTC FinishedAt: 2026-06-24 15:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:49:49 +0000 UTC FinishedAt: 2026-06-24 15:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:49:49 +0000 UTC FinishedAt: 2026-06-24 16:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:49:49 +0000 UTC FinishedAt: 2026-06-24 16:10:12 +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:*954bed1b-506b-40b3-9a6e-a5d4228d1d83,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-workflownmk6q/series-workflownmk6q-convert-artifact-1955539864/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": "8497828b-fbdc-416d-8388-e764b68ea3f8", "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-workflownmk6q/series-workflownmk6q-build-action-218268676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 15:49:49 +0000 UTC FinishedAt: 2026-06-24 16:10: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:*954bed1b-506b-40b3-9a6e-a5d4228d1d83,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-workflownmk6q/series-workflownmk6q-convert-artifact-1955539864/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": "8497828b-fbdc-416d-8388-e764b68ea3f8", "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-workflownmk6q/series-workflownmk6q-build-action-218268676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:10:12 +0000 UTC FinishedAt: 2026-06-24 16:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:10:12 +0000 UTC FinishedAt: 2026-06-24 16:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:10:12 +0000 UTC FinishedAt: 2026-06-24 16:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:10:12 +0000 UTC FinishedAt: 2026-06-24 16:11:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8497828b-fbdc-416d-8388-e764b68ea3f8,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-workflownmk6q/series-workflownmk6q-build-action-218268676/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-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"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:*21a06d0c-4502-4deb-8b6b-c0a3414c70db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8497828b-fbdc-416d-8388-e764b68ea3f8,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-workflownmk6q/series-workflownmk6q-build-action-1699391859/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-workflownmk6q/series-workflownmk6q-build-action-218268676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 16:11:59 +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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"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-workflownmk6q/series-workflownmk6q-convert-artifact-1028475505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 16:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 16:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:11:53 +0000 UTC FinishedAt: 2026-06-24 16:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:12:03 +0000 UTC FinishedAt: 2026-06-24 19:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownmk6q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","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_init_resources","dax_kmem_do_hotremove","dax_kmem_cleanup_resources","dax_kmem_parse_state","dev_dax_kmem_probe","dev_dax_kmem_remove","__add_memory_driver_managed","offline_and_remove_memory_ranges"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEV_DAX","DEV_DAX_KMEM","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"1f06fb13-e5f6-49c2-8f02-5240b7e057e5","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-06-24 16:12:03 +0000 UTC FinishedAt: 2026-06-24 19:13:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21a06d0c-4502-4deb-8b6b-c0a3414c70db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8497828b-fbdc-416d-8388-e764b68ea3f8,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-workflownmk6q/series-workflownmk6q-build-action-1699391859/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-workflownmk6q/series-workflownmk6q-build-action-218268676/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-workflownmk6q/series-workflownmk6q-convert-artifact-1028475505/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,}