Name: series-workflowkwd24 Phase: Succeeded StartedAt: 2026-09-09 12:29:16 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[0] Phase: Succeeded StartedAt: 2026-09-09 12:29:16 +0000 UTC FinishedAt: 2026-09-09 12:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 12:29:16 +0000 UTC FinishedAt: 2026-09-09 12:49:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd660a0e0fee1bc892e16fdb6abdf92676515175", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd660a0e0fee1bc892e16fdb6abdf92676515175", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLOCK" ], "series_id": "8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__loop_clr_fd", "lo_release", "lo_post_release", "loop_clr_fd", "bdev_release", "loop_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGFuZCBkZWFkbG9jayBpc3N1ZSBkdXJpbmcgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24uIEl0IGludHJvZHVjZXMgYSBgcG9zdF9yZWxlYXNlYCBob29rIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCBleGVjdXRlcyBgX19sb29wX2Nscl9mZCgpYCBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHRvIGF2b2lkIGhvbGRpbmcgYG9wZW5fbXV0ZXhgIHdoaWxlIGZsdXNoaW5nIG91dHN0YW5kaW5nIEkvTyBhbmQgdW5mcmVlemluZyB0aGUgcXVldWUsIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBpbiBgbG9fcG9zdF9yZWxlYXNlKClgIGFuZCBgbG9vcF9yZW1vdmUoKWAuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXG4tIFVzZXItc3BhY2UgZGF0YSBjb3BpZXMgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBObyBkYXRhIGNvcGllZCB0byB1c2VyLXNwYWNlLCBpb2N0bCBvdXRwdXRzLCBwYWNrZXQgaGVhZGVycywgb3IgYnJhbmNoaW5nIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JkZXYuYyBiL2Jsb2NrL2JkZXYuY1xuaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmRldi5jXG5AQCAtMTE4OCw2ICYjNDM7MTE4OCw4IEBAIHZvaWQgYmRldl9yZWxlYXNlKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpXG4gXHRlbHNlXG4gXHRcdGJsa2Rldl9wdXRfd2hvbGUoYmRldik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuJiM0MztcdFx0YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKGJkZXYtXHUwMDNlYmRfZGlzayk7XG4gXG4gXHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4gcHV0X25vX29wZW46XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNzU4YzIwNjc4YmY2Yy4uOWZlMGY3Y2E0YzdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICYjNDM7MTEzNyw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbiYjNDM7XHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuJiM0MztcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuJiM0MztcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuJiM0MztcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuJiM0MztcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbiYjNDM7XHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4mIzQzO1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4mIzQzO1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MywxMiAmIzQzOzExODMsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTEyMDEsMTEgJiM0MzsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuLVx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4tXHQgKi9cbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzcxLDggJiM0MzsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xuJiM0MztcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4mIzQzO1x0ICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uXG4mIzQzO1x0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4mIzQzO1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4mIzQzO1x0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICYjNDM7MTgyOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbiBcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbiBcdC5vcGVuID0gICAgICAgICBsb19vcGVuLFxuIFx0LnJlbGVhc2UgPVx0bG9fcmVsZWFzZSxcbiYjNDM7XHQucG9zdF9yZWxlYXNlID0gbG9fcG9zdF9yZWxlYXNlLFxuIFx0LmlvY3RsID1cdGxvX2lvY3RsLFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG4gXHQuY29tcGF0X2lvY3RsID1cdGxvX2NvbXBhdF9pb2N0bCxcbkBAIC0yMDM2LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTQwLDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmYwNWRiYTFiNTk2MmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTYwNSw2ICYjNDM7MTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsZWQgYWZ0ZXIgZGlzay1cdTAwM2VvcGVuX211dGV4IGlzIHJlbGVhc2VkIGluIHRoZSBiZGV2X3JlbGVhc2UoKSBwYXRoLlxuJiM0MztcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguIFRoaXMgb3BlcmF0aW9uIGhhcyB0byBiZSBpZGVtcG90ZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICYjNDM7MTI5LDcgQEAgcHViIGZuIGJ1aWxkXHUwMDNjVDogT3BlcmF0aW9uc1x1MDAzZShcbiAgICAgICAgICAgICBzdWJtaXRfYmlvOiBOb25lLFxuICAgICAgICAgICAgIG9wZW46IE5vbmUsXG4gICAgICAgICAgICAgcmVsZWFzZTogTm9uZSxcbiYjNDM7ICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLFxuICAgICAgICAgICAgIGlvY3RsOiBOb25lLFxuICAgICAgICAgICAgIGNvbXBhdF9pb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvX3Bvc3RfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtiZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLjdjZTVhY2FhY2Y0M2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTExODgsNiAmIzQzOzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKQogCWVsc2UKIAkJYmxrZGV2X3B1dF93aG9sZShiZGV2KTsKIAltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJaWYgKGJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHMtJmd0O3Bvc3RfcmVsZWFzZSkKJiM0MzsJCWJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHMtJmd0O3Bvc3RfcmVsZWFzZShiZGV2LSZndDtiZF9kaXNrKTsKIAogCW1vZHVsZV9wdXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwogcHV0X25vX29wZW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDc1OGMyMDY3OGJmNmMuLjlmZTBmN2NhNGM3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzYsMTMgJiM0MzsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKQomIzQzOwkgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKQomIzQzOwkgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXIKJiM0MzsJICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGFuZAomIzQzOwkgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlCiYjNDM7CSAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS4KJiM0MzsJICovCiYjNDM7CWRyYWluX3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvTwomIzQzOwkgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyCiYjNDM7CSAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsCiYjNDM7CSAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUzLDEyICYjNDM7MTE4Myw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMjAxLDExICYjNDM7MTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlXUklURV9PTkNFKGxvLSZndDtsb19zdGF0ZSwgTG9fdW5ib3VuZCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAotCS8qCi0JICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmcKLQkgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzCi0JICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LgotCSAqLwomIzQzOwkvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiAJZnB1dChmaWxwKTsKIH0KIApAQCAtMTc3MSw4ICYjNDM7MTc5NCwyMiBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCW5lZWRfY2xlYXIgPSAobG8tJmd0O2xvX3N0YXRlID09IExvX3J1bmRvd24pOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrCiYjNDM7CSAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpCiYjNDM7CSAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLgomIzQzOwkgKiBUaGUgTG9fcnVuZG93biBzdGF0ZSBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy4KJiM0MzsJICovCiAJaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0xNzkxLDYgJiM0MzsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBsb19vcGVuLAogCS5yZWxlYXNlID0JbG9fcmVsZWFzZSwKJiM0MzsJLnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSwKIAkuaW9jdGwgPQlsb19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9CWxvX2NvbXBhdF9pb2N0bCwKQEAgLTIwMzYsNiAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxNDAsNiAmIzQzOzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uZjA1ZGJhMWI1OTYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNjA1LDYgJiM0MzsxNjA1LDEyIEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAJICogZHJpdmVyLgogCSAqLwogCWludCAoKmFsdGVybmF0aXZlX2dwdF9zZWN0b3IpKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCAqc2VjdG9yKTsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGFmdGVyIGRpc2stJmd0O29wZW5fbXV0ZXggaXMgcmVsZWFzZWQgaW4gdGhlIGJkZXZfcmVsZWFzZSgpIHBhdGguCiYjNDM7CSAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0CiYjNDM7CSAqIGhvbGRpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqcG9zdF9yZWxlYXNlKShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiB9OwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwppbmRleCBmYzk3ZGQ4NzM5NzQ2Li4yZmY3N2VmNDk3ODFiIDEwMDY0NAotLS0gYS9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwpAQCAtMTI5LDYgJiM0MzsxMjksNyBAQCBwdWIgZm4gYnVpbGQmbHQ7VDogT3BlcmF0aW9ucyZndDsoCiAgICAgICAgICAgICBzdWJtaXRfYmlvOiBOb25lLAogICAgICAgICAgICAgb3BlbjogTm9uZSwKICAgICAgICAgICAgIHJlbGVhc2U6IE5vbmUsCiYjNDM7ICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLAogICAgICAgICAgICAgaW9jdGw6IE5vbmUsCiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsCiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEJsb2NrIExheWVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGh5IG9mIGZ1enppbmcuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdGVhcmRvd24gYW5kIHJlbGVhc2UsIGFuZCB0aGF0JiMzOTtzIGFuIGFyZWEgSSBrbm93IGhhcyBiZWVuIGEgdGFyZ2V0IGZvciBmdXp6aW5nIGluIHRoZSBwYXN0LgoKVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNldmVyYWwga2V5IGZpbGVzLiBGaXJzdCwgYGJsb2NrL2JkZXYuY2AgaW50cm9kdWNlcyBhIGNhbGwgdG8gYSBgcG9zdF9yZWxlYXNlKClgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGJkZXZfcmVsZWFzZSgpYCBmdW5jdGlvbiwgYnV0IGNydWNpYWxseSwgb25seSBpZiBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgYGJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHNgLiBUaGlzIGlzIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBUaGlzIHBvaW50cyB0byB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nIGJlaW5nIGRvbmUgYnkgdGhlIGNoYW5nZSBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLgoKYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB3aGVyZSB0aGUgbWVhdCBvZiBpdCBpczogYSByZWZhY3RvciBvZiBzZXZlcmFsIGtleSBsb29wIGRldmljZSBmdW5jdGlvbnMgbGlrZSBgX19sb29wX2Nscl9mZCgpYCwgYGxvX3JlbGVhc2UoKWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlKClgLiBUaGlzIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBhIHdvcmtxdWV1ZSBpdGVtLCBgbG9fY2xyX3dvcmtgLCB0aGUgcXVldWluZyBhbmQgZmx1c2hpbmcgb2Ygd29yayBpbiBgbG9fcG9zdF9yZWxlYXNlKClgLCBhbmQgY2hhbmdlcyB0byB0aGUgcHJvY2VzcyBpbnZvbHZpbmcgcXVldWUgZnJlZXplL2RyYWluL3N5bmNocm9uaXplX3JjdSBpbiBgX19sb29wX2Nscl9mZCgpYC4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgYWRkaXRpb24gb2YgYFdBUk5fT05fT05DRWAuIFRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGFuZCBob3cgYXN5bmNocm9ub3VzIHdvcmsgaXMgaGFuZGxlZCBkdXJpbmcgbG9vcCBkZXZpY2UgdGVhcmRvd24sIGFuZCBhbHRlcnMgbG9ja2luZyBvcmRlciB3aGljaCBtYWtlcyBpdCByaXBlIGZvciBjb25jdXJyZW5jeSBidWdzLgoKQWRkaXRpb25hbGx5LCB3ZSBoYXZlIHVwZGF0ZXMgdG8gYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLCB3aGVyZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBwb2ludGVyIHRvIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiB3aGVuIGRlZmluaW5nIGEgbmV3IGhvb2suIFRoZW4sIHRoZXJlJiMzOTtzIGEgbWlub3IgY2hhbmdlIGluIHRoZSBSdXN0IGNvZGUgaW4gYHJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzYCwgd2hlcmUgYHBvc3RfcmVsZWFzZWAgaXMgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgLiBUaGlzIEkgYXNzdW1lIGlzIGp1c3QgdG8gaW5pdGlhbGl6ZSBpdCBzaW5jZSB0aGVyZSBtaWdodCBiZSBubyBpbXBsZW1lbnRhdGlvbiBpbiBSdXN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcywgKmNhbiogdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHRoZSBsb29wIGRldmljZSBkcml2ZXIuIExvb3AgZGV2aWNlcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgb3BlbmVkLCBhbmQgY2xvc2VkIHVzaW5nIGBpb2N0bGAgY2FsbHMgbGlrZSBgTE9PUF9TRVRfRkRgIGFuZCBgTE9PUF9DTFJfRkRgLiBTeXprYWxsZXIgYWxyZWFkeSB1bmRlcnN0YW5kcyBob3cgdG8gdHJpZ2dlciB0aGlzIGxpZmVjeWNsZS4gVGhlIGFkZGl0aW9uIG9mIGFzeW5jaHJvbm91cyB3b3JrLCBtb2RpZmllZCBsb2NraW5nIG9yZGVyLCBhbmQgdGhlIGBXQVJOX09OX09OQ0VgIGFsbCBzY3JlYW0gJiMzNDtpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nISYjMzQ7IEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgcmFjZSBjb25kaXRpb25zLi4uCgpOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhlIGxvb3AgZGV2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHByZXZlbnQgdGhpcyBmcm9tIGJlaW5nIHJlYWNoYWJsZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSwgYnV0IGZyb20gd2hhdCBJJiMzOTttIHNlZWluZyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX0xPT1BgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBpbiB0aGUgYmxvY2sgZGV2aWNlIGFyZWEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDE0NC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBtb3JlIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyBgQkxLX0RFVl9MT09QYCBpcyBleHBvc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiB3aGF0IG90aGVyIGNvbXBvbmVudHMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbiBhbmQgdHJvdWJsZXNob290aW5nLCBvZiBjb3Vyc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NDpcdGNvbmZpZyBCTEtfREVWX0xPT1BcbiAxNDU6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTQ2Olx0XHRoZWxwXG4gMTQ3Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcbiAxNDg6XHRcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXG4gMTQ5Olx0XHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXG4gMTUwOlx0XHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xuIDE1MTpcdFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XG4gMTUyOlx0XHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXG4gMTU1Olx0XHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XG4gMTU2Olx0XHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcbiAxNTc6XHRcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXG4gMTU4Olx0XHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcbiAxNTk6XHRcdCAgZHJpdmVyLlxuIDE2MDpcdFxuIDE2MTpcdFx0ICBUbyB1c2UgdGhlIGxvb3AgZGV2aWNlLCB5b3UgbmVlZCB0aGUgbG9zZXR1cCB1dGlsaXR5LCBmb3VuZCBpbiB0aGVcbiAxNjI6XHRcdCAgdXRpbC1saW51eCBwYWNrYWdlLCBzZWVcbiAxNjM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cdTAwM2UuXG4gMTY0Olx0XG4gMTY1Olx0XHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcJiMzNDtoaWRlXCYjMzQ7IGEgZmlsZSBzeXN0ZW0gaW5cbiAxNjY6XHRcdCAgYSBkaXNrIHBhcnRpdGlvbiwgZmxvcHB5LCBvciByZWd1bGFyIGZpbGUsIGVpdGhlciB1c2luZyBlbmNyeXB0aW9uXG4gMTY3Olx0XHQgIChzY3JhbWJsaW5nIHRoZSBkYXRhKSBvciBzdGVnYW5vZ3JhcGh5IChoaWRpbmcgdGhlIGRhdGEgaW4gdGhlIGxvd1xuIDE2ODpcdFx0ICBiaXRzIG9mLCBzYXksIGEgc291bmQgZmlsZSkuIFRoaXMgaXMgYWxzbyBzYWZlIGlmIHRoZSBmaWxlIHJlc2lkZXNcbiAxNjk6XHRcdCAgb24gYSByZW1vdGUgZmlsZSBzZXJ2ZXIuXG4gMTcwOlx0XG4gMTcxOlx0XHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXG4gMTcyOlx0XHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxuIDE3MzpcdFxuIDE3NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXG4gMTc2Olx0XG4gMTc3Olx0XHQgIE1vc3QgdXNlcnMgd2lsbCBhbnN3ZXIgTiBoZXJlLlxuIDE3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHN5bWJvbHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQgYXMgYWx0ZXJlZDogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9yZW1vdmVgLCBgbG9vcF9hZGRgLCBhbmQgYGJkZXZfcmVsZWFzZWAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCB3aGF0IHRoZWlyIGltcGFjdCBpcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcC5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBldmVuIGlmIHRoZXkgYXJlbiYjMzk7dCBleHBsaWNpdGx5IGZsYWdnZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgpNeSBuZXh0IG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgYF9fbG9vcF9jbHJfZmRgLCBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uIGBsb29wX2Nscl9mZGAsIGFuZCBgbG9fcmVsZWFzZWAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBpcyBwYXJhbW91bnQgdG8gZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nz1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA5OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTAtICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwNj1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE0MDpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTctXHQgKiBsby1cdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE4Olx0ICogZmluaXNoZWQuIFRoZXJlIGNhbm5vdCBiZSBhbnlib2R5IGVsc2UgZW50ZXJpbmcgX19sb29wX2Nscl9mZCgpIGFzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVx0ICogTG9fcnVuZG93biBzdGF0ZSBwcm90ZWN0cyB1cyBmcm9tIGFsbCB0aGUgb3RoZXIgcGxhY2VzIHRyeWluZyB0b1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Nzc9c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5Olx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDAtXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODA3PXN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMTpcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3Ni1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc3Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIExvb3AgRGV2aWNlIENsZWFyaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9vcCBkZXZpY2UgY2xlYXJpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBgbG9vcF9jbHJfZmRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb29wIGRldmljZSYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgZ2V0cyBjbGVhcmVkIHdoZW4gaXQmIzM5O3MgcmVsZWFzZWQgb3IgZGV0YWNoZWQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIGZyZWVpbmcgcmVzb3VyY2VzIGFuZCBicmVha2luZyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsb29wIGRldmljZSBhbmQgaXRzIGJhY2tpbmcgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwLSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDY9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDA6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVx0ICogbG8tXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcdCAqIGZpbmlzaGVkLiBUaGVyZSBjYW5ub3QgYmUgYW55Ym9keSBlbHNlIGVudGVyaW5nIF9fbG9vcF9jbHJfZmQoKSBhc1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOS1cdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQwLVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQxOlx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNDItXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1NjI9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5My1cdGNhc2UgTE9PUF9DTFJfRkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTk0Olx0XHRyZXR1cm4gbG9vcF9jbHJfZmQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5NS1cdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Nzc9c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5Olx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDAtXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODA3PXN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMTpcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3Ni1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc3Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYGxvb3BfY2xyX2ZkYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGluIHRoZSBsb29wIGRldmljZSBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYGxvb3BfY2xyX2ZkYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBiYWNraW5nIGZpbGUgZm9yIGEgbG9vcCBkZXZpY2UuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGFydGljdWxhcmx5IGFyb3VuZCBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1heWJlIHNvbWUgc3VidGxlIGVkZ2UgY2FzZXMgaW52b2x2aW5nIGVycm9yIGhhbmRsaW5nIHdoZW4gY2xvc2luZyB0aGUgZmlsZS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjbGVhbnVwIGlzIGRvbmUgcmlnaHQuIEkmIzM5O20gY29uc2lkZXJpbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcmlzayBvZiBsZWFraW5nIGZpbGUgZGVzY3JpcHRvcnMgb3IgY2F1c2luZyBhIHJlc291cmNlIGV4aGF1c3Rpb24gYXR0YWNrIGlmIHRoZSBjbGVhbnVwIGlzbiYjMzk7dCByb2J1c3QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM0Olx0XG4xMjM1Olx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuMTIzNjpcdHtcbjEyMzc6XHRcdGludCBlcnI7XG4xMjM4Olx0XG4xMjM5Olx0XHQvKlxuMTI0MDpcdFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4xMjQxOlx0XHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuMTI0MjpcdFx0ICpcbjEyNDM6XHRcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXG4xMjQ0Olx0XHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG4xMjQ1Olx0XHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xuMTI0NjpcdFx0ICogbG9vcCBkZXZpY2UuXG4xMjQ3Olx0XHQgKi9cbjEyNDg6XHRcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xuMTI0OTpcdFx0aWYgKGVycilcbjEyNTA6XHRcdFx0cmV0dXJuIGVycjtcbjEyNTE6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xuMTI1MjpcdFx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI1MzpcdFx0XHRyZXR1cm4gLUVOWElPO1xuMTI1NDpcdFx0fVxuMTI1NTpcdFx0LypcbjEyNTY6XHRcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXG4xMjU3Olx0XHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xuMTI1ODpcdFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cbjEyNTk6XHRcdCAqL1xuMTI2MDpcdFxuMTI2MTpcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xuMTI2MjpcdFx0aWYgKGRpc2tfb3BlbmVycyhsby1cdTAwM2Vsb19kaXNrKSA9PSAxKVxuMTI2MzpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjEyNjQ6XHRcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XG4xMjY1Olx0XG4xMjY2Olx0XHRyZXR1cm4gMDtcbjEyNjc6XHR9XG4xMjY4Olx0XG4xMjY5Olx0c3RhdGljIGludFxuMTI3MDpcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXG4xMjcxOlx0e1xuMTI3MjpcdFx0aW50IGVycjtcbjEyNzM6XHRcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBzdGFydGluZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodDoKCioqQ2hlY2tpbmcgYGxvX3JlbGVhc2VgIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBsb19yZWxlYXNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBJIG5lZWQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGxpa2VseSBhbiBpc3N1ZSByZWxhdGVkIHRvIHRoZSBsaWZlY3ljbGUgb2YgbG9vcGJhY2sgZGV2aWNlcy4gSXQgY291bGQgYmUgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCwgaGFuZGxpbmcgZGV2aWNlIGNsb3N1cmUsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtLiAKCkdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgYnJvYWRlciBibG9jayBkZXZpY2Ugc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGhvdyBgbG9fcmVsZWFzZWAgaW50ZXJhY3RzIHdpdGggb3RoZXIga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGRyaXZlciwgbGlrZSBgbG9fb3BlbmAsIGBsb19pb2N0bGAsIGFuZCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIGlmIHRoZXkgZXhpc3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3c6CgoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgcmVzb3VyY2VzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2hlbiByZWxlYXNpbmcgcmVzb3VyY2VzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBtdXRleGVzLCBzcGlubG9ja3MsIG9yIGF0b21pYyBvcGVyYXRpb25zLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIFdoYXQgcmVzb3VyY2VzIGlzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCBob3cgaXMgaXQgZG9pbmcgc28/IEkmIzM5O20gdGhpbmtpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIGRlc2NyaXB0b3JzIChpZiBhcHBsaWNhYmxlKSwgYW5kIGRldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSByZWxlYXNlIHByb2Nlc3M/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgcGFydGlhbCByZWxlYXNlIG9yIHJlcG9ydCBlcnJvcnMgYXBwcm9wcmlhdGVseT8KKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBWRlM6KiogSG93IGRvZXMgYGxvX3JlbGVhc2VgIGltcGFjdCB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKT8gRG9lcyBpdCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGludmFsaWRhdGUgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBub3RpZnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHM/CgpNeSBtZW50YWwgY2hlY2tsaXN0IGdvZXMgZnVydGhlciB0aGFuIHRoaXMsIG9mIGNvdXJzZSwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgYWxsIGFzcGVjdHMgb2YgdGhlIGNvZGUsIGJ1dCB0aGlzIGlzIGEgc29saWQgcGxhY2UgdG8gc3RhcnQgYW5kIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzc1Olx0fVxuMTc3NjpcdFxuMTc3NzpcdHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4xNzc4Olx0e1xuMTc3OTpcdFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMTc4MDpcdFx0Ym9vbCBuZWVkX2NsZWFyID0gZmFsc2U7XG4xNzgxOlx0XG4xNzgyOlx0XHRpZiAoZGlza19vcGVuZXJzKGRpc2spIFx1MDAzZSAwKVxuMTc4MzpcdFx0XHRyZXR1cm47XG4xNzg0Olx0XHQvKlxuMTc4NTpcdFx0ICogQ2xlYXIgdGhlIGJhY2tpbmcgZGV2aWNlIGluZm9ybWF0aW9uIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2xvc2Ugb2ZcbjE3ODY6XHRcdCAqIGEgZGV2aWNlIHRoYXQmIzM5O3MgYmVlbiBtYXJrZWQgZm9yIGF1dG8gY2xlYXIsIG9yIG9uIHdoaWNoIExPT1BfQ0xSX0ZEXG4xNzg3Olx0XHQgKiBoYXMgYmVlbiBjYWxsZWQuXG4xNzg4Olx0XHQgKi9cbjE3ODk6XHRcbjE3OTA6XHRcdG11dGV4X2xvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTc5MTpcdFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX2JvdW5kIFx1MDAyNlx1MDAyNiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0FVVE9DTEVBUikpXG4xNzkyOlx0XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xuMTc5MzpcdFxuMTc5NDpcdFx0bmVlZF9jbGVhciA9IChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcbjE3OTU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4xNzk2Olx0XG4xNzk3Olx0XHQvKlxuMTc5ODpcdFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG4xNzk5Olx0XHQgKiBhdm9pZGFuY2UpIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZyBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKVxuMTgwMDpcdFx0ICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uXG4xODAxOlx0XHQgKiBUaGUgTG9fcnVuZG93biBzdGF0ZSBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbjE4MDI6XHRcdCAqL1xuMTgwMzpcdFx0aWYgKG5lZWRfY2xlYXIpXG4xODA0Olx0XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbjE4MDU6XHR9XG4xODA2Olx0XG4xODA3Olx0c3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuMTgwODpcdHtcbjE4MDk6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE4MTA6XHRcbjE4MTE6XHRcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbjE4MTI6XHRcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuMTgxMzpcdH1cbjE4MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNoZWNraW5nIGJkZXZfcmVsZWFzZSBpbiBibG9jay9iZGV2LmMqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBhcmVhLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIEdpdmVuIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBiZGV2X3JlbGVhc2VgIGZ1bmN0aW9uIGluIGBibG9jay9iZGV2LmNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBhbmQgY291bGQgZWFzaWx5IGJlIHRoZSBzb3VyY2Ugb2Ygc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgY2xlYW51cCBvciBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHJvbGUgYW5kIG1ha2Ugc3VyZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSXQmIzM5O3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlOyBhbHdheXMgYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3NTpcdFxuMTE3NjpcdFx0aWYgKGhvbGRlcilcbjExNzc6XHRcdFx0YmRfeWllbGRfY2xhaW0oYmRldl9maWxlKTtcbjExNzg6XHRcbjExNzk6XHRcdC8qXG4xMTgwOlx0XHQgKiBUcmlnZ2VyIGV2ZW50IGNoZWNraW5nIGFuZCB0ZWxsIGRyaXZlcnMgdG8gZmx1c2ggTUVESUFfQ0hBTkdFXG4xMTgxOlx0XHQgKiBldmVudC4gIFRoaXMgaXMgdG8gZW5zdXJlIGRldGVjdGlvbiBvZiBtZWRpYSByZW1vdmFsIGNvbW1hbmRlZFxuMTE4MjpcdFx0ICogZnJvbSB1c2VybGFuZCAtIGUuZy4gZWplY3QoMSkuXG4xMTgzOlx0XHQgKi9cbjExODQ6XHRcdGRpc2tfZmx1c2hfZXZlbnRzKGRpc2ssIERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFKTtcbjExODU6XHRcbjExODY6XHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbjExODc6XHRcdFx0YmxrZGV2X3B1dF9wYXJ0KGJkZXYpO1xuMTE4ODpcdFx0ZWxzZVxuMTE4OTpcdFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuMTE5MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4xMTkxOlx0XHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuMTE5MjpcdFx0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbjExOTM6XHRcbjExOTQ6XHRcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbjExOTU6XHRwdXRfbm9fb3BlbjpcbjExOTY6XHRcdGJsa2Rldl9wdXRfbm9fb3BlbihiZGV2KTtcbjExOTc6XHR9XG4xMTk4Olx0XG4xMTk5Olx0LyoqXG4xMjAwOlx0ICogYmRldl95aWVsZF9jbGFpbSAtIGdpdmUgdXAgdGhlIGhvbGRlciBjbGFpbSBvbiBhbiBvcGVuIGJsb2NrIGRldmljZVxuMTIwMTpcdCAqIEBiZGV2X2ZpbGU6IG9wZW4gYmxvY2sgZGV2aWNlXG4xMjAyOlx0ICpcbjEyMDM6XHQgKiBZaWVsZCB0aGUgaG9sZGVyIGFuZCBhbnkgd3JpdGUgYWNjZXNzIGZvciBAYmRldl9maWxlIHdpdGhvdXQgY2xvc2luZyBpdCwgc29cbjEyMDQ6XHQgKiB0aGUgY2FsbGVyIGNhbiBzdGlsbCBhY3Qgb24gdGhlIGRldmljZSAtIGUuZy4gYmRldl9hbGxvd19mcmVlemUoKSBpdCAtIGJlZm9yZVxuMTIwNTpcdCAqIHRoZSBmaW5hbCBiZGV2X2ZwdXQoKS4gIGJkZXZfZnB1dCgpIHlpZWxkcyB0b28sIHNvIGNhbGxpbmcgaXQgYWZ0ZXJ3YXJkcyBpc1xuMTIwNjpcdCAqIHNhZmUuXG4xMjA3Olx0ICovXG4xMjA4Olx0dm9pZCBiZGV2X3lpZWxkX2NsYWltKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpXG4xMjA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogQmxvY2sgRGV2aWNlIFJlbGVhc2Ugd2l0aCBMb29wIERldmljZSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgYXJlIHNjcmVhbWluZyBmb3IgZnV6emluZy4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IEZpcnN0LCBpdCBsb29rcyBsaWtlIGEgYHBvc3RfcmVsZWFzZWAgY2FsbGJhY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgYW5kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGBvcGVuX211dGV4YCBpcyBkcm9wcGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNoYW5nZSBpbiB0aGUgbG9vcCBkZXZpY2UgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBgX19sb29wX2Nscl9mZGAsIHdoaWNoIHVzZWQgdG8gYmUgc3luY2hyb25vdXMgd2l0aGluIGBsb19yZWxlYXNlYCAod2hpbGUgaG9sZGluZyB0aGF0IGNyaXRpY2FsIGBvcGVuX211dGV4YCksIGlzIG5vdyBiZWluZyBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYHN5c3RlbV9sb25nX3dxYCkuCgpgbG9fcmVsZWFzZWAgbm93IHF1ZXVlcyBgbG8tJmd0O2xvX2Nscl93b3JrYCwgYW5kIHRoZSBuZXcgYGxvX3Bvc3RfcmVsZWFzZWAgZmx1c2hlcyB0aGF0IHdvcmtxdWV1ZSAqYWZ0ZXIqIHRoZSBgb3Blbl9tdXRleGAgaXMgZHJvcHBlZC4gV2l0aGluIGBfX2xvb3BfY2xyX2ZkYCBpdHNlbGYsIHRoZSBwYXRjaCBpcyBhZGRpbmcgc2V2ZXJhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtczogYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYGJsa19tcV9mcmVlemVfcXVldWVgIC8gYGJsa19tcV91bmZyZWV6ZV9xdWV1ZWAsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgKmxvY2tpbmcqIGBvcGVuX211dGV4YCBhdCBzdGVwIDIuIEEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGlzIGFsc28gaW50cm9kdWNlZCB0byBjaGVjayBgbG8tJmd0O2xvX3N0YXRlYC4gRnVydGhlciwgYGxvb3BfcmVtb3ZlYCBhbHNvIGZsdXNoZXMgYGxvLSZndDtsb19jbHJfd29ya2AuCgpJcyB0aGlzIHJpcGUgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGJsb2NrIGRldmljZSBjbGVhbnVwIChgYmRldl9yZWxlYXNlYCkgYW5kIGxvb3AgZGV2aWNlIGNsZWFudXAuIFRoZSBsb29wIGRldmljZSBpcyByZWFkaWx5IGF2YWlsYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIENydWNpYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgY29uY3VycmVuY3kgYXNwZWN0cywgYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSBoYW5kbGluZywgaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZywgd29ya3F1ZXVlIGRyYWluaW5nLCBjaGFuZ2luZyBsb2NrIG9yZGVycyAoYG9wZW5fbXV0ZXhgLCBgbG9fbXV0ZXhgLCBgbG9fbG9ja2ApLCBhbmQgYWRkcyBhIHJ1bnRpbWUgYXNzZXJ0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGNsYXNzaWMgdGFyZ2V0cyBmb3IgY29uY3VycmVuY3kgYnVncyBsaWtlIGRlYWRsb2NrcyBhbmQgcmFjZSBjb25kaXRpb25zLiBJIGNhbiBwcmFjdGljYWxseSBzbWVsbCB0aGUgcG90ZW50aWFsIGJ1Z3MuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9vcF9jb25maWd1cmVgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGJkZXZfcmVsZWFzZWAuIE5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aG9zZSBhcmUgYWxsIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGluIHRoZSBDIGNvZGU6IE9rYXksIGBfX2xvb3BfY2xyX2ZkYCBpcyBgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspYC4gYGxvX3JlbGVhc2VgIGlzIGBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKWAuIGBsb19wb3N0X3JlbGVhc2VgIGlzIGBzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spYC4gYGxvb3BfY2xyX2ZkYCBpcyBgc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKWAuIGBsb29wX3JlbW92ZWAgaXMgYHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pYC4gQW5kIGZpbmFsbHksIGBiZGV2X3JlbGVhc2VgIGlzIGB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKWAuIEdvb2QsIGFsbCBjb25maXJtZWQuCgpJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxPQ0tgLiBgQkxLX0RFVl9MT09QYCBkZXBlbmRzIG9uIGBCTE9DS2AuIEkgcXVpY2tseSBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kIGFzIGV4cGVjdGVkLCBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVydGhlciByZXF1aXJlZCBkZXBlbmRlbmNpZXMuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBCTEtfREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjY6bWVudWNvbmZpZyBCTEtfREVWXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2OAoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2V0dXAgaGVyZS4gV2UmIzM5O3JlIGxldmVyYWdpbmcgYEJMS19ERVZfTE9PUGAsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IGRyaXZlciwgYW5kIGFsc28gZW5hYmxpbmcgYEJMT0NLYCBhcyBhIGtlcm5lbCBjb25maWcgb3B0aW9uLiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgc2V0LXJlc3VsdHNgIGlzIGZvcm1hdHRlZCBjb3JyZWN0bHksIGdvaW5nIHRocm91Z2ggdGhlIGFyZ3VtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEJMS19ERVZfTE9PUGAgYW5kIGBCTE9DS2Agd2l0aCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGlzIGNvcnJlY3QsIGFuZCB0YXJnZXRpbmcgb3VyIGZ1enppbmcgd2l0aCBgRm9jdXNTeW1ib2xzYC4gVGhlc2Ugc2VlbSBhcHByb3ByaWF0ZWx5IHNwZWNpZmljIGFuZCByZWxldmFudDogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgYmRldl9yZWxlYXNlYCwgYW5kIGBsb29wX3JlbW92ZWAgLSB0aGVzZSBtYWtlIHNlbnNlIHRvIGJlIHRhcmdldGVkIGFzIHRoZXkgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBwYXRjaCBjaGFuZ2VzLiBUaGUgJiMzNDtSZWFzb25pbmcmIzM0OyBpcyBjb25jaXNlLCB3aGljaCBpcyBnb29kLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgZXZlcnl0aGluZyBvbmUgbW9yZSB0aW1lLiBXZSB3YW50IHRvIGZ1enogdGhpcyBwYXRjaCwgc28gYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzcGVjaWZpYywgc28gdGhleSBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCBhcmUgc3BlY2lmaWMgdG8gdGhlIHBhdGNoIGNoYW5nZXMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQuIEFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGRldmljZSByZWxlYXNlIGhhbmRsaW5nIGluIGJsb2NrL2JkZXYuYyBieSBpbnRyb2R1Y2luZyBhIHBvc3RfcmVsZWFzZSBjYWxsYmFjaywgYW5kIHJlZmFjdG9ycyBsb29wIGRldmljZSB0ZWFyZG93biBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhbnVwIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUsIGFkZGluZyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZy9kcmFpbmluZywgbG9ja2luZyBjaGFuZ2VzLCBhbmQgbmV3IFdBUk5fT04gYXNzZXJ0aW9ucy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGhhbmRsZXMgY29tcGxleCBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGRldmljZSByZWxlYXNlIGhhbmRsaW5nIGluIGJsb2NrL2JkZXYuYyBieSBpbnRyb2R1Y2luZyBhIHBvc3RfcmVsZWFzZSBjYWxsYmFjaywgYW5kIHJlZmFjdG9ycyBsb29wIGRldmljZSB0ZWFyZG93biBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhbnVwIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUsIGFkZGluZyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZy9kcmFpbmluZywgbG9ja2luZyBjaGFuZ2VzLCBhbmQgbmV3IFdBUk5fT04gYXNzZXJ0aW9ucy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGhhbmRsZXMgY29tcGxleCBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cblxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBuZXcgYGxvX2Nscl93b3JrYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBuZXcgY2FsbGJhY2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgZGVmYXVsdHMgdG8gTlVMTCBhY3Jvc3Mgc3RhdGljIGRlY2xhcmF0aW9ucyBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTm9uZWAgaW4gUnVzdCBiaW5kaW5ncy5cbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWIzNTYzZjdkZTE5OTE0NzhhYTM1NTVhZTMwYTExMzJlMzQyN2JmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NDg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtMTE4OCw2ICYjNDM7MTE4OCw4IEBAIHZvaWQgYmRldl9yZWxlYXNlKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpCiAJZWxzZQogCQlibGtkZXZfcHV0X3dob2xlKGJkZXYpOwogCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlpZiAoYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7Zm9wcy0mZ3Q7cG9zdF9yZWxlYXNlKQomIzQzOwkJYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7Zm9wcy0mZ3Q7cG9zdF9yZWxlYXNlKGJkZXYtJmd0O2JkX2Rpc2spOwogCiAJbW9kdWxlX3B1dChkaXNrLSZndDtmb3BzLSZndDtvd25lcik7CiBwdXRfbm9fb3BlbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNzU4YzIwNjc4YmY2Yy4uOWZlMGY3Y2E0YzdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAJc3RydWN0IGdlbmRpc2sJCSpsb19kaXNrOwogCXN0cnVjdCBtdXRleAkJbG9fbXV0ZXg7CiAJYm9vbAkJCWlkcl92aXNpYmxlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbG9fY2xyX3dvcms7CiB9OwogCiBzdHJ1Y3QgbG9vcF9jbWQgewpAQCAtMTEzNiwxMyAmIzQzOzExMzcsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsCiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiYjNDM7c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tJmd0O2xvX2Rpc2s7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJZ2ZwX3QgZ2ZwID0gbG8tJmd0O29sZF9nZnBfbWFzazsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CS8qCiYjNDM7CSAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpCiYjNDM7CSAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpCiYjNDM7CSAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlcgomIzQzOwkgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kCiYjNDM7CSAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmUKJiM0MzsJICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLgomIzQzOwkgKi8KJiM0MzsJZHJhaW5fd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PCiYjNDM7CSAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXIKJiM0MzsJICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKCkKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGwKJiM0MzsJICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuCiYjNDM7CSAqLwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSkpOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CVdBUk5fT05fT05DRShsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fcnVuZG93bik7CiYjNDM7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKQEAgLTExNTMsMTIgJiM0MzsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCWxvLSZndDtsb19zaXplbGltaXQgPSAwOwogCW1lbXNldChsby0mZ3Q7bG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCi0JLyoKLQkgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4KLQkgKgotCSAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsCi0JICogLSZndDtyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJiMzOTt0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uCi0JICovCiYjNDM7CS8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqLwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKQEAgLTEyMDEsMTEgJiM0MzsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCVdSSVRFX09OQ0UobG8tJmd0O2xvX3N0YXRlLCBMb191bmJvdW5kKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCi0JICovCiYjNDM7CS8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKIAlmcHV0KGZpbHApOwogfQogCkBAIC0xNzcxLDggJiM0MzsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJbmVlZF9jbGVhciA9IChsby0mZ3Q7bG9fc3RhdGUgPT0gTG9fcnVuZG93bik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAomIzQzOwkvKgomIzQzOwkgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2sKJiM0MzsJICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkKJiM0MzsJICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uCiYjNDM7CSAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLgomIzQzOwkgKi8KIAlpZiAobmVlZF9jbGVhcikKLQkJX19sb29wX2Nscl9mZChsbyk7CiYjNDM7CQlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTE3OTEsNiAmIzQzOzE4MjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxvX29wZW4sCiAJLnJlbGVhc2UgPQlsb19yZWxlYXNlLAomIzQzOwkucG9zdF9yZWxlYXNlID0gbG9fcG9zdF9yZWxlYXNlLAogCS5pb2N0bCA9CWxvX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0JbG9fY29tcGF0X2lvY3RsLApAQCAtMjAzNiw2ICYjNDM7MjA3NCw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJbG8gPSBremFsbG9jX29iaigqbG8pOwogCWlmICghbG8pCiAJCWdvdG8gb3V0OwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpOwogCWxvLSZndDt3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7aWRsZV93b3JrZXJfbGlzdCk7CiAJdGltZXJfc2V0dXAoJmFtcDtsby0mZ3Q7dGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpOwpAQCAtMjE0MCw2ICYjNDM7MjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE2MDUsNiAmIzQzOzE2MDUsMTIgQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHsKIAkgKiBkcml2ZXIuCiAJICovCiAJaW50ICgqYWx0ZXJuYXRpdmVfZ3B0X3NlY3Rvcikoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90ICpzZWN0b3IpOwomIzQzOwkvKgomIzQzOwkgKiBDYWxsZWQgYWZ0ZXIgZGlzay0mZ3Q7b3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC4KJiM0MzsJICogVXNlZCBieSBsb29wIGRldmljZXMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gc3luY2hyb25pemF0aW9uIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyBkaXNrLSZndDtvcGVuX211dGV4LiBUaGlzIG9wZXJhdGlvbiBoYXMgdG8gYmUgaWRlbXBvdGVudC4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIH07CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycyBiL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCmluZGV4IGZjOTdkZDg3Mzk3NDYuLjJmZjc3ZWY0OTc4MWIgMTAwNjQ0Ci0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCkBAIC0xMjksNiAmIzQzOzEyOSw3IEBAIHB1YiBmbiBidWlsZCZsdDtUOiBPcGVyYXRpb25zJmd0OygKICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsCiAgICAgICAgICAgICBvcGVuOiBOb25lLAogICAgICAgICAgICAgcmVsZWFzZTogTm9uZSwKJiM0MzsgICAgICAgICAgICBwb3N0X3JlbGVhc2U6IE5vbmUsCiAgICAgICAgICAgICBpb2N0bDogTm9uZSwKICAgICAgICAgICAgIGNvbXBhdF9pb2N0bDogTm9uZSwKICAgICAgICAgICAgIGNoZWNrX2V2ZW50czogTm9uZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDcKCQkJCQkJCW91dHB1dDogMjg2CgkJCQkJCQl0aG91Z2h0czogMTEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQ6IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzICYjMzQ7bm8sJiMzNDsgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgY2xlYW51cCBvZiBsb29wIGRldmljZXMuIFdlJiMzOTt2ZSBnb3QgYGJsb2NrL2JkZXYuY2AgYWRkaW5nIGEgYHBvc3RfcmVsZWFzZWAgY2FsbCwgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCByZXdvcmtpbmcgdGhlIGxvb3AgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZSB3aXRoIHdvcmtxdWV1ZXMsIGFuZCB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBgYmxrZGV2LmhgIGluY2x1ZGUgYW5kIHRoZSBSdXN0IHNpZGUgKGBnZW5fZGlzay5yc2ApLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGRlZmVycmluZyB0aGUgY2xlYW51cCwgdXNpbmcgd29ya3F1ZXVlcyB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGR1cmluZyBkZXZpY2UgcmVsZWFzZS4gVGhlIGludHJvZHVjdGlvbiBvZiBgbG9fY2xyX3dvcmtgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYW5kIGBsb19wb3N0X3JlbGVhc2VgIGFyZSBhbGwgYWJvdXQgdGhpcyBkZWZlcnJlZCBjbGVhbnVwIG1lY2hhbmlzbSBhbmQgc3luY2hyb25pemF0aW9uLgoKTm93LCB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBsaWtlIHVzZS1hZnRlci1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gTE9DS0RFUCBkZWFscyB3aXRoIGxvY2sgb3JkZXJpbmcgYW5kIGRlYWRsb2NrIGRldGVjdGlvbi4KCkxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOIGZsYWdzLiBgbG9gIGlzIGJlaW5nIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX29iamAgaW4gYGxvb3BfYWRkYCwgYW5kIHdlIGhhdmUgYElOSVRfV09SS2AgaW5pdGlhbGl6aW5nIHRoZSBgd29ya19zdHJ1Y3RgLiBXZSBleHBsaWNpdGx5IHNldCBgcG9zdF9yZWxlYXNlYCB0byBgTm9uZWAgaW4gdGhlIFJ1c3Qgc2lkZSBvciBpdCYjMzk7cyBpbXBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gQywgd2l0aCBhIE5VTEwgY2hlY2sgYmVmb3JlIGNhbGxpbmcgaXQsIGFzIGluIHRoZSBgYmRldl9yZWxlYXNlKClgIGZ1bmN0aW9uLiBUaGUgd29yayBmdW5jdGlvbiBgX19sb29wX2Nscl9mZGAgaXMgcmV0cmlldmluZyBpdHMgbG9vcF9kZXZpY2UgdXNpbmcgY29udGFpbmVyX29mLCB3aGljaCBtZWFucyBubyBwb2ludGVycyBhcmUgYmVpbmcgdXNlZCBiZWZvcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIG5ldyBgY29weV90b191c2VyYCwgbm8gaW9jdGwgb3V0cHV0IHN0cnVjdHMgYmVpbmcgY2hhbmdlZCwgbm8gYnVmZmVyIGxlbmd0aHMgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCBvbiBkZWZlcnJlZCBjbGVhbnVwIGFuZCBzeW5jaHJvbml6YXRpb24uIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBwcm9wZXJseSB3aXRob3V0IGNhdXNpbmcgZGVhZGxvY2tzLgoKSSBkaWQgYSBzZWNvbmQgbG9vayBhdCBgX19sb29wX2Nscl9mZGAgaW4gYGxvb3AuY2AsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSwgY2hlY2tpbmcgdmFyaWFibGVzLCBldGMuIFRoZSB1c2Ugb2YgYGxpbWAgdG8gc2V0IHRoZSBsb2dpY2FsIGFuZCBwaHlzaWNhbCBibG9jayBzaXplcyB3YXMgYWxyZWFkeSB0aGVyZTsgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55dGhpbmcgbmV3IHdpdGggdGhvc2UgdmFyaWFibGVzLiBUaGV5IGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlaXIgdXNhZ2UuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIGNsZWFudXAgcGF0Y2gsIG5vdGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEFueSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBsb2NraW5nIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCBhc3NlcnRpb25zLiBJIGRvbiYjMzk7dCBzZWUgYW55IG5ldyBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGFueXRoaW5nIGhlcmUuIFNvLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCkkgbmVlZCB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBJJiMzOTtsbCBuZWVkIHRvIGZvcm11bGF0ZSBhIGNsZWFyIGV4cGxhbmF0aW9uLCBwZXJoYXBzIGNvbnRyYXN0aW5nIEtBU0FOIC8gTE9DS0RFUCB3aXRoIEtNU0FOLCB0byBqdXN0aWZ5IG15IGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cblxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBuZXcgYGxvX2Nscl93b3JrYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBuZXcgY2FsbGJhY2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgZGVmYXVsdHMgdG8gTlVMTCBhY3Jvc3Mgc3RhdGljIGRlY2xhcmF0aW9ucyBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTm9uZWAgaW4gUnVzdCBiaW5kaW5ncy5cbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGFuZCBkZWFkbG9jayBpc3N1ZSBkdXJpbmcgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24uIEl0IGludHJvZHVjZXMgYSBgcG9zdF9yZWxlYXNlYCBob29rIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCBleGVjdXRlcyBgX19sb29wX2Nscl9mZCgpYCBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHRvIGF2b2lkIGhvbGRpbmcgYG9wZW5fbXV0ZXhgIHdoaWxlIGZsdXNoaW5nIG91dHN0YW5kaW5nIEkvTyBhbmQgdW5mcmVlemluZyB0aGUgcXVldWUsIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBpbiBgbG9fcG9zdF9yZWxlYXNlKClgIGFuZCBgbG9vcF9yZW1vdmUoKWAuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXG4tIFVzZXItc3BhY2UgZGF0YSBjb3BpZXMgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBObyBkYXRhIGNvcGllZCB0byB1c2VyLXNwYWNlLCBpb2N0bCBvdXRwdXRzLCBwYWNrZXQgaGVhZGVycywgb3IgYnJhbmNoaW5nIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuMzA4MzA0ODg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MDM4MTY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgZGVhZGxvY2sgaXNzdWUgZHVyaW5nIGxvb3AgZGV2aWNlIHJlbGVhc2UgYW5kIHRlYXJkb3duLiBJdCBpbnRyb2R1Y2VzIGEgYHBvc3RfcmVsZWFzZWAgaG9vayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgZXhlY3V0ZXMgYF9fbG9vcF9jbHJfZmQoKWAgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB0byBhdm9pZCBob2xkaW5nIGBvcGVuX211dGV4YCB3aGlsZSBmbHVzaGluZyBvdXRzdGFuZGluZyBJL08gYW5kIHVuZnJlZXppbmcgdGhlIHF1ZXVlLCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24gaW4gYGxvX3Bvc3RfcmVsZWFzZSgpYCBhbmQgYGxvb3BfcmVtb3ZlKClgLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXFxuLSBVc2VyLXNwYWNlIGRhdGEgY29waWVzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeTogTm8gZGF0YSBjb3BpZWQgdG8gdXNlci1zcGFjZSwgaW9jdGwgb3V0cHV0cywgcGFja2V0IGhlYWRlcnMsIG9yIGJyYW5jaGluZyBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuMzA4MzEwMzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU0NzMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YjM1NjNmN2RlMTk5MTQ3OGFhMzU1NWFlMzBhMTEzMmUzNDI3YmZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NDg6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtMTE4OCw2ICsxMTg4LDggQEAgdm9pZCBiZGV2X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmJkZXZfZmlsZSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRpZiAoYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlcG9zdF9yZWxlYXNlKVxcbitcXHRcXHRiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuIFxcbiBcXHRtb2R1bGVfcHV0KGRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZW93bmVyKTtcXG4gcHV0X25vX29wZW46XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdFxcdCpsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRsb19tdXRleDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGlkcl92aXNpYmxlO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsb19jbHJfd29yaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBsb29wX2NtZCB7XFxuQEAgLTExMzYsMTMgKzExMzcsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHA7XFxuIFxcdGdmcF90IGdmcCA9IGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2s7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xcbitcXHQvKlxcbitcXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxcbitcXHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxcbitcXHQgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXJcXG4rXFx0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxcbitcXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlXFxuK1xcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cXG4rXFx0ICovXFxuK1xcdGRyYWluX3dvcmtxdWV1ZShsby1cXHUwMDNld29ya3F1ZXVlKTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvT1xcbitcXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXFxuK1xcdCAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXFxuK1xcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXFxuK1xcdCAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLlxcbitcXHQgKi9cXG4rXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpKTtcXG4rXFxuK1xcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRXQVJOX09OX09OQ0UobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX3J1bmRvd24pO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bG8tXFx1MDAzZWxvX2xvY2spO1xcbiBcXHRmaWxwID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XFxuQEAgLTExNTMsMTIgKzExODMsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdGxvLVxcdTAwM2Vsb19zaXplbGltaXQgPSAwO1xcbiBcXHRtZW1zZXQobG8tXFx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0Llxcbi1cXHQgKlxcbi1cXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxcbi1cXHQgKiAtXFx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxcbi1cXHQgKi9cXG4rXFx0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbkBAIC0xMjAxLDExICsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXFxuLVxcdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcXG4tXFx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4Llxcbi1cXHQgKi9cXG4rXFx0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbiBcXHRmcHV0KGZpbHApO1xcbiB9XFxuIFxcbkBAIC0xNzcxLDggKzE3OTQsMjIgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0bmVlZF9jbGVhciA9IChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbitcXHQgKiBhdm9pZGFuY2UpIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZyBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKVxcbitcXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cXG4rXFx0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuK1xcdCAqL1xcbiBcXHRpZiAobmVlZF9jbGVhcilcXG4tXFx0XFx0X19sb29wX2Nscl9mZChsbyk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG4rXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbkBAIC0xNzkxLDYgKzE4MjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuIFxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuIFxcdC5vcGVuID0gICAgICAgICBsb19vcGVuLFxcbiBcXHQucmVsZWFzZSA9XFx0bG9fcmVsZWFzZSxcXG4rXFx0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcXG4gXFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bCA9XFx0bG9fY29tcGF0X2lvY3RsLFxcbkBAIC0yMDM2LDYgKzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuIFxcdGlmICghbG8pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuIFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbkBAIC0yMTQwLDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbitcXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcbiBcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cXG4gXFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbiBcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uZjA1ZGJhMWI1OTYyZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbkBAIC0xNjA1LDYgKzE2MDUsMTIgQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHtcXG4gXFx0ICogZHJpdmVyLlxcbiBcXHQgKi9cXG4gXFx0aW50ICgqYWx0ZXJuYXRpdmVfZ3B0X3NlY3Rvcikoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90ICpzZWN0b3IpO1xcbitcXHQvKlxcbitcXHQgKiBDYWxsZWQgYWZ0ZXIgZGlzay1cXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cXG4rXFx0ICogVXNlZCBieSBsb29wIGRldmljZXMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gc3luY2hyb25pemF0aW9uIHdpdGhvdXRcXG4rXFx0ICogaG9sZGluZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LiBUaGlzIG9wZXJhdGlvbiBoYXMgdG8gYmUgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzIGIvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNcXG5pbmRleCBmYzk3ZGQ4NzM5NzQ2Li4yZmY3N2VmNDk3ODFiIDEwMDY0NFxcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXFxuKysrIGIvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNcXG5AQCAtMTI5LDYgKzEyOSw3IEBAIHB1YiBmbiBidWlsZFxcdTAwM2NUOiBPcGVyYXRpb25zXFx1MDAzZShcXG4gICAgICAgICAgICAgc3VibWl0X2JpbzogTm9uZSxcXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcXG4gICAgICAgICAgICAgcmVsZWFzZTogTm9uZSxcXG4rICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLFxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcXG4gICAgICAgICAgICAgY29tcGF0X2lvY3RsOiBOb25lLFxcbiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjIwLjg1NDYwNDg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk2Njk5MTkwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBkZXZpY2UgcmVsZWFzZSBoYW5kbGluZyBpbiBibG9jay9iZGV2LmMgYnkgaW50cm9kdWNpbmcgYSBwb3N0X3JlbGVhc2UgY2FsbGJhY2ssIGFuZCByZWZhY3RvcnMgbG9vcCBkZXZpY2UgdGVhcmRvd24gaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYW51cCB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlLCBhZGRpbmcgUkNVIHN5bmNocm9uaXphdGlvbiwgcXVldWUgZnJlZXppbmcvZHJhaW5pbmcsIGxvY2tpbmcgY2hhbmdlcywgYW5kIG5ldyBXQVJOX09OIGFzc2VydGlvbnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBoYW5kbGVzIGNvbXBsZXggY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li43Y2U1YWNhYWNmNDNmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0xMTg4LDYgKzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxuIFx0ZWxzZVxuIFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuK1x0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbiBcbiBcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiBwdXRfbm9fb3BlbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxuK1x0ICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKClcbitcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuK1x0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXG4rXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdC8qXG4rXHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuK1x0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXG4rXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4rXHQgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbFxuK1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUzLDEyICsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTIwMSwxMSArMTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdC8qXG4tXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xuLVx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xuLVx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LlxuLVx0ICovXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc3MSw4ICsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcbitcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4rXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbitcdCAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuK3tcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuIFx0Lm93bmVyID1cdFRISVNfTU9EVUxFLFxuIFx0Lm9wZW4gPSAgICAgICAgIGxvX29wZW4sXG4gXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuK1x0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcbiBcdC5pb2N0bCA9XHRsb19pb2N0bCxcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bCA9XHRsb19jb21wYXRfaW9jdGwsXG5AQCAtMjAzNiw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxNDAsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE2MDUsNiArMTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4rXHQvKlxuK1x0ICogQ2FsbGVkIGFmdGVyIGRpc2stXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cbitcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4rXHQgKiBob2xkaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuXG4rXHQgKi9cbitcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICsxMjksNyBAQCBwdWIgZm4gYnVpbGRcdTAwM2NUOiBPcGVyYXRpb25zXHUwMDNlKFxuICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcbiAgICAgICAgICAgICByZWxlYXNlOiBOb25lLFxuKyAgICAgICAgICAgIHBvc3RfcmVsZWFzZTogTm9uZSxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsXG4gICAgICAgICAgICAgY2hlY2tfZXZlbnRzOiBOb25lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuODU0NjA2MjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwODE3OTg1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEJsb2NrIExheWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBpZGVudGlmeWluZyB3aGV0aGVyIHRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoeSBvZiBmdXp6aW5nLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdGVhcmRvd24gYW5kIHJlbGVhc2UsIGFuZCB0aGF0J3MgYW4gYXJlYSBJIGtub3cgaGFzIGJlZW4gYSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdGhlIHBhc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlcy4gRmlyc3QsIGBibG9jay9iZGV2LmNgIGludHJvZHVjZXMgYSBjYWxsIHRvIGEgYHBvc3RfcmVsZWFzZSgpYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBiZGV2X3JlbGVhc2UoKWAgZnVuY3Rpb24sIGJ1dCBjcnVjaWFsbHksIG9ubHkgaWYgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgYGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vmb3BzYC4gVGhpcyBpcyB0aGUgY29yZSBibG9jayBsYXllci4gVGhpcyBwb2ludHMgdG8gdGhlIHJlYWwgaGVhdnkgbGlmdGluZyBiZWluZyBkb25lIGJ5IHRoZSBjaGFuZ2UgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC5cblxuYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB3aGVyZSB0aGUgbWVhdCBvZiBpdCBpczogYSByZWZhY3RvciBvZiBzZXZlcmFsIGtleSBsb29wIGRldmljZSBmdW5jdGlvbnMgbGlrZSBgX19sb29wX2Nscl9mZCgpYCwgYGxvX3JlbGVhc2UoKWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlKClgLiBUaGlzIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBhIHdvcmtxdWV1ZSBpdGVtLCBgbG9fY2xyX3dvcmtgLCB0aGUgcXVldWluZyBhbmQgZmx1c2hpbmcgb2Ygd29yayBpbiBgbG9fcG9zdF9yZWxlYXNlKClgLCBhbmQgY2hhbmdlcyB0byB0aGUgcHJvY2VzcyBpbnZvbHZpbmcgcXVldWUgZnJlZXplL2RyYWluL3N5bmNocm9uaXplX3JjdSBpbiBgX19sb29wX2Nscl9mZCgpYC4gVGhlcmUncyBhbHNvIHRoZSBhZGRpdGlvbiBvZiBgV0FSTl9PTl9PTkNFYC4gVGhpcyBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGxvY2tpbmcgYW5kIGhvdyBhc3luY2hyb25vdXMgd29yayBpcyBoYW5kbGVkIGR1cmluZyBsb29wIGRldmljZSB0ZWFyZG93biwgYW5kIGFsdGVycyBsb2NraW5nIG9yZGVyIHdoaWNoIG1ha2VzIGl0IHJpcGUgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MuXG5cbkFkZGl0aW9uYWxseSwgd2UgaGF2ZSB1cGRhdGVzIHRvIGBpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oYCwgd2hlcmUgdGhleSdyZSBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBwb2ludGVyIHRvIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiB3aGVuIGRlZmluaW5nIGEgbmV3IGhvb2suIFRoZW4sIHRoZXJlJ3MgYSBtaW5vciBjaGFuZ2UgaW4gdGhlIFJ1c3QgY29kZSBpbiBgcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNgLCB3aGVyZSBgcG9zdF9yZWxlYXNlYCBpcyBpbml0aWFsaXplZCB0byBgTm9uZWAuIFRoaXMgSSBhc3N1bWUgaXMganVzdCB0byBpbml0aWFsaXplIGl0IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIG5vIGltcGxlbWVudGF0aW9uIGluIFJ1c3QuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsICpjYW4qIHRoaXMgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBMb29wIGRldmljZXMgYXJlIGNyZWF0ZWQsIGNvbmZpZ3VyZWQsIG9wZW5lZCwgYW5kIGNsb3NlZCB1c2luZyBgaW9jdGxgIGNhbGxzIGxpa2UgYExPT1BfU0VUX0ZEYCBhbmQgYExPT1BfQ0xSX0ZEYC4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgaG93IHRvIHRyaWdnZXIgdGhpcyBsaWZlY3ljbGUuIFRoZSBhZGRpdGlvbiBvZiBhc3luY2hyb25vdXMgd29yaywgbW9kaWZpZWQgbG9ja2luZyBvcmRlciwgYW5kIHRoZSBgV0FSTl9PTl9PTkNFYCBhbGwgc2NyZWFtIFwiaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyFcIiBJIGNhbiBhbHJlYWR5IGltYWdpbmUgdGhlIHJhY2UgY29uZGl0aW9ucy4uLlxuXG5Ob3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhlIGxvb3AgZGV2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgY291bGQgcHJldmVudCB0aGlzIGZyb20gYmVpbmcgcmVhY2hhYmxlLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG9yIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIGNvbmZpcm0sIGJ1dCBmcm9tIHdoYXQgSSdtIHNlZWluZyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MzQuOTM2NDEyOTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MzQuOTg0NTUwMDI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzI4Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYEtjb25maWdgIGZpbGVzLCBlc3BlY2lhbGx5IGluIHRoZSBibG9jayBkZXZpY2UgYXJlYS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgcmVzaWRlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIHBlcmhhcHMgZXZlbiBzb21lIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlbiBhbmQgaG93IGBCTEtfREVWX0xPT1BgIGlzIGV4cG9zZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHByb3BlciBjb25maWd1cmF0aW9uIGFuZCB0cm91Ymxlc2hvb3RpbmcsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjM3Ljk0MTgzNjMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODozNy45NDE5MTQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDY4MTA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCBhcyBhbHRlcmVkOiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvX3Bvc3RfcmVsZWFzZWAsIGBsb29wX3JlbW92ZWAsIGBsb29wX2FkZGAsIGFuZCBgYmRldl9yZWxlYXNlYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCB0aGVpciBpbXBhY3QgaXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGJyb2FkZW4gbXkgc2NvcGUgYSBiaXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGBsb29wLmNgIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZXhwbGljaXRseSBmbGFnZ2VkPyBJJ2xsIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cbk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiBgX19sb29wX2Nscl9mZGAsIGFuZCBpdHMgY2xvc2UgcmVsYXRpb24gYGxvb3BfY2xyX2ZkYCwgYW5kIGBsb19yZWxlYXNlYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGlzIHBhcmFtb3VudCB0byBmaWd1cmluZyBvdXQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQxLjA4ODcyODczOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ5NDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xvb3BfY2xyX2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk3PXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDk6ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpL19fbG9vcF9jbHJfZmQoKSBjYWxscy5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTAtICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDA2PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTQwOnN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNy1cXHQgKiBsby1cXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTg6XFx0ICogZmluaXNoZWQuIFRoZXJlIGNhbm5vdCBiZSBhbnlib2R5IGVsc2UgZW50ZXJpbmcgX19sb29wX2Nscl9mZCgpIGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOS1cXHQgKiBMb19ydW5kb3duIHN0YXRlIHByb3RlY3RzIHVzIGZyb20gYWxsIHRoZSBvdGhlciBwbGFjZXMgdHJ5aW5nIHRvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzc3PXN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVxcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3OTk6XFx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODAwLVxcdCAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgwNz1zdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MTE6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNjE9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzYtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA3NzpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3OC1cXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODEte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODI6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODMtXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NDEuMTM4MjI4NDA4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTAwMzE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBDbGVhcmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9vcCBkZXZpY2UgY2xlYXJpbmcgcHJvY2Vzcy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQncyB6ZXJvIGluIG9uIHRoZSBgbG9vcF9jbHJfZmRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb29wIGRldmljZSdzIGZpbGUgZGVzY3JpcHRvciBnZXRzIGNsZWFyZWQgd2hlbiBpdCdzIHJlbGVhc2VkIG9yIGRldGFjaGVkLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIGZyZWVpbmcgcmVzb3VyY2VzIGFuZCBicmVha2luZyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsb29wIGRldmljZSBhbmQgaXRzIGJhY2tpbmcgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQzLjQ1MzIzNDA0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9jbHJfZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDY9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDA6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVxcdCAqIGxvLVxcdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcXHQgKiBmaW5pc2hlZC4gVGhlcmUgY2Fubm90IGJlIGFueWJvZHkgZWxzZSBlbnRlcmluZyBfX2xvb3BfY2xyX2ZkKCkgYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVxcdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIzNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQwLVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNDE6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQyLVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTYyPXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5My1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1OTQ6XFx0XFx0cmV0dXJuIGxvb3BfY2xyX2ZkKGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTk1LVxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc3Nz1zdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5OC1cXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5OlxcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgwMC1cXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MDc9c3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxMC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODExOlxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEyLVxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDc2LVxcdFxcdGdvdG8gb3V0O1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwNzc6XFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXFx0bG8tXFx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIxODA9c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTgxLXtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTgzLVxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQzLjUwMjYxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0ODM5MTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvb3BfY2xyX2ZkYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBpbiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYGxvb3BfY2xyX2ZkYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIGtub3cgdGhhdCdzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmFja2luZyBmaWxlIGZvciBhIGxvb3AgZGV2aWNlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBhcnRpY3VsYXJseSBhcm91bmQgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtYXliZSBzb21lIHN1YnRsZSBlZGdlIGNhc2VzIGludm9sdmluZyBlcnJvciBoYW5kbGluZyB3aGVuIGNsb3NpbmcgdGhlIGZpbGUuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2xlYW51cCBpcyBkb25lIHJpZ2h0LiBJJ20gY29uc2lkZXJpbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXJlJ3MgYSByaXNrIG9mIGxlYWtpbmcgZmlsZSBkZXNjcmlwdG9ycyBvciBjYXVzaW5nIGEgcmVzb3VyY2UgZXhoYXVzdGlvbiBhdHRhY2sgaWYgdGhlIGNsZWFudXAgaXNuJ3Qgcm9idXN0LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQ4LjA1MTAwOTkwNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNDpcXHRcXG4xMjM1OlxcdHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4xMjM2OlxcdHtcXG4xMjM3OlxcdFxcdGludCBlcnI7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdC8qXFxuMTI0MDpcXHRcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG4xMjQxOlxcdFxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuMTI0MjpcXHRcXHQgKlxcbjEyNDM6XFx0XFx0ICogVGhlcmVmb3JlLCB1c2UgZ2xvYmFsIGxvY2sgd2hlbiBzZXR0aW5nIExvX3J1bmRvd24gc3RhdGUgaW4gb3JkZXIgdG9cXG4xMjQ0OlxcdFxcdCAqIG1ha2Ugc3VyZSB0aGF0IGxvb3BfdmFsaWRhdGVfZmlsZSgpIHdpbGwgZmFpbCBpZiB0aGUgXFxcInN0cnVjdCBmaWxlXFxcIlxcbjEyNDU6XFx0XFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcXG4xMjQ2OlxcdFxcdCAqIGxvb3AgZGV2aWNlLlxcbjEyNDc6XFx0XFx0ICovXFxuMTI0ODpcXHRcXHRlcnIgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCB0cnVlKTtcXG4xMjQ5OlxcdFxcdGlmIChlcnIpXFxuMTI1MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNTE6XFx0XFx0aWYgKGxvLVxcdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xcbjEyNTI6XFx0XFx0XFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcXG4xMjUzOlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuMTI1NDpcXHRcXHR9XFxuMTI1NTpcXHRcXHQvKlxcbjEyNTY6XFx0XFx0ICogTWFyayB0aGUgZGV2aWNlIGZvciByZW1vdmluZyB0aGUgYmFja2luZyBkZXZpY2Ugb24gbGFzdCBjbG9zZS5cXG4xMjU3OlxcdFxcdCAqIElmIHdlIGFyZSB0aGUgb25seSBvcGVuZXIsIGFsc28gc3dpdGNoIHRoZSBzdGF0ZSB0byByb3VuZG93biBoZXJlIHRvXFxuMTI1ODpcXHRcXHQgKiBwcmV2ZW50IG5ldyBvcGVuZXJzIGZyb20gY29taW5nIGluLlxcbjEyNTk6XFx0XFx0ICovXFxuMTI2MDpcXHRcXG4xMjYxOlxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19BVVRPQ0xFQVI7XFxuMTI2MjpcXHRcXHRpZiAoZGlza19vcGVuZXJzKGxvLVxcdTAwM2Vsb19kaXNrKSA9PSAxKVxcbjEyNjM6XFx0XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xcbjEyNjQ6XFx0XFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHR9XFxuMTI2ODpcXHRcXG4xMjY5OlxcdHN0YXRpYyBpbnRcXG4xMjcwOlxcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXFxuMTI3MTpcXHR7XFxuMTI3MjpcXHRcXHRpbnQgZXJyO1xcbjEyNzM6XFx0XFx0Ym9vbCBwYXJ0c2NhbiA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo0OC4wNTEyOTI4MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MTM4NTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHN0YXJ0aW5nIHdpdGggYSBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBsb19yZWxlYXNlYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBsb19yZWxlYXNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBJIG5lZWQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBsaWtlbHkgYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlIG9mIGxvb3BiYWNrIGRldmljZXMuIEl0IGNvdWxkIGJlIGFib3V0IHJlc291cmNlIGNsZWFudXAsIGhhbmRsaW5nIGRldmljZSBjbG9zdXJlLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS4gXG5cbkdpdmVuIG15IGJhY2tncm91bmQsIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIGRldmljZSBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBob3cgYGxvX3JlbGVhc2VgIGludGVyYWN0cyB3aXRoIG90aGVyIGtleSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIsIGxpa2UgYGxvX29wZW5gLCBgbG9faW9jdGxgLCBhbmQgYW55IGludGVycnVwdCBoYW5kbGVycyBpZiB0aGV5IGV4aXN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93OlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgcmVzb3VyY2VzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2hlbiByZWxlYXNpbmcgcmVzb3VyY2VzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3IgYXRvbWljIG9wZXJhdGlvbnMuXG4qICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIFdoYXQgcmVzb3VyY2VzIGlzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCBob3cgaXMgaXQgZG9pbmcgc28/IEknbSB0aGlua2luZyBvZiBtZW1vcnkgYWxsb2NhdGlvbnMsIGZpbGUgZGVzY3JpcHRvcnMgKGlmIGFwcGxpY2FibGUpLCBhbmQgZGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZXMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhbiBlcnJvciBkdXJpbmcgdGhlIHJlbGVhc2UgcHJvY2Vzcz8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBwYXJ0aWFsIHJlbGVhc2Ugb3IgcmVwb3J0IGVycm9ycyBhcHByb3ByaWF0ZWx5P1xuKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBWRlM6KiogSG93IGRvZXMgYGxvX3JlbGVhc2VgIGltcGFjdCB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKT8gRG9lcyBpdCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGludmFsaWRhdGUgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBub3RpZnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHM/XG5cbk15IG1lbnRhbCBjaGVja2xpc3QgZ29lcyBmdXJ0aGVyIHRoYW4gdGhpcywgb2YgY291cnNlLCBiZWNhdXNlIEkgbmVlZCB0byBjaGVjayBhbGwgYXNwZWN0cyBvZiB0aGUgY29kZSwgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gYXQgaGFuZCBpZiB0aGVyZSBpcyBhIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo1MS42MzI2ODE2MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NzU6XFx0fVxcbjE3NzY6XFx0XFxuMTc3NzpcXHRzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbjE3Nzg6XFx0e1xcbjE3Nzk6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNzgwOlxcdFxcdGJvb2wgbmVlZF9jbGVhciA9IGZhbHNlO1xcbjE3ODE6XFx0XFxuMTc4MjpcXHRcXHRpZiAoZGlza19vcGVuZXJzKGRpc2spIFxcdTAwM2UgMClcXG4xNzgzOlxcdFxcdFxcdHJldHVybjtcXG4xNzg0OlxcdFxcdC8qXFxuMTc4NTpcXHRcXHQgKiBDbGVhciB0aGUgYmFja2luZyBkZXZpY2UgaW5mb3JtYXRpb24gaWYgdGhpcyBpcyB0aGUgbGFzdCBjbG9zZSBvZlxcbjE3ODY6XFx0XFx0ICogYSBkZXZpY2UgdGhhdCdzIGJlZW4gbWFya2VkIGZvciBhdXRvIGNsZWFyLCBvciBvbiB3aGljaCBMT09QX0NMUl9GRFxcbjE3ODc6XFx0XFx0ICogaGFzIGJlZW4gY2FsbGVkLlxcbjE3ODg6XFx0XFx0ICovXFxuMTc4OTpcXHRcXG4xNzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuMTc5MTpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlID09IExvX2JvdW5kIFxcdTAwMjZcXHUwMDI2IChsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19BVVRPQ0xFQVIpKVxcbjE3OTI6XFx0XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xcbjE3OTM6XFx0XFxuMTc5NDpcXHRcXHRuZWVkX2NsZWFyID0gKGxvLVxcdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcXG4xNzk1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0LypcXG4xNzk4OlxcdFxcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbjE3OTk6XFx0XFx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcXG4xODAwOlxcdFxcdCAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLlxcbjE4MDE6XFx0XFx0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuMTgwMjpcXHRcXHQgKi9cXG4xODAzOlxcdFxcdGlmIChuZWVkX2NsZWFyKVxcbjE4MDQ6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuMTgwNTpcXHR9XFxuMTgwNjpcXHRcXG4xODA3OlxcdHN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4xODA4OlxcdHtcXG4xODA5OlxcdFxcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG4xODEyOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NTEuNjMyODQzNTY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTQwNDM1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqQ2hlY2tpbmcgYmRldl9yZWxlYXNlIGluIGJsb2NrL2JkZXYuYyoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBhcmVhLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gR2l2ZW4gd2hhdCBJJ20gbG9va2luZyBhdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgYmRldl9yZWxlYXNlYCBmdW5jdGlvbiBpbiBgYmxvY2svYmRldi5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBhbmQgY291bGQgZWFzaWx5IGJlIHRoZSBzb3VyY2Ugb2Ygc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgY2xlYW51cCBvciBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHJvbGUgYW5kIG1ha2Ugc3VyZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbnRleHQgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJdCdzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZTsgYWx3YXlzIGJldHRlciB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjUzLjU0Njg5MDg2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAoaG9sZGVyKVxcbjExNzc6XFx0XFx0XFx0YmRfeWllbGRfY2xhaW0oYmRldl9maWxlKTtcXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0LypcXG4xMTgwOlxcdFxcdCAqIFRyaWdnZXIgZXZlbnQgY2hlY2tpbmcgYW5kIHRlbGwgZHJpdmVycyB0byBmbHVzaCBNRURJQV9DSEFOR0VcXG4xMTgxOlxcdFxcdCAqIGV2ZW50LiAgVGhpcyBpcyB0byBlbnN1cmUgZGV0ZWN0aW9uIG9mIG1lZGlhIHJlbW92YWwgY29tbWFuZGVkXFxuMTE4MjpcXHRcXHQgKiBmcm9tIHVzZXJsYW5kIC0gZS5nLiBlamVjdCgxKS5cXG4xMTgzOlxcdFxcdCAqL1xcbjExODQ6XFx0XFx0ZGlza19mbHVzaF9ldmVudHMoZGlzaywgRElTS19FVkVOVF9NRURJQV9DSEFOR0UpO1xcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikpXFxuMTE4NzpcXHRcXHRcXHRibGtkZXZfcHV0X3BhcnQoYmRldik7XFxuMTE4ODpcXHRcXHRlbHNlXFxuMTE4OTpcXHRcXHRcXHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xcbjExOTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4xMTkxOlxcdFxcdGlmIChiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UpXFxuMTE5MjpcXHRcXHRcXHRiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdG1vZHVsZV9wdXQoZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIpO1xcbjExOTU6XFx0cHV0X25vX29wZW46XFxuMTE5NjpcXHRcXHRibGtkZXZfcHV0X25vX29wZW4oYmRldik7XFxuMTE5NzpcXHR9XFxuMTE5ODpcXHRcXG4xMTk5OlxcdC8qKlxcbjEyMDA6XFx0ICogYmRldl95aWVsZF9jbGFpbSAtIGdpdmUgdXAgdGhlIGhvbGRlciBjbGFpbSBvbiBhbiBvcGVuIGJsb2NrIGRldmljZVxcbjEyMDE6XFx0ICogQGJkZXZfZmlsZTogb3BlbiBibG9jayBkZXZpY2VcXG4xMjAyOlxcdCAqXFxuMTIwMzpcXHQgKiBZaWVsZCB0aGUgaG9sZGVyIGFuZCBhbnkgd3JpdGUgYWNjZXNzIGZvciBAYmRldl9maWxlIHdpdGhvdXQgY2xvc2luZyBpdCwgc29cXG4xMjA0OlxcdCAqIHRoZSBjYWxsZXIgY2FuIHN0aWxsIGFjdCBvbiB0aGUgZGV2aWNlIC0gZS5nLiBiZGV2X2FsbG93X2ZyZWV6ZSgpIGl0IC0gYmVmb3JlXFxuMTIwNTpcXHQgKiB0aGUgZmluYWwgYmRldl9mcHV0KCkuICBiZGV2X2ZwdXQoKSB5aWVsZHMgdG9vLCBzbyBjYWxsaW5nIGl0IGFmdGVyd2FyZHMgaXNcXG4xMjA2OlxcdCAqIHNhZmUuXFxuMTIwNzpcXHQgKi9cXG4xMjA4OlxcdHZvaWQgYmRldl95aWVsZF9jbGFpbShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxcbjEyMDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo1My41NDcwOTA1NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMxMTk1MzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogQmxvY2sgRGV2aWNlIFJlbGVhc2Ugd2l0aCBMb29wIERldmljZSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIExldCdzIGJyZWFrIGl0IGRvd246IEZpcnN0LCBpdCBsb29rcyBsaWtlIGEgYHBvc3RfcmVsZWFzZWAgY2FsbGJhY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgYW5kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGBvcGVuX211dGV4YCBpcyBkcm9wcGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNoYW5nZSBpbiB0aGUgbG9vcCBkZXZpY2UgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBgX19sb29wX2Nscl9mZGAsIHdoaWNoIHVzZWQgdG8gYmUgc3luY2hyb25vdXMgd2l0aGluIGBsb19yZWxlYXNlYCAod2hpbGUgaG9sZGluZyB0aGF0IGNyaXRpY2FsIGBvcGVuX211dGV4YCksIGlzIG5vdyBiZWluZyBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYHN5c3RlbV9sb25nX3dxYCkuXG5cbmBsb19yZWxlYXNlYCBub3cgcXVldWVzIGBsby1cdTAwM2Vsb19jbHJfd29ya2AsIGFuZCB0aGUgbmV3IGBsb19wb3N0X3JlbGVhc2VgIGZsdXNoZXMgdGhhdCB3b3JrcXVldWUgKmFmdGVyKiB0aGUgYG9wZW5fbXV0ZXhgIGlzIGRyb3BwZWQuIFdpdGhpbiBgX19sb29wX2Nscl9mZGAgaXRzZWxmLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNldmVyYWwgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXM6IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGBibGtfbXFfZnJlZXplX3F1ZXVlYCAvIGBibGtfbXFfdW5mcmVlemVfcXVldWVgLCBhbmQgaW1wb3J0YW50bHksIGl0J3MgKmxvY2tpbmcqIGBvcGVuX211dGV4YCBhdCBzdGVwIDIuIEEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGlzIGFsc28gaW50cm9kdWNlZCB0byBjaGVjayBgbG8tXHUwMDNlbG9fc3RhdGVgLiBGdXJ0aGVyLCBgbG9vcF9yZW1vdmVgIGFsc28gZmx1c2hlcyBgbG8tXHUwMDNlbG9fY2xyX3dvcmtgLlxuXG5JcyB0aGlzIHJpcGUgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGNvcmUgYmxvY2sgZGV2aWNlIGNsZWFudXAgKGBiZGV2X3JlbGVhc2VgKSBhbmQgbG9vcCBkZXZpY2UgY2xlYW51cC4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYXZhaWxhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgZnV6emluZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBjb25jdXJyZW5jeSBhc3BlY3RzLCBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGhhbmRsaW5nLCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nLCB3b3JrcXVldWUgZHJhaW5pbmcsIGNoYW5naW5nIGxvY2sgb3JkZXJzIChgb3Blbl9tdXRleGAsIGBsb19tdXRleGAsIGBsb19sb2NrYCksIGFuZCBhZGRzIGEgcnVudGltZSBhc3NlcnRpb24sIGFsbCBvZiB3aGljaCBhcmUgY2xhc3NpYyB0YXJnZXRzIGZvciBjb25jdXJyZW5jeSBidWdzIGxpa2UgZGVhZGxvY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMuIEkgY2FuIHByYWN0aWNhbGx5IHNtZWxsIHRoZSBwb3RlbnRpYWwgYnVncy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9fcG9zdF9yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfcmVtb3ZlYCwgYW5kIGBiZGV2X3JlbGVhc2VgLiBOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgYXJlIGFsbCBleGFjdCBmdW5jdGlvbiBuYW1lcyBpbiB0aGUgQyBjb2RlOiBPa2F5LCBgX19sb29wX2Nscl9mZGAgaXMgYHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKWAuIGBsb19yZWxlYXNlYCBpcyBgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylgLiBgbG9fcG9zdF9yZWxlYXNlYCBpcyBgc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKWAuIGBsb29wX2Nscl9mZGAgaXMgYHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylgLiBgbG9vcF9yZW1vdmVgIGlzIGBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKWAuIEFuZCBmaW5hbGx5LCBgYmRldl9yZWxlYXNlYCBpcyBgdm9pZCBiZGV2X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmJkZXZfZmlsZSlgLiBHb29kLCBhbGwgY29uZmlybWVkLlxuXG5JIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxPQ0tgLiBgQkxLX0RFVl9MT09QYCBkZXBlbmRzIG9uIGBCTE9DS2AuIEkgcXVpY2tseSBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kIGFzIGV4cGVjdGVkLCBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdXJ0aGVyIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gQWxyaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NTkuODU5MDQ3MjM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM3MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIEJMS19ERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2Om1lbnVjb25maWcgQkxLX0RFVlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03LVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjU5LjkyMTQzMTUyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ2MjU3NzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2V0dXAgaGVyZS4gV2UncmUgbGV2ZXJhZ2luZyBgQkxLX0RFVl9MT09QYCwgd2hpY2ggaXMgdGhlIHByaW1hcnkgZHJpdmVyLCBhbmQgYWxzbyBlbmFibGluZyBgQkxPQ0tgIGFzIGEga2VybmVsIGNvbmZpZyBvcHRpb24uIFN0YW5kYXJkIHN0dWZmLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBgc2V0LXJlc3VsdHNgIGlzIGZvcm1hdHRlZCBjb3JyZWN0bHksIGdvaW5nIHRocm91Z2ggdGhlIGFyZ3VtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBlbmFibGluZyBgQkxLX0RFVl9MT09QYCBhbmQgYEJMT0NLYCB3aXRoIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2hpY2ggaXMgY29ycmVjdCwgYW5kIHRhcmdldGluZyBvdXIgZnV6emluZyB3aXRoIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIGFwcHJvcHJpYXRlbHkgc3BlY2lmaWMgYW5kIHJlbGV2YW50OiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvX3Bvc3RfcmVsZWFzZWAsIGBsb29wX2Nscl9mZGAsIGBiZGV2X3JlbGVhc2VgLCBhbmQgYGxvb3BfcmVtb3ZlYCAtIHRoZXNlIG1ha2Ugc2Vuc2UgdG8gYmUgdGFyZ2V0ZWQgYXMgdGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHBhdGNoIGNoYW5nZXMuIFRoZSBcIlJlYXNvbmluZ1wiIGlzIGNvbmNpc2UsIHdoaWNoIGlzIGdvb2QuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGV2ZXJ5dGhpbmcgb25lIG1vcmUgdGltZS4gV2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2gsIHNvIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgc3BlY2lmaWMsIHNvIHRoZXkgYXJlIG5vbi11YmlxdWl0b3VzLCBhbmQgYXJlIHNwZWNpZmljIHRvIHRoZSBwYXRjaCBjaGFuZ2VzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLiBBbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhci5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ5OjEwLjM4NDAxMjgyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDUwNTExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBkZXZpY2UgcmVsZWFzZSBoYW5kbGluZyBpbiBibG9jay9iZGV2LmMgYnkgaW50cm9kdWNpbmcgYSBwb3N0X3JlbGVhc2UgY2FsbGJhY2ssIGFuZCByZWZhY3RvcnMgbG9vcCBkZXZpY2UgdGVhcmRvd24gaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYW51cCB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlLCBhZGRpbmcgUkNVIHN5bmNocm9uaXphdGlvbiwgcXVldWUgZnJlZXppbmcvZHJhaW5pbmcsIGxvY2tpbmcgY2hhbmdlcywgYW5kIG5ldyBXQVJOX09OIGFzc2VydGlvbnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBoYW5kbGVzIGNvbXBsZXggY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19yZWxlYXNlXCIsXG4gICAgXCJsb19wb3N0X3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJiZGV2X3JlbGVhc2VcIixcbiAgICBcImxvb3BfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MTAuNTI0NTMwODEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NzU4MjEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ5OjEwLjUyNzU2MDk1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMTg0NTQ3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIG5ldyBgbG9fY2xyX3dvcmtgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIG5ldyBjYWxsYmFjayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBkZWZhdWx0cyB0byBOVUxMIGFjcm9zcyBzdGF0aWMgZGVjbGFyYXRpb25zIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOb25lYCBpbiBSdXN0IGJpbmRpbmdzLlxcbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li43Y2U1YWNhYWNmNDNmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0xMTg4LDYgKzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxuIFx0ZWxzZVxuIFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuK1x0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbiBcbiBcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiBwdXRfbm9fb3BlbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxuK1x0ICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKClcbitcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuK1x0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXG4rXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdC8qXG4rXHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuK1x0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXG4rXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4rXHQgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbFxuK1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUzLDEyICsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTIwMSwxMSArMTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdC8qXG4tXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xuLVx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xuLVx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LlxuLVx0ICovXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc3MSw4ICsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcbitcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4rXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbitcdCAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuK3tcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuIFx0Lm93bmVyID1cdFRISVNfTU9EVUxFLFxuIFx0Lm9wZW4gPSAgICAgICAgIGxvX29wZW4sXG4gXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuK1x0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcbiBcdC5pb2N0bCA9XHRsb19pb2N0bCxcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bCA9XHRsb19jb21wYXRfaW9jdGwsXG5AQCAtMjAzNiw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxNDAsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE2MDUsNiArMTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4rXHQvKlxuK1x0ICogQ2FsbGVkIGFmdGVyIGRpc2stXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cbitcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4rXHQgKiBob2xkaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuXG4rXHQgKi9cbitcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICsxMjksNyBAQCBwdWIgZm4gYnVpbGRcdTAwM2NUOiBPcGVyYXRpb25zXHUwMDNlKFxuICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcbiAgICAgICAgICAgICByZWxlYXNlOiBOb25lLFxuKyAgICAgICAgICAgIHBvc3RfcmVsZWFzZTogTm9uZSxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsXG4gICAgICAgICAgICAgY2hlY2tfZXZlbnRzOiBOb25lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MTAuNTI3NTYzNzYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTg0NTI2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgQXNzZXNzbWVudDogUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzIFwibm8sXCIgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkZpcnN0LCBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzLiBJdCdzIGVzc2VudGlhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgY2xlYW51cCBvZiBsb29wIGRldmljZXMuIFdlJ3ZlIGdvdCBgYmxvY2svYmRldi5jYCBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBjYWxsLCBgZHJpdmVycy9ibG9jay9sb29wLmNgIHJld29ya2luZyB0aGUgbG9vcCBkZXZpY2UncyBsaWZlY3ljbGUgd2l0aCB3b3JrcXVldWVzLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdXBkYXRlcyB0byB0aGUgYGJsa2Rldi5oYCBpbmNsdWRlIGFuZCB0aGUgUnVzdCBzaWRlIChgZ2VuX2Rpc2sucnNgKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBkZWZlcnJpbmcgdGhlIGNsZWFudXAsIHVzaW5nIHdvcmtxdWV1ZXMgdG8gYXZvaWQgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBkdXJpbmcgZGV2aWNlIHJlbGVhc2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxvX2Nscl93b3JrYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlYCBhcmUgYWxsIGFib3V0IHRoaXMgZGVmZXJyZWQgY2xlYW51cCBtZWNoYW5pc20gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuTm93LCB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBsaWtlIHVzZS1hZnRlci1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gTE9DS0RFUCBkZWFscyB3aXRoIGxvY2sgb3JkZXJpbmcgYW5kIGRlYWRsb2NrIGRldGVjdGlvbi5cblxuTG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncy4gYGxvYCBpcyBiZWluZyB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgIGluIGBsb29wX2FkZGAsIGFuZCB3ZSBoYXZlIGBJTklUX1dPUktgIGluaXRpYWxpemluZyB0aGUgYHdvcmtfc3RydWN0YC4gV2UgZXhwbGljaXRseSBzZXQgYHBvc3RfcmVsZWFzZWAgdG8gYE5vbmVgIGluIHRoZSBSdXN0IHNpZGUgb3IgaXQncyBpbXBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gQywgd2l0aCBhIE5VTEwgY2hlY2sgYmVmb3JlIGNhbGxpbmcgaXQsIGFzIGluIHRoZSBgYmRldl9yZWxlYXNlKClgIGZ1bmN0aW9uLiBUaGUgd29yayBmdW5jdGlvbiBgX19sb29wX2Nscl9mZGAgaXMgcmV0cmlldmluZyBpdHMgbG9vcF9kZXZpY2UgdXNpbmcgY29udGFpbmVyX29mLCB3aGljaCBtZWFucyBubyBwb2ludGVycyBhcmUgYmVpbmcgdXNlZCBiZWZvcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gbmV3IGBjb3B5X3RvX3VzZXJgLCBubyBpb2N0bCBvdXRwdXQgc3RydWN0cyBiZWluZyBjaGFuZ2VkLCBubyBidWZmZXIgbGVuZ3RocyBiZWluZyBjaGFuZ2VkLiBUaGUgcGF0Y2ggaXMgdmVyeSBmb2N1c2VkIG9uIGRlZmVycmVkIGNsZWFudXAgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQncyBhYm91dCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgcHJvcGVybHkgd2l0aG91dCBjYXVzaW5nIGRlYWRsb2Nrcy5cblxuSSBkaWQgYSBzZWNvbmQgbG9vayBhdCBgX19sb29wX2Nscl9mZGAgaW4gYGxvb3AuY2AsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSwgY2hlY2tpbmcgdmFyaWFibGVzLCBldGMuIFRoZSB1c2Ugb2YgYGxpbWAgdG8gc2V0IHRoZSBsb2dpY2FsIGFuZCBwaHlzaWNhbCBibG9jayBzaXplcyB3YXMgYWxyZWFkeSB0aGVyZTsgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyBuZXcgd2l0aCB0aG9zZSB2YXJpYWJsZXMuIFRoZXkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGVpciB1c2FnZS5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBjbGVhbnVwIHBhdGNoLCBub3RoaW5nIHRvIGRvIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLiBBbnkgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3IgbG9ja2luZyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucy4gSSBkb24ndCBzZWUgYW55IG5ldyBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGFueXRoaW5nIGhlcmUuIFNvLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuSSBuZWVkIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIEknbGwgbmVlZCB0byBmb3JtdWxhdGUgYSBjbGVhciBleHBsYW5hdGlvbiwgcGVyaGFwcyBjb250cmFzdGluZyBLQVNBTiAvIExPQ0tERVAgd2l0aCBLTVNBTiwgdG8ganVzdGlmeSBteSBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwNywiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MjIuNzEyMDkzMjE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIG5ldyBgbG9fY2xyX3dvcmtgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIG5ldyBjYWxsYmFjayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBkZWZhdWx0cyB0byBOVUxMIGFjcm9zcyBzdGF0aWMgZGVjbGFyYXRpb25zIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOb25lYCBpbiBSdXN0IGJpbmRpbmdzLlxcbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgZGVhZGxvY2sgaXNzdWUgZHVyaW5nIGxvb3AgZGV2aWNlIHJlbGVhc2UgYW5kIHRlYXJkb3duLiBJdCBpbnRyb2R1Y2VzIGEgYHBvc3RfcmVsZWFzZWAgaG9vayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgZXhlY3V0ZXMgYF9fbG9vcF9jbHJfZmQoKWAgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB0byBhdm9pZCBob2xkaW5nIGBvcGVuX211dGV4YCB3aGlsZSBmbHVzaGluZyBvdXRzdGFuZGluZyBJL08gYW5kIHVuZnJlZXppbmcgdGhlIHF1ZXVlLCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24gaW4gYGxvX3Bvc3RfcmVsZWFzZSgpYCBhbmQgYGxvb3BfcmVtb3ZlKClgLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXFxuLSBVc2VyLXNwYWNlIGRhdGEgY29waWVzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeTogTm8gZGF0YSBjb3BpZWQgdG8gdXNlci1zcGFjZSwgaW9jdGwgb3V0cHV0cywgcGFja2V0IGhlYWRlcnMsIG9yIGJyYW5jaGluZyBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkwd24[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 12:29:16 +0000 UTC FinishedAt: 2026-09-09 12:49:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd660a0e0fee1bc892e16fdb6abdf92676515175", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd660a0e0fee1bc892e16fdb6abdf92676515175", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLOCK" ], "series_id": "8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__loop_clr_fd", "lo_release", "lo_post_release", "loop_clr_fd", "bdev_release", "loop_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGFuZCBkZWFkbG9jayBpc3N1ZSBkdXJpbmcgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24uIEl0IGludHJvZHVjZXMgYSBgcG9zdF9yZWxlYXNlYCBob29rIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCBleGVjdXRlcyBgX19sb29wX2Nscl9mZCgpYCBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHRvIGF2b2lkIGhvbGRpbmcgYG9wZW5fbXV0ZXhgIHdoaWxlIGZsdXNoaW5nIG91dHN0YW5kaW5nIEkvTyBhbmQgdW5mcmVlemluZyB0aGUgcXVldWUsIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBpbiBgbG9fcG9zdF9yZWxlYXNlKClgIGFuZCBgbG9vcF9yZW1vdmUoKWAuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXG4tIFVzZXItc3BhY2UgZGF0YSBjb3BpZXMgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBObyBkYXRhIGNvcGllZCB0byB1c2VyLXNwYWNlLCBpb2N0bCBvdXRwdXRzLCBwYWNrZXQgaGVhZGVycywgb3IgYnJhbmNoaW5nIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JkZXYuYyBiL2Jsb2NrL2JkZXYuY1xuaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmRldi5jXG5AQCAtMTE4OCw2ICYjNDM7MTE4OCw4IEBAIHZvaWQgYmRldl9yZWxlYXNlKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpXG4gXHRlbHNlXG4gXHRcdGJsa2Rldl9wdXRfd2hvbGUoYmRldik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuJiM0MztcdFx0YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKGJkZXYtXHUwMDNlYmRfZGlzayk7XG4gXG4gXHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4gcHV0X25vX29wZW46XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNzU4YzIwNjc4YmY2Yy4uOWZlMGY3Y2E0YzdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICYjNDM7MTEzNyw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbiYjNDM7XHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuJiM0MztcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuJiM0MztcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuJiM0MztcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuJiM0MztcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbiYjNDM7XHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4mIzQzO1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4mIzQzO1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MywxMiAmIzQzOzExODMsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTEyMDEsMTEgJiM0MzsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuLVx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4tXHQgKi9cbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzcxLDggJiM0MzsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xuJiM0MztcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4mIzQzO1x0ICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uXG4mIzQzO1x0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4mIzQzO1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4mIzQzO1x0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICYjNDM7MTgyOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbiBcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbiBcdC5vcGVuID0gICAgICAgICBsb19vcGVuLFxuIFx0LnJlbGVhc2UgPVx0bG9fcmVsZWFzZSxcbiYjNDM7XHQucG9zdF9yZWxlYXNlID0gbG9fcG9zdF9yZWxlYXNlLFxuIFx0LmlvY3RsID1cdGxvX2lvY3RsLFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG4gXHQuY29tcGF0X2lvY3RsID1cdGxvX2NvbXBhdF9pb2N0bCxcbkBAIC0yMDM2LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTQwLDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmYwNWRiYTFiNTk2MmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTYwNSw2ICYjNDM7MTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsZWQgYWZ0ZXIgZGlzay1cdTAwM2VvcGVuX211dGV4IGlzIHJlbGVhc2VkIGluIHRoZSBiZGV2X3JlbGVhc2UoKSBwYXRoLlxuJiM0MztcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguIFRoaXMgb3BlcmF0aW9uIGhhcyB0byBiZSBpZGVtcG90ZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICYjNDM7MTI5LDcgQEAgcHViIGZuIGJ1aWxkXHUwMDNjVDogT3BlcmF0aW9uc1x1MDAzZShcbiAgICAgICAgICAgICBzdWJtaXRfYmlvOiBOb25lLFxuICAgICAgICAgICAgIG9wZW46IE5vbmUsXG4gICAgICAgICAgICAgcmVsZWFzZTogTm9uZSxcbiYjNDM7ICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLFxuICAgICAgICAgICAgIGlvY3RsOiBOb25lLFxuICAgICAgICAgICAgIGNvbXBhdF9pb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvX3Bvc3RfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtiZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLjdjZTVhY2FhY2Y0M2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTExODgsNiAmIzQzOzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKQogCWVsc2UKIAkJYmxrZGV2X3B1dF93aG9sZShiZGV2KTsKIAltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJaWYgKGJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHMtJmd0O3Bvc3RfcmVsZWFzZSkKJiM0MzsJCWJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHMtJmd0O3Bvc3RfcmVsZWFzZShiZGV2LSZndDtiZF9kaXNrKTsKIAogCW1vZHVsZV9wdXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwogcHV0X25vX29wZW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDc1OGMyMDY3OGJmNmMuLjlmZTBmN2NhNGM3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzYsMTMgJiM0MzsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKQomIzQzOwkgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKQomIzQzOwkgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXIKJiM0MzsJICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGFuZAomIzQzOwkgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlCiYjNDM7CSAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS4KJiM0MzsJICovCiYjNDM7CWRyYWluX3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvTwomIzQzOwkgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyCiYjNDM7CSAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsCiYjNDM7CSAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUzLDEyICYjNDM7MTE4Myw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMjAxLDExICYjNDM7MTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlXUklURV9PTkNFKGxvLSZndDtsb19zdGF0ZSwgTG9fdW5ib3VuZCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAotCS8qCi0JICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmcKLQkgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzCi0JICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LgotCSAqLwomIzQzOwkvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiAJZnB1dChmaWxwKTsKIH0KIApAQCAtMTc3MSw4ICYjNDM7MTc5NCwyMiBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCW5lZWRfY2xlYXIgPSAobG8tJmd0O2xvX3N0YXRlID09IExvX3J1bmRvd24pOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrCiYjNDM7CSAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpCiYjNDM7CSAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLgomIzQzOwkgKiBUaGUgTG9fcnVuZG93biBzdGF0ZSBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy4KJiM0MzsJICovCiAJaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0xNzkxLDYgJiM0MzsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBsb19vcGVuLAogCS5yZWxlYXNlID0JbG9fcmVsZWFzZSwKJiM0MzsJLnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSwKIAkuaW9jdGwgPQlsb19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9CWxvX2NvbXBhdF9pb2N0bCwKQEAgLTIwMzYsNiAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxNDAsNiAmIzQzOzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uZjA1ZGJhMWI1OTYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNjA1LDYgJiM0MzsxNjA1LDEyIEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAJICogZHJpdmVyLgogCSAqLwogCWludCAoKmFsdGVybmF0aXZlX2dwdF9zZWN0b3IpKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCAqc2VjdG9yKTsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGFmdGVyIGRpc2stJmd0O29wZW5fbXV0ZXggaXMgcmVsZWFzZWQgaW4gdGhlIGJkZXZfcmVsZWFzZSgpIHBhdGguCiYjNDM7CSAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0CiYjNDM7CSAqIGhvbGRpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqcG9zdF9yZWxlYXNlKShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiB9OwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwppbmRleCBmYzk3ZGQ4NzM5NzQ2Li4yZmY3N2VmNDk3ODFiIDEwMDY0NAotLS0gYS9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycwpAQCAtMTI5LDYgJiM0MzsxMjksNyBAQCBwdWIgZm4gYnVpbGQmbHQ7VDogT3BlcmF0aW9ucyZndDsoCiAgICAgICAgICAgICBzdWJtaXRfYmlvOiBOb25lLAogICAgICAgICAgICAgb3BlbjogTm9uZSwKICAgICAgICAgICAgIHJlbGVhc2U6IE5vbmUsCiYjNDM7ICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLAogICAgICAgICAgICAgaW9jdGw6IE5vbmUsCiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsCiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEJsb2NrIExheWVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGh5IG9mIGZ1enppbmcuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdGVhcmRvd24gYW5kIHJlbGVhc2UsIGFuZCB0aGF0JiMzOTtzIGFuIGFyZWEgSSBrbm93IGhhcyBiZWVuIGEgdGFyZ2V0IGZvciBmdXp6aW5nIGluIHRoZSBwYXN0LgoKVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNldmVyYWwga2V5IGZpbGVzLiBGaXJzdCwgYGJsb2NrL2JkZXYuY2AgaW50cm9kdWNlcyBhIGNhbGwgdG8gYSBgcG9zdF9yZWxlYXNlKClgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGJkZXZfcmVsZWFzZSgpYCBmdW5jdGlvbiwgYnV0IGNydWNpYWxseSwgb25seSBpZiBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgYGJkZXYtJmd0O2JkX2Rpc2stJmd0O2ZvcHNgLiBUaGlzIGlzIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBUaGlzIHBvaW50cyB0byB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nIGJlaW5nIGRvbmUgYnkgdGhlIGNoYW5nZSBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLgoKYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB3aGVyZSB0aGUgbWVhdCBvZiBpdCBpczogYSByZWZhY3RvciBvZiBzZXZlcmFsIGtleSBsb29wIGRldmljZSBmdW5jdGlvbnMgbGlrZSBgX19sb29wX2Nscl9mZCgpYCwgYGxvX3JlbGVhc2UoKWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlKClgLiBUaGlzIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBhIHdvcmtxdWV1ZSBpdGVtLCBgbG9fY2xyX3dvcmtgLCB0aGUgcXVldWluZyBhbmQgZmx1c2hpbmcgb2Ygd29yayBpbiBgbG9fcG9zdF9yZWxlYXNlKClgLCBhbmQgY2hhbmdlcyB0byB0aGUgcHJvY2VzcyBpbnZvbHZpbmcgcXVldWUgZnJlZXplL2RyYWluL3N5bmNocm9uaXplX3JjdSBpbiBgX19sb29wX2Nscl9mZCgpYC4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgYWRkaXRpb24gb2YgYFdBUk5fT05fT05DRWAuIFRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGFuZCBob3cgYXN5bmNocm9ub3VzIHdvcmsgaXMgaGFuZGxlZCBkdXJpbmcgbG9vcCBkZXZpY2UgdGVhcmRvd24sIGFuZCBhbHRlcnMgbG9ja2luZyBvcmRlciB3aGljaCBtYWtlcyBpdCByaXBlIGZvciBjb25jdXJyZW5jeSBidWdzLgoKQWRkaXRpb25hbGx5LCB3ZSBoYXZlIHVwZGF0ZXMgdG8gYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLCB3aGVyZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBwb2ludGVyIHRvIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiB3aGVuIGRlZmluaW5nIGEgbmV3IGhvb2suIFRoZW4sIHRoZXJlJiMzOTtzIGEgbWlub3IgY2hhbmdlIGluIHRoZSBSdXN0IGNvZGUgaW4gYHJ1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzYCwgd2hlcmUgYHBvc3RfcmVsZWFzZWAgaXMgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgLiBUaGlzIEkgYXNzdW1lIGlzIGp1c3QgdG8gaW5pdGlhbGl6ZSBpdCBzaW5jZSB0aGVyZSBtaWdodCBiZSBubyBpbXBsZW1lbnRhdGlvbiBpbiBSdXN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcywgKmNhbiogdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHRoZSBsb29wIGRldmljZSBkcml2ZXIuIExvb3AgZGV2aWNlcyBhcmUgY3JlYXRlZCwgY29uZmlndXJlZCwgb3BlbmVkLCBhbmQgY2xvc2VkIHVzaW5nIGBpb2N0bGAgY2FsbHMgbGlrZSBgTE9PUF9TRVRfRkRgIGFuZCBgTE9PUF9DTFJfRkRgLiBTeXprYWxsZXIgYWxyZWFkeSB1bmRlcnN0YW5kcyBob3cgdG8gdHJpZ2dlciB0aGlzIGxpZmVjeWNsZS4gVGhlIGFkZGl0aW9uIG9mIGFzeW5jaHJvbm91cyB3b3JrLCBtb2RpZmllZCBsb2NraW5nIG9yZGVyLCBhbmQgdGhlIGBXQVJOX09OX09OQ0VgIGFsbCBzY3JlYW0gJiMzNDtpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nISYjMzQ7IEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgcmFjZSBjb25kaXRpb25zLi4uCgpOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhlIGxvb3AgZGV2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHByZXZlbnQgdGhpcyBmcm9tIGJlaW5nIHJlYWNoYWJsZS4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSwgYnV0IGZyb20gd2hhdCBJJiMzOTttIHNlZWluZyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX0xPT1BgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBpbiB0aGUgYmxvY2sgZGV2aWNlIGFyZWEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDE0NC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBtb3JlIGNvbXBsZXggY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyBgQkxLX0RFVl9MT09QYCBpcyBleHBvc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiB3aGF0IG90aGVyIGNvbXBvbmVudHMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbiBhbmQgdHJvdWJsZXNob290aW5nLCBvZiBjb3Vyc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NDpcdGNvbmZpZyBCTEtfREVWX0xPT1BcbiAxNDU6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTQ2Olx0XHRoZWxwXG4gMTQ3Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcbiAxNDg6XHRcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXG4gMTQ5Olx0XHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXG4gMTUwOlx0XHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xuIDE1MTpcdFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XG4gMTUyOlx0XHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXG4gMTU1Olx0XHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XG4gMTU2Olx0XHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcbiAxNTc6XHRcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXG4gMTU4Olx0XHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcbiAxNTk6XHRcdCAgZHJpdmVyLlxuIDE2MDpcdFxuIDE2MTpcdFx0ICBUbyB1c2UgdGhlIGxvb3AgZGV2aWNlLCB5b3UgbmVlZCB0aGUgbG9zZXR1cCB1dGlsaXR5LCBmb3VuZCBpbiB0aGVcbiAxNjI6XHRcdCAgdXRpbC1saW51eCBwYWNrYWdlLCBzZWVcbiAxNjM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cdTAwM2UuXG4gMTY0Olx0XG4gMTY1Olx0XHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcJiMzNDtoaWRlXCYjMzQ7IGEgZmlsZSBzeXN0ZW0gaW5cbiAxNjY6XHRcdCAgYSBkaXNrIHBhcnRpdGlvbiwgZmxvcHB5LCBvciByZWd1bGFyIGZpbGUsIGVpdGhlciB1c2luZyBlbmNyeXB0aW9uXG4gMTY3Olx0XHQgIChzY3JhbWJsaW5nIHRoZSBkYXRhKSBvciBzdGVnYW5vZ3JhcGh5IChoaWRpbmcgdGhlIGRhdGEgaW4gdGhlIGxvd1xuIDE2ODpcdFx0ICBiaXRzIG9mLCBzYXksIGEgc291bmQgZmlsZSkuIFRoaXMgaXMgYWxzbyBzYWZlIGlmIHRoZSBmaWxlIHJlc2lkZXNcbiAxNjk6XHRcdCAgb24gYSByZW1vdGUgZmlsZSBzZXJ2ZXIuXG4gMTcwOlx0XG4gMTcxOlx0XHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXG4gMTcyOlx0XHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxuIDE3MzpcdFxuIDE3NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXG4gMTc2Olx0XG4gMTc3Olx0XHQgIE1vc3QgdXNlcnMgd2lsbCBhbnN3ZXIgTiBoZXJlLlxuIDE3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHN5bWJvbHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQgYXMgYWx0ZXJlZDogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9yZW1vdmVgLCBgbG9vcF9hZGRgLCBhbmQgYGJkZXZfcmVsZWFzZWAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCB3aGF0IHRoZWlyIGltcGFjdCBpcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcC5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBldmVuIGlmIHRoZXkgYXJlbiYjMzk7dCBleHBsaWNpdGx5IGZsYWdnZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgpNeSBuZXh0IG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgYF9fbG9vcF9jbHJfZmRgLCBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uIGBsb29wX2Nscl9mZGAsIGFuZCBgbG9fcmVsZWFzZWAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBpcyBwYXJhbW91bnQgdG8gZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nz1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA5OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTAtICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwNj1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE0MDpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTctXHQgKiBsby1cdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE4Olx0ICogZmluaXNoZWQuIFRoZXJlIGNhbm5vdCBiZSBhbnlib2R5IGVsc2UgZW50ZXJpbmcgX19sb29wX2Nscl9mZCgpIGFzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVx0ICogTG9fcnVuZG93biBzdGF0ZSBwcm90ZWN0cyB1cyBmcm9tIGFsbCB0aGUgb3RoZXIgcGxhY2VzIHRyeWluZyB0b1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Nzc9c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5Olx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDAtXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODA3PXN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMTpcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3Ni1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc3Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIExvb3AgRGV2aWNlIENsZWFyaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9vcCBkZXZpY2UgY2xlYXJpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBgbG9vcF9jbHJfZmRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb29wIGRldmljZSYjMzk7cyBmaWxlIGRlc2NyaXB0b3IgZ2V0cyBjbGVhcmVkIHdoZW4gaXQmIzM5O3MgcmVsZWFzZWQgb3IgZGV0YWNoZWQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIGZyZWVpbmcgcmVzb3VyY2VzIGFuZCBicmVha2luZyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsb29wIGRldmljZSBhbmQgaXRzIGJhY2tpbmcgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwLSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDY9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDA6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVx0ICogbG8tXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcdCAqIGZpbmlzaGVkLiBUaGVyZSBjYW5ub3QgYmUgYW55Ym9keSBlbHNlIGVudGVyaW5nIF9fbG9vcF9jbHJfZmQoKSBhc1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOS1cdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQwLVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQxOlx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNDItXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1NjI9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5My1cdGNhc2UgTE9PUF9DTFJfRkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTk0Olx0XHRyZXR1cm4gbG9vcF9jbHJfZmQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5NS1cdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Nzc9c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5Olx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDAtXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODA3PXN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMTpcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3Ni1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc3Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYGxvb3BfY2xyX2ZkYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGluIHRoZSBsb29wIGRldmljZSBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYGxvb3BfY2xyX2ZkYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBiYWNraW5nIGZpbGUgZm9yIGEgbG9vcCBkZXZpY2UuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGFydGljdWxhcmx5IGFyb3VuZCBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1heWJlIHNvbWUgc3VidGxlIGVkZ2UgY2FzZXMgaW52b2x2aW5nIGVycm9yIGhhbmRsaW5nIHdoZW4gY2xvc2luZyB0aGUgZmlsZS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjbGVhbnVwIGlzIGRvbmUgcmlnaHQuIEkmIzM5O20gY29uc2lkZXJpbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcmlzayBvZiBsZWFraW5nIGZpbGUgZGVzY3JpcHRvcnMgb3IgY2F1c2luZyBhIHJlc291cmNlIGV4aGF1c3Rpb24gYXR0YWNrIGlmIHRoZSBjbGVhbnVwIGlzbiYjMzk7dCByb2J1c3QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM0Olx0XG4xMjM1Olx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuMTIzNjpcdHtcbjEyMzc6XHRcdGludCBlcnI7XG4xMjM4Olx0XG4xMjM5Olx0XHQvKlxuMTI0MDpcdFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4xMjQxOlx0XHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuMTI0MjpcdFx0ICpcbjEyNDM6XHRcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXG4xMjQ0Olx0XHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG4xMjQ1Olx0XHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xuMTI0NjpcdFx0ICogbG9vcCBkZXZpY2UuXG4xMjQ3Olx0XHQgKi9cbjEyNDg6XHRcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xuMTI0OTpcdFx0aWYgKGVycilcbjEyNTA6XHRcdFx0cmV0dXJuIGVycjtcbjEyNTE6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xuMTI1MjpcdFx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI1MzpcdFx0XHRyZXR1cm4gLUVOWElPO1xuMTI1NDpcdFx0fVxuMTI1NTpcdFx0LypcbjEyNTY6XHRcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXG4xMjU3Olx0XHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xuMTI1ODpcdFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cbjEyNTk6XHRcdCAqL1xuMTI2MDpcdFxuMTI2MTpcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xuMTI2MjpcdFx0aWYgKGRpc2tfb3BlbmVycyhsby1cdTAwM2Vsb19kaXNrKSA9PSAxKVxuMTI2MzpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjEyNjQ6XHRcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XG4xMjY1Olx0XG4xMjY2Olx0XHRyZXR1cm4gMDtcbjEyNjc6XHR9XG4xMjY4Olx0XG4xMjY5Olx0c3RhdGljIGludFxuMTI3MDpcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXG4xMjcxOlx0e1xuMTI3MjpcdFx0aW50IGVycjtcbjEyNzM6XHRcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBzdGFydGluZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodDoKCioqQ2hlY2tpbmcgYGxvX3JlbGVhc2VgIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBsb19yZWxlYXNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBJIG5lZWQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGxpa2VseSBhbiBpc3N1ZSByZWxhdGVkIHRvIHRoZSBsaWZlY3ljbGUgb2YgbG9vcGJhY2sgZGV2aWNlcy4gSXQgY291bGQgYmUgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCwgaGFuZGxpbmcgZGV2aWNlIGNsb3N1cmUsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtLiAKCkdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgYnJvYWRlciBibG9jayBkZXZpY2Ugc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGhvdyBgbG9fcmVsZWFzZWAgaW50ZXJhY3RzIHdpdGggb3RoZXIga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGRyaXZlciwgbGlrZSBgbG9fb3BlbmAsIGBsb19pb2N0bGAsIGFuZCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIGlmIHRoZXkgZXhpc3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3c6CgoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgcmVzb3VyY2VzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2hlbiByZWxlYXNpbmcgcmVzb3VyY2VzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBtdXRleGVzLCBzcGlubG9ja3MsIG9yIGF0b21pYyBvcGVyYXRpb25zLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIFdoYXQgcmVzb3VyY2VzIGlzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCBob3cgaXMgaXQgZG9pbmcgc28/IEkmIzM5O20gdGhpbmtpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIGRlc2NyaXB0b3JzIChpZiBhcHBsaWNhYmxlKSwgYW5kIGRldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSByZWxlYXNlIHByb2Nlc3M/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgcGFydGlhbCByZWxlYXNlIG9yIHJlcG9ydCBlcnJvcnMgYXBwcm9wcmlhdGVseT8KKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBWRlM6KiogSG93IGRvZXMgYGxvX3JlbGVhc2VgIGltcGFjdCB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKT8gRG9lcyBpdCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGludmFsaWRhdGUgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBub3RpZnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHM/CgpNeSBtZW50YWwgY2hlY2tsaXN0IGdvZXMgZnVydGhlciB0aGFuIHRoaXMsIG9mIGNvdXJzZSwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgYWxsIGFzcGVjdHMgb2YgdGhlIGNvZGUsIGJ1dCB0aGlzIGlzIGEgc29saWQgcGxhY2UgdG8gc3RhcnQgYW5kIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIGF0IGhhbmQgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzc1Olx0fVxuMTc3NjpcdFxuMTc3NzpcdHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4xNzc4Olx0e1xuMTc3OTpcdFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMTc4MDpcdFx0Ym9vbCBuZWVkX2NsZWFyID0gZmFsc2U7XG4xNzgxOlx0XG4xNzgyOlx0XHRpZiAoZGlza19vcGVuZXJzKGRpc2spIFx1MDAzZSAwKVxuMTc4MzpcdFx0XHRyZXR1cm47XG4xNzg0Olx0XHQvKlxuMTc4NTpcdFx0ICogQ2xlYXIgdGhlIGJhY2tpbmcgZGV2aWNlIGluZm9ybWF0aW9uIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2xvc2Ugb2ZcbjE3ODY6XHRcdCAqIGEgZGV2aWNlIHRoYXQmIzM5O3MgYmVlbiBtYXJrZWQgZm9yIGF1dG8gY2xlYXIsIG9yIG9uIHdoaWNoIExPT1BfQ0xSX0ZEXG4xNzg3Olx0XHQgKiBoYXMgYmVlbiBjYWxsZWQuXG4xNzg4Olx0XHQgKi9cbjE3ODk6XHRcbjE3OTA6XHRcdG11dGV4X2xvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTc5MTpcdFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX2JvdW5kIFx1MDAyNlx1MDAyNiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0FVVE9DTEVBUikpXG4xNzkyOlx0XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xuMTc5MzpcdFxuMTc5NDpcdFx0bmVlZF9jbGVhciA9IChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcbjE3OTU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4xNzk2Olx0XG4xNzk3Olx0XHQvKlxuMTc5ODpcdFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PICh3aXRob3V0IG9wZW5fbXV0ZXggZm9yIGRlYWRsb2NrXG4xNzk5Olx0XHQgKiBhdm9pZGFuY2UpIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZyBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKVxuMTgwMDpcdFx0ICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uXG4xODAxOlx0XHQgKiBUaGUgTG9fcnVuZG93biBzdGF0ZSBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbjE4MDI6XHRcdCAqL1xuMTgwMzpcdFx0aWYgKG5lZWRfY2xlYXIpXG4xODA0Olx0XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbjE4MDU6XHR9XG4xODA2Olx0XG4xODA3Olx0c3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuMTgwODpcdHtcbjE4MDk6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE4MTA6XHRcbjE4MTE6XHRcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbjE4MTI6XHRcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuMTgxMzpcdH1cbjE4MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNoZWNraW5nIGJkZXZfcmVsZWFzZSBpbiBibG9jay9iZGV2LmMqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBhcmVhLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIEdpdmVuIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBiZGV2X3JlbGVhc2VgIGZ1bmN0aW9uIGluIGBibG9jay9iZGV2LmNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBhbmQgY291bGQgZWFzaWx5IGJlIHRoZSBzb3VyY2Ugb2Ygc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgY2xlYW51cCBvciBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHJvbGUgYW5kIG1ha2Ugc3VyZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSXQmIzM5O3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlOyBhbHdheXMgYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3NTpcdFxuMTE3NjpcdFx0aWYgKGhvbGRlcilcbjExNzc6XHRcdFx0YmRfeWllbGRfY2xhaW0oYmRldl9maWxlKTtcbjExNzg6XHRcbjExNzk6XHRcdC8qXG4xMTgwOlx0XHQgKiBUcmlnZ2VyIGV2ZW50IGNoZWNraW5nIGFuZCB0ZWxsIGRyaXZlcnMgdG8gZmx1c2ggTUVESUFfQ0hBTkdFXG4xMTgxOlx0XHQgKiBldmVudC4gIFRoaXMgaXMgdG8gZW5zdXJlIGRldGVjdGlvbiBvZiBtZWRpYSByZW1vdmFsIGNvbW1hbmRlZFxuMTE4MjpcdFx0ICogZnJvbSB1c2VybGFuZCAtIGUuZy4gZWplY3QoMSkuXG4xMTgzOlx0XHQgKi9cbjExODQ6XHRcdGRpc2tfZmx1c2hfZXZlbnRzKGRpc2ssIERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFKTtcbjExODU6XHRcbjExODY6XHRcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbjExODc6XHRcdFx0YmxrZGV2X3B1dF9wYXJ0KGJkZXYpO1xuMTE4ODpcdFx0ZWxzZVxuMTE4OTpcdFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuMTE5MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4xMTkxOlx0XHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuMTE5MjpcdFx0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbjExOTM6XHRcbjExOTQ6XHRcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbjExOTU6XHRwdXRfbm9fb3BlbjpcbjExOTY6XHRcdGJsa2Rldl9wdXRfbm9fb3BlbihiZGV2KTtcbjExOTc6XHR9XG4xMTk4Olx0XG4xMTk5Olx0LyoqXG4xMjAwOlx0ICogYmRldl95aWVsZF9jbGFpbSAtIGdpdmUgdXAgdGhlIGhvbGRlciBjbGFpbSBvbiBhbiBvcGVuIGJsb2NrIGRldmljZVxuMTIwMTpcdCAqIEBiZGV2X2ZpbGU6IG9wZW4gYmxvY2sgZGV2aWNlXG4xMjAyOlx0ICpcbjEyMDM6XHQgKiBZaWVsZCB0aGUgaG9sZGVyIGFuZCBhbnkgd3JpdGUgYWNjZXNzIGZvciBAYmRldl9maWxlIHdpdGhvdXQgY2xvc2luZyBpdCwgc29cbjEyMDQ6XHQgKiB0aGUgY2FsbGVyIGNhbiBzdGlsbCBhY3Qgb24gdGhlIGRldmljZSAtIGUuZy4gYmRldl9hbGxvd19mcmVlemUoKSBpdCAtIGJlZm9yZVxuMTIwNTpcdCAqIHRoZSBmaW5hbCBiZGV2X2ZwdXQoKS4gIGJkZXZfZnB1dCgpIHlpZWxkcyB0b28sIHNvIGNhbGxpbmcgaXQgYWZ0ZXJ3YXJkcyBpc1xuMTIwNjpcdCAqIHNhZmUuXG4xMjA3Olx0ICovXG4xMjA4Olx0dm9pZCBiZGV2X3lpZWxkX2NsYWltKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpXG4xMjA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogQmxvY2sgRGV2aWNlIFJlbGVhc2Ugd2l0aCBMb29wIERldmljZSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgYXJlIHNjcmVhbWluZyBmb3IgZnV6emluZy4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IEZpcnN0LCBpdCBsb29rcyBsaWtlIGEgYHBvc3RfcmVsZWFzZWAgY2FsbGJhY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgYW5kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGBvcGVuX211dGV4YCBpcyBkcm9wcGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNoYW5nZSBpbiB0aGUgbG9vcCBkZXZpY2UgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBgX19sb29wX2Nscl9mZGAsIHdoaWNoIHVzZWQgdG8gYmUgc3luY2hyb25vdXMgd2l0aGluIGBsb19yZWxlYXNlYCAod2hpbGUgaG9sZGluZyB0aGF0IGNyaXRpY2FsIGBvcGVuX211dGV4YCksIGlzIG5vdyBiZWluZyBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYHN5c3RlbV9sb25nX3dxYCkuCgpgbG9fcmVsZWFzZWAgbm93IHF1ZXVlcyBgbG8tJmd0O2xvX2Nscl93b3JrYCwgYW5kIHRoZSBuZXcgYGxvX3Bvc3RfcmVsZWFzZWAgZmx1c2hlcyB0aGF0IHdvcmtxdWV1ZSAqYWZ0ZXIqIHRoZSBgb3Blbl9tdXRleGAgaXMgZHJvcHBlZC4gV2l0aGluIGBfX2xvb3BfY2xyX2ZkYCBpdHNlbGYsIHRoZSBwYXRjaCBpcyBhZGRpbmcgc2V2ZXJhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtczogYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYGJsa19tcV9mcmVlemVfcXVldWVgIC8gYGJsa19tcV91bmZyZWV6ZV9xdWV1ZWAsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgKmxvY2tpbmcqIGBvcGVuX211dGV4YCBhdCBzdGVwIDIuIEEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGlzIGFsc28gaW50cm9kdWNlZCB0byBjaGVjayBgbG8tJmd0O2xvX3N0YXRlYC4gRnVydGhlciwgYGxvb3BfcmVtb3ZlYCBhbHNvIGZsdXNoZXMgYGxvLSZndDtsb19jbHJfd29ya2AuCgpJcyB0aGlzIHJpcGUgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGJsb2NrIGRldmljZSBjbGVhbnVwIChgYmRldl9yZWxlYXNlYCkgYW5kIGxvb3AgZGV2aWNlIGNsZWFudXAuIFRoZSBsb29wIGRldmljZSBpcyByZWFkaWx5IGF2YWlsYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIENydWNpYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgY29uY3VycmVuY3kgYXNwZWN0cywgYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSBoYW5kbGluZywgaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZywgd29ya3F1ZXVlIGRyYWluaW5nLCBjaGFuZ2luZyBsb2NrIG9yZGVycyAoYG9wZW5fbXV0ZXhgLCBgbG9fbXV0ZXhgLCBgbG9fbG9ja2ApLCBhbmQgYWRkcyBhIHJ1bnRpbWUgYXNzZXJ0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGNsYXNzaWMgdGFyZ2V0cyBmb3IgY29uY3VycmVuY3kgYnVncyBsaWtlIGRlYWRsb2NrcyBhbmQgcmFjZSBjb25kaXRpb25zLiBJIGNhbiBwcmFjdGljYWxseSBzbWVsbCB0aGUgcG90ZW50aWFsIGJ1Z3MuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9vcF9jb25maWd1cmVgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGJkZXZfcmVsZWFzZWAuIE5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aG9zZSBhcmUgYWxsIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGluIHRoZSBDIGNvZGU6IE9rYXksIGBfX2xvb3BfY2xyX2ZkYCBpcyBgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspYC4gYGxvX3JlbGVhc2VgIGlzIGBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKWAuIGBsb19wb3N0X3JlbGVhc2VgIGlzIGBzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spYC4gYGxvb3BfY2xyX2ZkYCBpcyBgc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKWAuIGBsb29wX3JlbW92ZWAgaXMgYHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pYC4gQW5kIGZpbmFsbHksIGBiZGV2X3JlbGVhc2VgIGlzIGB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKWAuIEdvb2QsIGFsbCBjb25maXJtZWQuCgpJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxPQ0tgLiBgQkxLX0RFVl9MT09QYCBkZXBlbmRzIG9uIGBCTE9DS2AuIEkgcXVpY2tseSBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kIGFzIGV4cGVjdGVkLCBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVydGhlciByZXF1aXJlZCBkZXBlbmRlbmNpZXMuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBCTEtfREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZy01LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjY6bWVudWNvbmZpZyBCTEtfREVWXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2OAoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2V0dXAgaGVyZS4gV2UmIzM5O3JlIGxldmVyYWdpbmcgYEJMS19ERVZfTE9PUGAsIHdoaWNoIGlzIHRoZSBwcmltYXJ5IGRyaXZlciwgYW5kIGFsc28gZW5hYmxpbmcgYEJMT0NLYCBhcyBhIGtlcm5lbCBjb25maWcgb3B0aW9uLiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgc2V0LXJlc3VsdHNgIGlzIGZvcm1hdHRlZCBjb3JyZWN0bHksIGdvaW5nIHRocm91Z2ggdGhlIGFyZ3VtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEJMS19ERVZfTE9PUGAgYW5kIGBCTE9DS2Agd2l0aCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGlzIGNvcnJlY3QsIGFuZCB0YXJnZXRpbmcgb3VyIGZ1enppbmcgd2l0aCBgRm9jdXNTeW1ib2xzYC4gVGhlc2Ugc2VlbSBhcHByb3ByaWF0ZWx5IHNwZWNpZmljIGFuZCByZWxldmFudDogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb19wb3N0X3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgYmRldl9yZWxlYXNlYCwgYW5kIGBsb29wX3JlbW92ZWAgLSB0aGVzZSBtYWtlIHNlbnNlIHRvIGJlIHRhcmdldGVkIGFzIHRoZXkgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBwYXRjaCBjaGFuZ2VzLiBUaGUgJiMzNDtSZWFzb25pbmcmIzM0OyBpcyBjb25jaXNlLCB3aGljaCBpcyBnb29kLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgZXZlcnl0aGluZyBvbmUgbW9yZSB0aW1lLiBXZSB3YW50IHRvIGZ1enogdGhpcyBwYXRjaCwgc28gYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzcGVjaWZpYywgc28gdGhleSBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCBhcmUgc3BlY2lmaWMgdG8gdGhlIHBhdGNoIGNoYW5nZXMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQuIEFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGRldmljZSByZWxlYXNlIGhhbmRsaW5nIGluIGJsb2NrL2JkZXYuYyBieSBpbnRyb2R1Y2luZyBhIHBvc3RfcmVsZWFzZSBjYWxsYmFjaywgYW5kIHJlZmFjdG9ycyBsb29wIGRldmljZSB0ZWFyZG93biBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhbnVwIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUsIGFkZGluZyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZy9kcmFpbmluZywgbG9ja2luZyBjaGFuZ2VzLCBhbmQgbmV3IFdBUk5fT04gYXNzZXJ0aW9ucy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGhhbmRsZXMgY29tcGxleCBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb19wb3N0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7YmRldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGRldmljZSByZWxlYXNlIGhhbmRsaW5nIGluIGJsb2NrL2JkZXYuYyBieSBpbnRyb2R1Y2luZyBhIHBvc3RfcmVsZWFzZSBjYWxsYmFjaywgYW5kIHJlZmFjdG9ycyBsb29wIGRldmljZSB0ZWFyZG93biBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhbnVwIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUsIGFkZGluZyBSQ1Ugc3luY2hyb25pemF0aW9uLCBxdWV1ZSBmcmVlemluZy9kcmFpbmluZywgbG9ja2luZyBjaGFuZ2VzLCBhbmQgbmV3IFdBUk5fT04gYXNzZXJ0aW9ucy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGhhbmRsZXMgY29tcGxleCBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cblxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBuZXcgYGxvX2Nscl93b3JrYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBuZXcgY2FsbGJhY2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgZGVmYXVsdHMgdG8gTlVMTCBhY3Jvc3Mgc3RhdGljIGRlY2xhcmF0aW9ucyBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTm9uZWAgaW4gUnVzdCBiaW5kaW5ncy5cbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWIzNTYzZjdkZTE5OTE0NzhhYTM1NTVhZTMwYTExMzJlMzQyN2JmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTI6NDg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtMTE4OCw2ICYjNDM7MTE4OCw4IEBAIHZvaWQgYmRldl9yZWxlYXNlKHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUpCiAJZWxzZQogCQlibGtkZXZfcHV0X3dob2xlKGJkZXYpOwogCW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlpZiAoYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7Zm9wcy0mZ3Q7cG9zdF9yZWxlYXNlKQomIzQzOwkJYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7Zm9wcy0mZ3Q7cG9zdF9yZWxlYXNlKGJkZXYtJmd0O2JkX2Rpc2spOwogCiAJbW9kdWxlX3B1dChkaXNrLSZndDtmb3BzLSZndDtvd25lcik7CiBwdXRfbm9fb3BlbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNzU4YzIwNjc4YmY2Yy4uOWZlMGY3Y2E0YzdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAJc3RydWN0IGdlbmRpc2sJCSpsb19kaXNrOwogCXN0cnVjdCBtdXRleAkJbG9fbXV0ZXg7CiAJYm9vbAkJCWlkcl92aXNpYmxlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbG9fY2xyX3dvcms7CiB9OwogCiBzdHJ1Y3QgbG9vcF9jbWQgewpAQCAtMTEzNiwxMyAmIzQzOzExMzcsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsCiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiYjNDM7c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tJmd0O2xvX2Rpc2s7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJZ2ZwX3QgZ2ZwID0gbG8tJmd0O29sZF9nZnBfbWFzazsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CS8qCiYjNDM7CSAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpCiYjNDM7CSAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpCiYjNDM7CSAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlcgomIzQzOwkgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kCiYjNDM7CSAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmUKJiM0MzsJICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLgomIzQzOwkgKi8KJiM0MzsJZHJhaW5fd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PCiYjNDM7CSAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXIKJiM0MzsJICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKCkKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGwKJiM0MzsJICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuCiYjNDM7CSAqLwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSkpOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CVdBUk5fT05fT05DRShsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fcnVuZG93bik7CiYjNDM7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKQEAgLTExNTMsMTIgJiM0MzsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCWxvLSZndDtsb19zaXplbGltaXQgPSAwOwogCW1lbXNldChsby0mZ3Q7bG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCi0JLyoKLQkgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4KLQkgKgotCSAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsCi0JICogLSZndDtyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJiMzOTt0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uCi0JICovCiYjNDM7CS8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqLwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKQEAgLTEyMDEsMTEgJiM0MzsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCVdSSVRFX09OQ0UobG8tJmd0O2xvX3N0YXRlLCBMb191bmJvdW5kKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCi0JICovCiYjNDM7CS8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKIAlmcHV0KGZpbHApOwogfQogCkBAIC0xNzcxLDggJiM0MzsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJbmVlZF9jbGVhciA9IChsby0mZ3Q7bG9fc3RhdGUgPT0gTG9fcnVuZG93bik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAomIzQzOwkvKgomIzQzOwkgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2sKJiM0MzsJICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkKJiM0MzsJICogdG8gV1EgY29udGV4dCBhbmQgbGV0IGxvX3Bvc3RfcmVsZWFzZSgpIHdhaXQgZm9yIGNvbXBsZXRpb24uCiYjNDM7CSAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLgomIzQzOwkgKi8KIAlpZiAobmVlZF9jbGVhcikKLQkJX19sb29wX2Nscl9mZChsbyk7CiYjNDM7CQlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTE3OTEsNiAmIzQzOzE4MjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxvX29wZW4sCiAJLnJlbGVhc2UgPQlsb19yZWxlYXNlLAomIzQzOwkucG9zdF9yZWxlYXNlID0gbG9fcG9zdF9yZWxlYXNlLAogCS5pb2N0bCA9CWxvX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0JbG9fY29tcGF0X2lvY3RsLApAQCAtMjAzNiw2ICYjNDM7MjA3NCw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJbG8gPSBremFsbG9jX29iaigqbG8pOwogCWlmICghbG8pCiAJCWdvdG8gb3V0OwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpOwogCWxvLSZndDt3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7aWRsZV93b3JrZXJfbGlzdCk7CiAJdGltZXJfc2V0dXAoJmFtcDtsby0mZ3Q7dGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpOwpAQCAtMjE0MCw2ICYjNDM7MjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE2MDUsNiAmIzQzOzE2MDUsMTIgQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHsKIAkgKiBkcml2ZXIuCiAJICovCiAJaW50ICgqYWx0ZXJuYXRpdmVfZ3B0X3NlY3Rvcikoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90ICpzZWN0b3IpOwomIzQzOwkvKgomIzQzOwkgKiBDYWxsZWQgYWZ0ZXIgZGlzay0mZ3Q7b3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC4KJiM0MzsJICogVXNlZCBieSBsb29wIGRldmljZXMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gc3luY2hyb25pemF0aW9uIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyBkaXNrLSZndDtvcGVuX211dGV4LiBUaGlzIG9wZXJhdGlvbiBoYXMgdG8gYmUgaWRlbXBvdGVudC4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIH07CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5ycyBiL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCmluZGV4IGZjOTdkZDg3Mzk3NDYuLjJmZjc3ZWY0OTc4MWIgMTAwNjQ0Ci0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzCkBAIC0xMjksNiAmIzQzOzEyOSw3IEBAIHB1YiBmbiBidWlsZCZsdDtUOiBPcGVyYXRpb25zJmd0OygKICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsCiAgICAgICAgICAgICBvcGVuOiBOb25lLAogICAgICAgICAgICAgcmVsZWFzZTogTm9uZSwKJiM0MzsgICAgICAgICAgICBwb3N0X3JlbGVhc2U6IE5vbmUsCiAgICAgICAgICAgICBpb2N0bDogTm9uZSwKICAgICAgICAgICAgIGNvbXBhdF9pb2N0bDogTm9uZSwKICAgICAgICAgICAgIGNoZWNrX2V2ZW50czogTm9uZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDcKCQkJCQkJCW91dHB1dDogMjg2CgkJCQkJCQl0aG91Z2h0czogMTEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQ6IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzICYjMzQ7bm8sJiMzNDsgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgY2xlYW51cCBvZiBsb29wIGRldmljZXMuIFdlJiMzOTt2ZSBnb3QgYGJsb2NrL2JkZXYuY2AgYWRkaW5nIGEgYHBvc3RfcmVsZWFzZWAgY2FsbCwgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCByZXdvcmtpbmcgdGhlIGxvb3AgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZSB3aXRoIHdvcmtxdWV1ZXMsIGFuZCB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBgYmxrZGV2LmhgIGluY2x1ZGUgYW5kIHRoZSBSdXN0IHNpZGUgKGBnZW5fZGlzay5yc2ApLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGRlZmVycmluZyB0aGUgY2xlYW51cCwgdXNpbmcgd29ya3F1ZXVlcyB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGR1cmluZyBkZXZpY2UgcmVsZWFzZS4gVGhlIGludHJvZHVjdGlvbiBvZiBgbG9fY2xyX3dvcmtgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYW5kIGBsb19wb3N0X3JlbGVhc2VgIGFyZSBhbGwgYWJvdXQgdGhpcyBkZWZlcnJlZCBjbGVhbnVwIG1lY2hhbmlzbSBhbmQgc3luY2hyb25pemF0aW9uLgoKTm93LCB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBsaWtlIHVzZS1hZnRlci1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gTE9DS0RFUCBkZWFscyB3aXRoIGxvY2sgb3JkZXJpbmcgYW5kIGRlYWRsb2NrIGRldGVjdGlvbi4KCkxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOIGZsYWdzLiBgbG9gIGlzIGJlaW5nIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX29iamAgaW4gYGxvb3BfYWRkYCwgYW5kIHdlIGhhdmUgYElOSVRfV09SS2AgaW5pdGlhbGl6aW5nIHRoZSBgd29ya19zdHJ1Y3RgLiBXZSBleHBsaWNpdGx5IHNldCBgcG9zdF9yZWxlYXNlYCB0byBgTm9uZWAgaW4gdGhlIFJ1c3Qgc2lkZSBvciBpdCYjMzk7cyBpbXBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gQywgd2l0aCBhIE5VTEwgY2hlY2sgYmVmb3JlIGNhbGxpbmcgaXQsIGFzIGluIHRoZSBgYmRldl9yZWxlYXNlKClgIGZ1bmN0aW9uLiBUaGUgd29yayBmdW5jdGlvbiBgX19sb29wX2Nscl9mZGAgaXMgcmV0cmlldmluZyBpdHMgbG9vcF9kZXZpY2UgdXNpbmcgY29udGFpbmVyX29mLCB3aGljaCBtZWFucyBubyBwb2ludGVycyBhcmUgYmVpbmcgdXNlZCBiZWZvcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIG5ldyBgY29weV90b191c2VyYCwgbm8gaW9jdGwgb3V0cHV0IHN0cnVjdHMgYmVpbmcgY2hhbmdlZCwgbm8gYnVmZmVyIGxlbmd0aHMgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIGlzIHZlcnkgZm9jdXNlZCBvbiBkZWZlcnJlZCBjbGVhbnVwIGFuZCBzeW5jaHJvbml6YXRpb24uIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBwcm9wZXJseSB3aXRob3V0IGNhdXNpbmcgZGVhZGxvY2tzLgoKSSBkaWQgYSBzZWNvbmQgbG9vayBhdCBgX19sb29wX2Nscl9mZGAgaW4gYGxvb3AuY2AsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSwgY2hlY2tpbmcgdmFyaWFibGVzLCBldGMuIFRoZSB1c2Ugb2YgYGxpbWAgdG8gc2V0IHRoZSBsb2dpY2FsIGFuZCBwaHlzaWNhbCBibG9jayBzaXplcyB3YXMgYWxyZWFkeSB0aGVyZTsgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55dGhpbmcgbmV3IHdpdGggdGhvc2UgdmFyaWFibGVzLiBUaGV5IGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlaXIgdXNhZ2UuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIGNsZWFudXAgcGF0Y2gsIG5vdGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEFueSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBsb2NraW5nIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCBhc3NlcnRpb25zLiBJIGRvbiYjMzk7dCBzZWUgYW55IG5ldyBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGFueXRoaW5nIGhlcmUuIFNvLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCkkgbmVlZCB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBJJiMzOTtsbCBuZWVkIHRvIGZvcm11bGF0ZSBhIGNsZWFyIGV4cGxhbmF0aW9uLCBwZXJoYXBzIGNvbnRyYXN0aW5nIEtBU0FOIC8gTE9DS0RFUCB3aXRoIEtNU0FOLCB0byBqdXN0aWZ5IG15IGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cblxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBuZXcgYGxvX2Nscl93b3JrYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBuZXcgY2FsbGJhY2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgZGVmYXVsdHMgdG8gTlVMTCBhY3Jvc3Mgc3RhdGljIGRlY2xhcmF0aW9ucyBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTm9uZWAgaW4gUnVzdCBiaW5kaW5ncy5cbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGFuZCBkZWFkbG9jayBpc3N1ZSBkdXJpbmcgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24uIEl0IGludHJvZHVjZXMgYSBgcG9zdF9yZWxlYXNlYCBob29rIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCBleGVjdXRlcyBgX19sb29wX2Nscl9mZCgpYCBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHRvIGF2b2lkIGhvbGRpbmcgYG9wZW5fbXV0ZXhgIHdoaWxlIGZsdXNoaW5nIG91dHN0YW5kaW5nIEkvTyBhbmQgdW5mcmVlemluZyB0aGUgcXVldWUsIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBpbiBgbG9fcG9zdF9yZWxlYXNlKClgIGFuZCBgbG9vcF9yZW1vdmUoKWAuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXG4tIFVzZXItc3BhY2UgZGF0YSBjb3BpZXMgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBObyBkYXRhIGNvcGllZCB0byB1c2VyLXNwYWNlLCBpb2N0bCBvdXRwdXRzLCBwYWNrZXQgaGVhZGVycywgb3IgYnJhbmNoaW5nIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuMzA4MzA0ODg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MDM4MTY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgZGVhZGxvY2sgaXNzdWUgZHVyaW5nIGxvb3AgZGV2aWNlIHJlbGVhc2UgYW5kIHRlYXJkb3duLiBJdCBpbnRyb2R1Y2VzIGEgYHBvc3RfcmVsZWFzZWAgaG9vayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgZXhlY3V0ZXMgYF9fbG9vcF9jbHJfZmQoKWAgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB0byBhdm9pZCBob2xkaW5nIGBvcGVuX211dGV4YCB3aGlsZSBmbHVzaGluZyBvdXRzdGFuZGluZyBJL08gYW5kIHVuZnJlZXppbmcgdGhlIHF1ZXVlLCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24gaW4gYGxvX3Bvc3RfcmVsZWFzZSgpYCBhbmQgYGxvb3BfcmVtb3ZlKClgLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXFxuLSBVc2VyLXNwYWNlIGRhdGEgY29waWVzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeTogTm8gZGF0YSBjb3BpZWQgdG8gdXNlci1zcGFjZSwgaW9jdGwgb3V0cHV0cywgcGFja2V0IGhlYWRlcnMsIG9yIGJyYW5jaGluZyBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuMzA4MzEwMzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU0NzMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YjM1NjNmN2RlMTk5MTQ3OGFhMzU1NWFlMzBhMTEzMmUzNDI3YmZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTI6NDg6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uN2NlNWFjYWFjZjQzZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtMTE4OCw2ICsxMTg4LDggQEAgdm9pZCBiZGV2X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmJkZXZfZmlsZSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRpZiAoYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlcG9zdF9yZWxlYXNlKVxcbitcXHRcXHRiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuIFxcbiBcXHRtb2R1bGVfcHV0KGRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZW93bmVyKTtcXG4gcHV0X25vX29wZW46XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdFxcdCpsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRsb19tdXRleDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGlkcl92aXNpYmxlO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsb19jbHJfd29yaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBsb29wX2NtZCB7XFxuQEAgLTExMzYsMTMgKzExMzcsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHA7XFxuIFxcdGdmcF90IGdmcCA9IGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2s7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xcbitcXHQvKlxcbitcXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxcbitcXHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxcbitcXHQgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXJcXG4rXFx0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxcbitcXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlXFxuK1xcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cXG4rXFx0ICovXFxuK1xcdGRyYWluX3dvcmtxdWV1ZShsby1cXHUwMDNld29ya3F1ZXVlKTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvT1xcbitcXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXFxuK1xcdCAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXFxuK1xcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXFxuK1xcdCAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLlxcbitcXHQgKi9cXG4rXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpKTtcXG4rXFxuK1xcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRXQVJOX09OX09OQ0UobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX3J1bmRvd24pO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bG8tXFx1MDAzZWxvX2xvY2spO1xcbiBcXHRmaWxwID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XFxuQEAgLTExNTMsMTIgKzExODMsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdGxvLVxcdTAwM2Vsb19zaXplbGltaXQgPSAwO1xcbiBcXHRtZW1zZXQobG8tXFx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0Llxcbi1cXHQgKlxcbi1cXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxcbi1cXHQgKiAtXFx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxcbi1cXHQgKi9cXG4rXFx0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbkBAIC0xMjAxLDExICsxMjI2LDkgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXFxuLVxcdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcXG4tXFx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4Llxcbi1cXHQgKi9cXG4rXFx0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbiBcXHRmcHV0KGZpbHApO1xcbiB9XFxuIFxcbkBAIC0xNzcxLDggKzE3OTQsMjIgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0bmVlZF9jbGVhciA9IChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbitcXHQgKiBhdm9pZGFuY2UpIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZyBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKVxcbitcXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cXG4rXFx0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuK1xcdCAqL1xcbiBcXHRpZiAobmVlZF9jbGVhcilcXG4tXFx0XFx0X19sb29wX2Nscl9mZChsbyk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3tcXG4rXFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG4rXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbkBAIC0xNzkxLDYgKzE4MjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuIFxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuIFxcdC5vcGVuID0gICAgICAgICBsb19vcGVuLFxcbiBcXHQucmVsZWFzZSA9XFx0bG9fcmVsZWFzZSxcXG4rXFx0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcXG4gXFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bCA9XFx0bG9fY29tcGF0X2lvY3RsLFxcbkBAIC0yMDM2LDYgKzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuIFxcdGlmICghbG8pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuIFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbkBAIC0yMTQwLDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbitcXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcbiBcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cXG4gXFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbiBcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uZjA1ZGJhMWI1OTYyZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbkBAIC0xNjA1LDYgKzE2MDUsMTIgQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHtcXG4gXFx0ICogZHJpdmVyLlxcbiBcXHQgKi9cXG4gXFx0aW50ICgqYWx0ZXJuYXRpdmVfZ3B0X3NlY3Rvcikoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90ICpzZWN0b3IpO1xcbitcXHQvKlxcbitcXHQgKiBDYWxsZWQgYWZ0ZXIgZGlzay1cXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cXG4rXFx0ICogVXNlZCBieSBsb29wIGRldmljZXMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gc3luY2hyb25pemF0aW9uIHdpdGhvdXRcXG4rXFx0ICogaG9sZGluZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LiBUaGlzIG9wZXJhdGlvbiBoYXMgdG8gYmUgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzIGIvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNcXG5pbmRleCBmYzk3ZGQ4NzM5NzQ2Li4yZmY3N2VmNDk3ODFiIDEwMDY0NFxcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXFxuKysrIGIvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNcXG5AQCAtMTI5LDYgKzEyOSw3IEBAIHB1YiBmbiBidWlsZFxcdTAwM2NUOiBPcGVyYXRpb25zXFx1MDAzZShcXG4gICAgICAgICAgICAgc3VibWl0X2JpbzogTm9uZSxcXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcXG4gICAgICAgICAgICAgcmVsZWFzZTogTm9uZSxcXG4rICAgICAgICAgICAgcG9zdF9yZWxlYXNlOiBOb25lLFxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcXG4gICAgICAgICAgICAgY29tcGF0X2lvY3RsOiBOb25lLFxcbiAgICAgICAgICAgICBjaGVja19ldmVudHM6IE5vbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjIwLjg1NDYwNDg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk2Njk5MTkwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBkZXZpY2UgcmVsZWFzZSBoYW5kbGluZyBpbiBibG9jay9iZGV2LmMgYnkgaW50cm9kdWNpbmcgYSBwb3N0X3JlbGVhc2UgY2FsbGJhY2ssIGFuZCByZWZhY3RvcnMgbG9vcCBkZXZpY2UgdGVhcmRvd24gaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYW51cCB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlLCBhZGRpbmcgUkNVIHN5bmNocm9uaXphdGlvbiwgcXVldWUgZnJlZXppbmcvZHJhaW5pbmcsIGxvY2tpbmcgY2hhbmdlcywgYW5kIG5ldyBXQVJOX09OIGFzc2VydGlvbnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBoYW5kbGVzIGNvbXBsZXggY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li43Y2U1YWNhYWNmNDNmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0xMTg4LDYgKzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxuIFx0ZWxzZVxuIFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuK1x0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbiBcbiBcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiBwdXRfbm9fb3BlbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxuK1x0ICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKClcbitcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuK1x0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXG4rXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdC8qXG4rXHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuK1x0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXG4rXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4rXHQgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbFxuK1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUzLDEyICsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTIwMSwxMSArMTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdC8qXG4tXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xuLVx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xuLVx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LlxuLVx0ICovXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc3MSw4ICsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcbitcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4rXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbitcdCAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuK3tcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuIFx0Lm93bmVyID1cdFRISVNfTU9EVUxFLFxuIFx0Lm9wZW4gPSAgICAgICAgIGxvX29wZW4sXG4gXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuK1x0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcbiBcdC5pb2N0bCA9XHRsb19pb2N0bCxcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bCA9XHRsb19jb21wYXRfaW9jdGwsXG5AQCAtMjAzNiw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxNDAsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE2MDUsNiArMTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4rXHQvKlxuK1x0ICogQ2FsbGVkIGFmdGVyIGRpc2stXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cbitcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4rXHQgKiBob2xkaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuXG4rXHQgKi9cbitcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICsxMjksNyBAQCBwdWIgZm4gYnVpbGRcdTAwM2NUOiBPcGVyYXRpb25zXHUwMDNlKFxuICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcbiAgICAgICAgICAgICByZWxlYXNlOiBOb25lLFxuKyAgICAgICAgICAgIHBvc3RfcmVsZWFzZTogTm9uZSxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsXG4gICAgICAgICAgICAgY2hlY2tfZXZlbnRzOiBOb25lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MjAuODU0NjA2MjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwODE3OTg1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEJsb2NrIExheWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBpZGVudGlmeWluZyB3aGV0aGVyIHRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoeSBvZiBmdXp6aW5nLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSBkdXJpbmcgdGVhcmRvd24gYW5kIHJlbGVhc2UsIGFuZCB0aGF0J3MgYW4gYXJlYSBJIGtub3cgaGFzIGJlZW4gYSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdGhlIHBhc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlcy4gRmlyc3QsIGBibG9jay9iZGV2LmNgIGludHJvZHVjZXMgYSBjYWxsIHRvIGEgYHBvc3RfcmVsZWFzZSgpYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBiZGV2X3JlbGVhc2UoKWAgZnVuY3Rpb24sIGJ1dCBjcnVjaWFsbHksIG9ubHkgaWYgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgYGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vmb3BzYC4gVGhpcyBpcyB0aGUgY29yZSBibG9jayBsYXllci4gVGhpcyBwb2ludHMgdG8gdGhlIHJlYWwgaGVhdnkgbGlmdGluZyBiZWluZyBkb25lIGJ5IHRoZSBjaGFuZ2UgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC5cblxuYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB3aGVyZSB0aGUgbWVhdCBvZiBpdCBpczogYSByZWZhY3RvciBvZiBzZXZlcmFsIGtleSBsb29wIGRldmljZSBmdW5jdGlvbnMgbGlrZSBgX19sb29wX2Nscl9mZCgpYCwgYGxvX3JlbGVhc2UoKWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlKClgLiBUaGlzIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBhIHdvcmtxdWV1ZSBpdGVtLCBgbG9fY2xyX3dvcmtgLCB0aGUgcXVldWluZyBhbmQgZmx1c2hpbmcgb2Ygd29yayBpbiBgbG9fcG9zdF9yZWxlYXNlKClgLCBhbmQgY2hhbmdlcyB0byB0aGUgcHJvY2VzcyBpbnZvbHZpbmcgcXVldWUgZnJlZXplL2RyYWluL3N5bmNocm9uaXplX3JjdSBpbiBgX19sb29wX2Nscl9mZCgpYC4gVGhlcmUncyBhbHNvIHRoZSBhZGRpdGlvbiBvZiBgV0FSTl9PTl9PTkNFYC4gVGhpcyBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGxvY2tpbmcgYW5kIGhvdyBhc3luY2hyb25vdXMgd29yayBpcyBoYW5kbGVkIGR1cmluZyBsb29wIGRldmljZSB0ZWFyZG93biwgYW5kIGFsdGVycyBsb2NraW5nIG9yZGVyIHdoaWNoIG1ha2VzIGl0IHJpcGUgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MuXG5cbkFkZGl0aW9uYWxseSwgd2UgaGF2ZSB1cGRhdGVzIHRvIGBpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oYCwgd2hlcmUgdGhleSdyZSBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBwb2ludGVyIHRvIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiB3aGVuIGRlZmluaW5nIGEgbmV3IGhvb2suIFRoZW4sIHRoZXJlJ3MgYSBtaW5vciBjaGFuZ2UgaW4gdGhlIFJ1c3QgY29kZSBpbiBgcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnNgLCB3aGVyZSBgcG9zdF9yZWxlYXNlYCBpcyBpbml0aWFsaXplZCB0byBgTm9uZWAuIFRoaXMgSSBhc3N1bWUgaXMganVzdCB0byBpbml0aWFsaXplIGl0IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIG5vIGltcGxlbWVudGF0aW9uIGluIFJ1c3QuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsICpjYW4qIHRoaXMgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBMb29wIGRldmljZXMgYXJlIGNyZWF0ZWQsIGNvbmZpZ3VyZWQsIG9wZW5lZCwgYW5kIGNsb3NlZCB1c2luZyBgaW9jdGxgIGNhbGxzIGxpa2UgYExPT1BfU0VUX0ZEYCBhbmQgYExPT1BfQ0xSX0ZEYC4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgaG93IHRvIHRyaWdnZXIgdGhpcyBsaWZlY3ljbGUuIFRoZSBhZGRpdGlvbiBvZiBhc3luY2hyb25vdXMgd29yaywgbW9kaWZpZWQgbG9ja2luZyBvcmRlciwgYW5kIHRoZSBgV0FSTl9PTl9PTkNFYCBhbGwgc2NyZWFtIFwiaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgZnV6emluZyFcIiBJIGNhbiBhbHJlYWR5IGltYWdpbmUgdGhlIHJhY2UgY29uZGl0aW9ucy4uLlxuXG5Ob3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhlIGxvb3AgZGV2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgY291bGQgcHJldmVudCB0aGlzIGZyb20gYmVpbmcgcmVhY2hhYmxlLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG9yIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIGNvbmZpcm0sIGJ1dCBmcm9tIHdoYXQgSSdtIHNlZWluZyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MzQuOTM2NDEyOTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6MzQuOTg0NTUwMDI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzI4Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYEtjb25maWdgIGZpbGVzLCBlc3BlY2lhbGx5IGluIHRoZSBibG9jayBkZXZpY2UgYXJlYS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgcmVzaWRlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIGRpcmVjdGl2ZXMsIG9yIHBlcmhhcHMgZXZlbiBzb21lIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlbiBhbmQgaG93IGBCTEtfREVWX0xPT1BgIGlzIGV4cG9zZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHByb3BlciBjb25maWd1cmF0aW9uIGFuZCB0cm91Ymxlc2hvb3RpbmcsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjM3Ljk0MTgzNjMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODozNy45NDE5MTQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDY4MTA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCBhcyBhbHRlcmVkOiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvX3Bvc3RfcmVsZWFzZWAsIGBsb29wX3JlbW92ZWAsIGBsb29wX2FkZGAsIGFuZCBgYmRldl9yZWxlYXNlYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCB0aGVpciBpbXBhY3QgaXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGJyb2FkZW4gbXkgc2NvcGUgYSBiaXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGBsb29wLmNgIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZXhwbGljaXRseSBmbGFnZ2VkPyBJJ2xsIG5lZWQgdG8gZ2V0IGEgZ29vZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cbk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiBgX19sb29wX2Nscl9mZGAsIGFuZCBpdHMgY2xvc2UgcmVsYXRpb24gYGxvb3BfY2xyX2ZkYCwgYW5kIGBsb19yZWxlYXNlYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGlzIHBhcmFtb3VudCB0byBmaWd1cmluZyBvdXQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQxLjA4ODcyODczOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ5NDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xvb3BfY2xyX2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk3PXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDk6ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpL19fbG9vcF9jbHJfZmQoKSBjYWxscy5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTAtICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDA2PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTQwOnN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNy1cXHQgKiBsby1cXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTg6XFx0ICogZmluaXNoZWQuIFRoZXJlIGNhbm5vdCBiZSBhbnlib2R5IGVsc2UgZW50ZXJpbmcgX19sb29wX2Nscl9mZCgpIGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOS1cXHQgKiBMb19ydW5kb3duIHN0YXRlIHByb3RlY3RzIHVzIGZyb20gYWxsIHRoZSBvdGhlciBwbGFjZXMgdHJ5aW5nIHRvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzc3PXN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzk4LVxcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3OTk6XFx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODAwLVxcdCAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgwNz1zdGF0aWMgdm9pZCBsb19wb3N0X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MTE6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTItXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNjE9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzYtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA3NzpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3OC1cXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4MD1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODEte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODI6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODMtXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NDEuMTM4MjI4NDA4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTAwMzE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBMb29wIERldmljZSBDbGVhcmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9vcCBkZXZpY2UgY2xlYXJpbmcgcHJvY2Vzcy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQncyB6ZXJvIGluIG9uIHRoZSBgbG9vcF9jbHJfZmRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb29wIGRldmljZSdzIGZpbGUgZGVzY3JpcHRvciBnZXRzIGNsZWFyZWQgd2hlbiBpdCdzIHJlbGVhc2VkIG9yIGRldGFjaGVkLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIGZyZWVpbmcgcmVzb3VyY2VzIGFuZCBicmVha2luZyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsb29wIGRldmljZSBhbmQgaXRzIGJhY2tpbmcgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQzLjQ1MzIzNDA0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9jbHJfZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDY9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDA6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVxcdCAqIGxvLVxcdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcXHQgKiBmaW5pc2hlZC4gVGhlcmUgY2Fubm90IGJlIGFueWJvZHkgZWxzZSBlbnRlcmluZyBfX2xvb3BfY2xyX2ZkKCkgYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVxcdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIzNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQwLVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNDE6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQyLVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTYyPXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5My1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1OTQ6XFx0XFx0cmV0dXJuIGxvb3BfY2xyX2ZkKGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTk1LVxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc3Nz1zdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5OC1cXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk5OlxcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgwMC1cXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MDc9c3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxMC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODExOlxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEyLVxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYxPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDc2LVxcdFxcdGdvdG8gb3V0O1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwNzc6XFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXFx0bG8tXFx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIxODA9c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTgxLXtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgyOlxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTgzLVxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQzLjUwMjYxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0ODM5MTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvb3BfY2xyX2ZkYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBpbiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYGxvb3BfY2xyX2ZkYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIGtub3cgdGhhdCdzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmFja2luZyBmaWxlIGZvciBhIGxvb3AgZGV2aWNlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBhcnRpY3VsYXJseSBhcm91bmQgbG9ja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtYXliZSBzb21lIHN1YnRsZSBlZGdlIGNhc2VzIGludm9sdmluZyBlcnJvciBoYW5kbGluZyB3aGVuIGNsb3NpbmcgdGhlIGZpbGUuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2xlYW51cCBpcyBkb25lIHJpZ2h0LiBJJ20gY29uc2lkZXJpbmcgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXJlJ3MgYSByaXNrIG9mIGxlYWtpbmcgZmlsZSBkZXNjcmlwdG9ycyBvciBjYXVzaW5nIGEgcmVzb3VyY2UgZXhoYXVzdGlvbiBhdHRhY2sgaWYgdGhlIGNsZWFudXAgaXNuJ3Qgcm9idXN0LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjQ4LjA1MTAwOTkwNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNDpcXHRcXG4xMjM1OlxcdHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4xMjM2OlxcdHtcXG4xMjM3OlxcdFxcdGludCBlcnI7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdC8qXFxuMTI0MDpcXHRcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG4xMjQxOlxcdFxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuMTI0MjpcXHRcXHQgKlxcbjEyNDM6XFx0XFx0ICogVGhlcmVmb3JlLCB1c2UgZ2xvYmFsIGxvY2sgd2hlbiBzZXR0aW5nIExvX3J1bmRvd24gc3RhdGUgaW4gb3JkZXIgdG9cXG4xMjQ0OlxcdFxcdCAqIG1ha2Ugc3VyZSB0aGF0IGxvb3BfdmFsaWRhdGVfZmlsZSgpIHdpbGwgZmFpbCBpZiB0aGUgXFxcInN0cnVjdCBmaWxlXFxcIlxcbjEyNDU6XFx0XFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcXG4xMjQ2OlxcdFxcdCAqIGxvb3AgZGV2aWNlLlxcbjEyNDc6XFx0XFx0ICovXFxuMTI0ODpcXHRcXHRlcnIgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCB0cnVlKTtcXG4xMjQ5OlxcdFxcdGlmIChlcnIpXFxuMTI1MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNTE6XFx0XFx0aWYgKGxvLVxcdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xcbjEyNTI6XFx0XFx0XFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcXG4xMjUzOlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuMTI1NDpcXHRcXHR9XFxuMTI1NTpcXHRcXHQvKlxcbjEyNTY6XFx0XFx0ICogTWFyayB0aGUgZGV2aWNlIGZvciByZW1vdmluZyB0aGUgYmFja2luZyBkZXZpY2Ugb24gbGFzdCBjbG9zZS5cXG4xMjU3OlxcdFxcdCAqIElmIHdlIGFyZSB0aGUgb25seSBvcGVuZXIsIGFsc28gc3dpdGNoIHRoZSBzdGF0ZSB0byByb3VuZG93biBoZXJlIHRvXFxuMTI1ODpcXHRcXHQgKiBwcmV2ZW50IG5ldyBvcGVuZXJzIGZyb20gY29taW5nIGluLlxcbjEyNTk6XFx0XFx0ICovXFxuMTI2MDpcXHRcXG4xMjYxOlxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19BVVRPQ0xFQVI7XFxuMTI2MjpcXHRcXHRpZiAoZGlza19vcGVuZXJzKGxvLVxcdTAwM2Vsb19kaXNrKSA9PSAxKVxcbjEyNjM6XFx0XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xcbjEyNjQ6XFx0XFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHR9XFxuMTI2ODpcXHRcXG4xMjY5OlxcdHN0YXRpYyBpbnRcXG4xMjcwOlxcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXFxuMTI3MTpcXHR7XFxuMTI3MjpcXHRcXHRpbnQgZXJyO1xcbjEyNzM6XFx0XFx0Ym9vbCBwYXJ0c2NhbiA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo0OC4wNTEyOTI4MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MTM4NTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHN0YXJ0aW5nIHdpdGggYSBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBsb19yZWxlYXNlYCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBsb19yZWxlYXNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBJIG5lZWQgdG8gbG9vayBhdCB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBsaWtlbHkgYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlIG9mIGxvb3BiYWNrIGRldmljZXMuIEl0IGNvdWxkIGJlIGFib3V0IHJlc291cmNlIGNsZWFudXAsIGhhbmRsaW5nIGRldmljZSBjbG9zdXJlLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS4gXG5cbkdpdmVuIG15IGJhY2tncm91bmQsIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIGRldmljZSBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBob3cgYGxvX3JlbGVhc2VgIGludGVyYWN0cyB3aXRoIG90aGVyIGtleSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIsIGxpa2UgYGxvX29wZW5gLCBgbG9faW9jdGxgLCBhbmQgYW55IGludGVycnVwdCBoYW5kbGVycyBpZiB0aGV5IGV4aXN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93OlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgcmVzb3VyY2VzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2hlbiByZWxlYXNpbmcgcmVzb3VyY2VzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3IgYXRvbWljIG9wZXJhdGlvbnMuXG4qICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIFdoYXQgcmVzb3VyY2VzIGlzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcsIGFuZCBob3cgaXMgaXQgZG9pbmcgc28/IEknbSB0aGlua2luZyBvZiBtZW1vcnkgYWxsb2NhdGlvbnMsIGZpbGUgZGVzY3JpcHRvcnMgKGlmIGFwcGxpY2FibGUpLCBhbmQgZGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZXMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhbiBlcnJvciBkdXJpbmcgdGhlIHJlbGVhc2UgcHJvY2Vzcz8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBwYXJ0aWFsIHJlbGVhc2Ugb3IgcmVwb3J0IGVycm9ycyBhcHByb3ByaWF0ZWx5P1xuKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBWRlM6KiogSG93IGRvZXMgYGxvX3JlbGVhc2VgIGltcGFjdCB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKT8gRG9lcyBpdCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGludmFsaWRhdGUgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBub3RpZnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHM/XG5cbk15IG1lbnRhbCBjaGVja2xpc3QgZ29lcyBmdXJ0aGVyIHRoYW4gdGhpcywgb2YgY291cnNlLCBiZWNhdXNlIEkgbmVlZCB0byBjaGVjayBhbGwgYXNwZWN0cyBvZiB0aGUgY29kZSwgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gYXQgaGFuZCBpZiB0aGVyZSBpcyBhIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo1MS42MzI2ODE2MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NzU6XFx0fVxcbjE3NzY6XFx0XFxuMTc3NzpcXHRzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbjE3Nzg6XFx0e1xcbjE3Nzk6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNzgwOlxcdFxcdGJvb2wgbmVlZF9jbGVhciA9IGZhbHNlO1xcbjE3ODE6XFx0XFxuMTc4MjpcXHRcXHRpZiAoZGlza19vcGVuZXJzKGRpc2spIFxcdTAwM2UgMClcXG4xNzgzOlxcdFxcdFxcdHJldHVybjtcXG4xNzg0OlxcdFxcdC8qXFxuMTc4NTpcXHRcXHQgKiBDbGVhciB0aGUgYmFja2luZyBkZXZpY2UgaW5mb3JtYXRpb24gaWYgdGhpcyBpcyB0aGUgbGFzdCBjbG9zZSBvZlxcbjE3ODY6XFx0XFx0ICogYSBkZXZpY2UgdGhhdCdzIGJlZW4gbWFya2VkIGZvciBhdXRvIGNsZWFyLCBvciBvbiB3aGljaCBMT09QX0NMUl9GRFxcbjE3ODc6XFx0XFx0ICogaGFzIGJlZW4gY2FsbGVkLlxcbjE3ODg6XFx0XFx0ICovXFxuMTc4OTpcXHRcXG4xNzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuMTc5MTpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlID09IExvX2JvdW5kIFxcdTAwMjZcXHUwMDI2IChsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19BVVRPQ0xFQVIpKVxcbjE3OTI6XFx0XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3J1bmRvd24pO1xcbjE3OTM6XFx0XFxuMTc5NDpcXHRcXHRuZWVkX2NsZWFyID0gKGxvLVxcdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcXG4xNzk1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4xNzk2OlxcdFxcbjE3OTc6XFx0XFx0LypcXG4xNzk4OlxcdFxcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyAod2l0aG91dCBvcGVuX211dGV4IGZvciBkZWFkbG9ja1xcbjE3OTk6XFx0XFx0ICogYXZvaWRhbmNlKSBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKClcXG4xODAwOlxcdFxcdCAqIHRvIFdRIGNvbnRleHQgYW5kIGxldCBsb19wb3N0X3JlbGVhc2UoKSB3YWl0IGZvciBjb21wbGV0aW9uLlxcbjE4MDE6XFx0XFx0ICogVGhlIExvX3J1bmRvd24gc3RhdGUgZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuMTgwMjpcXHRcXHQgKi9cXG4xODAzOlxcdFxcdGlmIChuZWVkX2NsZWFyKVxcbjE4MDQ6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuMTgwNTpcXHR9XFxuMTgwNjpcXHRcXG4xODA3OlxcdHN0YXRpYyB2b2lkIGxvX3Bvc3RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4xODA4OlxcdHtcXG4xODA5OlxcdFxcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cXG4xODEyOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NTEuNjMyODQzNTY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTQwNDM1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqQ2hlY2tpbmcgYmRldl9yZWxlYXNlIGluIGJsb2NrL2JkZXYuYyoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBhcmVhLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gR2l2ZW4gd2hhdCBJJ20gbG9va2luZyBhdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgYmRldl9yZWxlYXNlYCBmdW5jdGlvbiBpbiBgYmxvY2svYmRldi5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBhbmQgY291bGQgZWFzaWx5IGJlIHRoZSBzb3VyY2Ugb2Ygc3VidGxlIGVycm9ycywgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgY2xlYW51cCBvciBzdGF0ZSB0cmFuc2l0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHJvbGUgYW5kIG1ha2Ugc3VyZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbnRleHQgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJdCdzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZTsgYWx3YXlzIGJldHRlciB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjUzLjU0Njg5MDg2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAoaG9sZGVyKVxcbjExNzc6XFx0XFx0XFx0YmRfeWllbGRfY2xhaW0oYmRldl9maWxlKTtcXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0LypcXG4xMTgwOlxcdFxcdCAqIFRyaWdnZXIgZXZlbnQgY2hlY2tpbmcgYW5kIHRlbGwgZHJpdmVycyB0byBmbHVzaCBNRURJQV9DSEFOR0VcXG4xMTgxOlxcdFxcdCAqIGV2ZW50LiAgVGhpcyBpcyB0byBlbnN1cmUgZGV0ZWN0aW9uIG9mIG1lZGlhIHJlbW92YWwgY29tbWFuZGVkXFxuMTE4MjpcXHRcXHQgKiBmcm9tIHVzZXJsYW5kIC0gZS5nLiBlamVjdCgxKS5cXG4xMTgzOlxcdFxcdCAqL1xcbjExODQ6XFx0XFx0ZGlza19mbHVzaF9ldmVudHMoZGlzaywgRElTS19FVkVOVF9NRURJQV9DSEFOR0UpO1xcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikpXFxuMTE4NzpcXHRcXHRcXHRibGtkZXZfcHV0X3BhcnQoYmRldik7XFxuMTE4ODpcXHRcXHRlbHNlXFxuMTE4OTpcXHRcXHRcXHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xcbjExOTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4xMTkxOlxcdFxcdGlmIChiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UpXFxuMTE5MjpcXHRcXHRcXHRiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cXHUwMDNlYmRfZGlzayk7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdG1vZHVsZV9wdXQoZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIpO1xcbjExOTU6XFx0cHV0X25vX29wZW46XFxuMTE5NjpcXHRcXHRibGtkZXZfcHV0X25vX29wZW4oYmRldik7XFxuMTE5NzpcXHR9XFxuMTE5ODpcXHRcXG4xMTk5OlxcdC8qKlxcbjEyMDA6XFx0ICogYmRldl95aWVsZF9jbGFpbSAtIGdpdmUgdXAgdGhlIGhvbGRlciBjbGFpbSBvbiBhbiBvcGVuIGJsb2NrIGRldmljZVxcbjEyMDE6XFx0ICogQGJkZXZfZmlsZTogb3BlbiBibG9jayBkZXZpY2VcXG4xMjAyOlxcdCAqXFxuMTIwMzpcXHQgKiBZaWVsZCB0aGUgaG9sZGVyIGFuZCBhbnkgd3JpdGUgYWNjZXNzIGZvciBAYmRldl9maWxlIHdpdGhvdXQgY2xvc2luZyBpdCwgc29cXG4xMjA0OlxcdCAqIHRoZSBjYWxsZXIgY2FuIHN0aWxsIGFjdCBvbiB0aGUgZGV2aWNlIC0gZS5nLiBiZGV2X2FsbG93X2ZyZWV6ZSgpIGl0IC0gYmVmb3JlXFxuMTIwNTpcXHQgKiB0aGUgZmluYWwgYmRldl9mcHV0KCkuICBiZGV2X2ZwdXQoKSB5aWVsZHMgdG9vLCBzbyBjYWxsaW5nIGl0IGFmdGVyd2FyZHMgaXNcXG4xMjA2OlxcdCAqIHNhZmUuXFxuMTIwNzpcXHQgKi9cXG4xMjA4OlxcdHZvaWQgYmRldl95aWVsZF9jbGFpbShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxcbjEyMDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMjo0ODo1My41NDcwOTA1NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMxMTk1MzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogQmxvY2sgRGV2aWNlIFJlbGVhc2Ugd2l0aCBMb29wIERldmljZSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIExldCdzIGJyZWFrIGl0IGRvd246IEZpcnN0LCBpdCBsb29rcyBsaWtlIGEgYHBvc3RfcmVsZWFzZWAgY2FsbGJhY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AgYW5kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGBvcGVuX211dGV4YCBpcyBkcm9wcGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNoYW5nZSBpbiB0aGUgbG9vcCBkZXZpY2UgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBgX19sb29wX2Nscl9mZGAsIHdoaWNoIHVzZWQgdG8gYmUgc3luY2hyb25vdXMgd2l0aGluIGBsb19yZWxlYXNlYCAod2hpbGUgaG9sZGluZyB0aGF0IGNyaXRpY2FsIGBvcGVuX211dGV4YCksIGlzIG5vdyBiZWluZyBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYHN5c3RlbV9sb25nX3dxYCkuXG5cbmBsb19yZWxlYXNlYCBub3cgcXVldWVzIGBsby1cdTAwM2Vsb19jbHJfd29ya2AsIGFuZCB0aGUgbmV3IGBsb19wb3N0X3JlbGVhc2VgIGZsdXNoZXMgdGhhdCB3b3JrcXVldWUgKmFmdGVyKiB0aGUgYG9wZW5fbXV0ZXhgIGlzIGRyb3BwZWQuIFdpdGhpbiBgX19sb29wX2Nscl9mZGAgaXRzZWxmLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHNldmVyYWwgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXM6IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGBibGtfbXFfZnJlZXplX3F1ZXVlYCAvIGBibGtfbXFfdW5mcmVlemVfcXVldWVgLCBhbmQgaW1wb3J0YW50bHksIGl0J3MgKmxvY2tpbmcqIGBvcGVuX211dGV4YCBhdCBzdGVwIDIuIEEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGlzIGFsc28gaW50cm9kdWNlZCB0byBjaGVjayBgbG8tXHUwMDNlbG9fc3RhdGVgLiBGdXJ0aGVyLCBgbG9vcF9yZW1vdmVgIGFsc28gZmx1c2hlcyBgbG8tXHUwMDNlbG9fY2xyX3dvcmtgLlxuXG5JcyB0aGlzIHJpcGUgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGNvcmUgYmxvY2sgZGV2aWNlIGNsZWFudXAgKGBiZGV2X3JlbGVhc2VgKSBhbmQgbG9vcCBkZXZpY2UgY2xlYW51cC4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYXZhaWxhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgZnV6emluZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBjb25jdXJyZW5jeSBhc3BlY3RzLCBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGhhbmRsaW5nLCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nLCB3b3JrcXVldWUgZHJhaW5pbmcsIGNoYW5naW5nIGxvY2sgb3JkZXJzIChgb3Blbl9tdXRleGAsIGBsb19tdXRleGAsIGBsb19sb2NrYCksIGFuZCBhZGRzIGEgcnVudGltZSBhc3NlcnRpb24sIGFsbCBvZiB3aGljaCBhcmUgY2xhc3NpYyB0YXJnZXRzIGZvciBjb25jdXJyZW5jeSBidWdzIGxpa2UgZGVhZGxvY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMuIEkgY2FuIHByYWN0aWNhbGx5IHNtZWxsIHRoZSBwb3RlbnRpYWwgYnVncy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9fcG9zdF9yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfcmVtb3ZlYCwgYW5kIGBiZGV2X3JlbGVhc2VgLiBOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgYXJlIGFsbCBleGFjdCBmdW5jdGlvbiBuYW1lcyBpbiB0aGUgQyBjb2RlOiBPa2F5LCBgX19sb29wX2Nscl9mZGAgaXMgYHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKWAuIGBsb19yZWxlYXNlYCBpcyBgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylgLiBgbG9fcG9zdF9yZWxlYXNlYCBpcyBgc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKWAuIGBsb29wX2Nscl9mZGAgaXMgYHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylgLiBgbG9vcF9yZW1vdmVgIGlzIGBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKWAuIEFuZCBmaW5hbGx5LCBgYmRldl9yZWxlYXNlYCBpcyBgdm9pZCBiZGV2X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmJkZXZfZmlsZSlgLiBHb29kLCBhbGwgY29uZmlybWVkLlxuXG5JIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxPQ0tgLiBgQkxLX0RFVl9MT09QYCBkZXBlbmRzIG9uIGBCTE9DS2AuIEkgcXVpY2tseSBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kIGFzIGV4cGVjdGVkLCBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdXJ0aGVyIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gQWxyaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDg6NTkuODU5MDQ3MjM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM3MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIEJMS19ERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2Om1lbnVjb25maWcgQkxLX0RFVlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03LVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ4OjU5LjkyMTQzMTUyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ2MjU3NzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2V0dXAgaGVyZS4gV2UncmUgbGV2ZXJhZ2luZyBgQkxLX0RFVl9MT09QYCwgd2hpY2ggaXMgdGhlIHByaW1hcnkgZHJpdmVyLCBhbmQgYWxzbyBlbmFibGluZyBgQkxPQ0tgIGFzIGEga2VybmVsIGNvbmZpZyBvcHRpb24uIFN0YW5kYXJkIHN0dWZmLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBgc2V0LXJlc3VsdHNgIGlzIGZvcm1hdHRlZCBjb3JyZWN0bHksIGdvaW5nIHRocm91Z2ggdGhlIGFyZ3VtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBlbmFibGluZyBgQkxLX0RFVl9MT09QYCBhbmQgYEJMT0NLYCB3aXRoIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2hpY2ggaXMgY29ycmVjdCwgYW5kIHRhcmdldGluZyBvdXIgZnV6emluZyB3aXRoIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIGFwcHJvcHJpYXRlbHkgc3BlY2lmaWMgYW5kIHJlbGV2YW50OiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvX3Bvc3RfcmVsZWFzZWAsIGBsb29wX2Nscl9mZGAsIGBiZGV2X3JlbGVhc2VgLCBhbmQgYGxvb3BfcmVtb3ZlYCAtIHRoZXNlIG1ha2Ugc2Vuc2UgdG8gYmUgdGFyZ2V0ZWQgYXMgdGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHBhdGNoIGNoYW5nZXMuIFRoZSBcIlJlYXNvbmluZ1wiIGlzIGNvbmNpc2UsIHdoaWNoIGlzIGdvb2QuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGV2ZXJ5dGhpbmcgb25lIG1vcmUgdGltZS4gV2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2gsIHNvIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgc3BlY2lmaWMsIHNvIHRoZXkgYXJlIG5vbi11YmlxdWl0b3VzLCBhbmQgYXJlIHNwZWNpZmljIHRvIHRoZSBwYXRjaCBjaGFuZ2VzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLiBBbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhci5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ5OjEwLjM4NDAxMjgyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDUwNTExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvX3Bvc3RfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImJkZXZfcmVsZWFzZVwiLFxuICAgIFwibG9vcF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBkZXZpY2UgcmVsZWFzZSBoYW5kbGluZyBpbiBibG9jay9iZGV2LmMgYnkgaW50cm9kdWNpbmcgYSBwb3N0X3JlbGVhc2UgY2FsbGJhY2ssIGFuZCByZWZhY3RvcnMgbG9vcCBkZXZpY2UgdGVhcmRvd24gaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYW51cCB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlLCBhZGRpbmcgUkNVIHN5bmNocm9uaXphdGlvbiwgcXVldWUgZnJlZXppbmcvZHJhaW5pbmcsIGxvY2tpbmcgY2hhbmdlcywgYW5kIG5ldyBXQVJOX09OIGFzc2VydGlvbnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBoYW5kbGVzIGNvbXBsZXggY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19yZWxlYXNlXCIsXG4gICAgXCJsb19wb3N0X3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJiZGV2X3JlbGVhc2VcIixcbiAgICBcImxvb3BfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgZGV2aWNlIHJlbGVhc2UgaGFuZGxpbmcgaW4gYmxvY2svYmRldi5jIGJ5IGludHJvZHVjaW5nIGEgcG9zdF9yZWxlYXNlIGNhbGxiYWNrLCBhbmQgcmVmYWN0b3JzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFudXAgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSwgYWRkaW5nIFJDVSBzeW5jaHJvbml6YXRpb24sIHF1ZXVlIGZyZWV6aW5nL2RyYWluaW5nLCBsb2NraW5nIGNoYW5nZXMsIGFuZCBuZXcgV0FSTl9PTiBhc3NlcnRpb25zLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaGFuZGxlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCB0ZWFyZG93biBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MTAuNTI0NTMwODEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NzU4MjEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEyOjQ5OjEwLjUyNzU2MDk1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMTg0NTQ3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIG5ldyBgbG9fY2xyX3dvcmtgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIG5ldyBjYWxsYmFjayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBkZWZhdWx0cyB0byBOVUxMIGFjcm9zcyBzdGF0aWMgZGVjbGFyYXRpb25zIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOb25lYCBpbiBSdXN0IGJpbmRpbmdzLlxcbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViMzU2M2Y3ZGUxOTkxNDc4YWEzNTU1YWUzMGExMTMyZTM0MjdiZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEyOjQ4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li43Y2U1YWNhYWNmNDNmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0xMTg4LDYgKzExODgsOCBAQCB2b2lkIGJkZXZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqYmRldl9maWxlKVxuIFx0ZWxzZVxuIFx0XHRibGtkZXZfcHV0X3dob2xlKGJkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRpZiAoYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZWZvcHMtXHUwMDNlcG9zdF9yZWxlYXNlKVxuK1x0XHRiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vwb3N0X3JlbGVhc2UoYmRldi1cdTAwM2ViZF9kaXNrKTtcbiBcbiBcdG1vZHVsZV9wdXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiBwdXRfbm9fb3BlbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA3NThjMjA2NzhiZjZjLi45ZmUwZjdjYTRjN2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM2LDEzICsxMTM3LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKVxuK1x0ICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKClcbitcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuK1x0ICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXG4rXHQgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdC8qXG4rXHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuK1x0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXG4rXHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4rXHQgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbFxuK1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUzLDEyICsxMTgzLDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTIwMSwxMSArMTIyNiw5IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdC8qXG4tXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xuLVx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xuLVx0ICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LlxuLVx0ICovXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc3MSw4ICsxNzk0LDIyIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gKHdpdGhvdXQgb3Blbl9tdXRleCBmb3IgZGVhZGxvY2tcbitcdCAqIGF2b2lkYW5jZSkgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpXG4rXHQgKiB0byBXUSBjb250ZXh0IGFuZCBsZXQgbG9fcG9zdF9yZWxlYXNlKCkgd2FpdCBmb3IgY29tcGxldGlvbi5cbitcdCAqIFRoZSBMb19ydW5kb3duIHN0YXRlIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICovXG4gXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9fcG9zdF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuK3tcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMTc5MSw2ICsxODI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuIFx0Lm93bmVyID1cdFRISVNfTU9EVUxFLFxuIFx0Lm9wZW4gPSAgICAgICAgIGxvX29wZW4sXG4gXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuK1x0LnBvc3RfcmVsZWFzZSA9IGxvX3Bvc3RfcmVsZWFzZSxcbiBcdC5pb2N0bCA9XHRsb19pb2N0bCxcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bCA9XHRsb19jb21wYXRfaW9jdGwsXG5AQCAtMjAzNiw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxNDAsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5mMDVkYmExYjU5NjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE2MDUsNiArMTYwNSwxMiBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xuIFx0ICogZHJpdmVyLlxuIFx0ICovXG4gXHRpbnQgKCphbHRlcm5hdGl2ZV9ncHRfc2VjdG9yKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3QgKnNlY3Rvcik7XG4rXHQvKlxuK1x0ICogQ2FsbGVkIGFmdGVyIGRpc2stXHUwMDNlb3Blbl9tdXRleCBpcyByZWxlYXNlZCBpbiB0aGUgYmRldl9yZWxlYXNlKCkgcGF0aC5cbitcdCAqIFVzZWQgYnkgbG9vcCBkZXZpY2VzIHRoYXQgbmVlZCB0byBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiB3aXRob3V0XG4rXHQgKiBob2xkaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIGlkZW1wb3RlbnQuXG4rXHQgKi9cbitcdHZvaWQgKCpwb3N0X3JlbGVhc2UpKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvYmxvY2svbXEvZ2VuX2Rpc2sucnMgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuaW5kZXggZmM5N2RkODczOTc0Ni4uMmZmNzdlZjQ5NzgxYiAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL2Jsb2NrL21xL2dlbl9kaXNrLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9ibG9jay9tcS9nZW5fZGlzay5yc1xuQEAgLTEyOSw2ICsxMjksNyBAQCBwdWIgZm4gYnVpbGRcdTAwM2NUOiBPcGVyYXRpb25zXHUwMDNlKFxuICAgICAgICAgICAgIHN1Ym1pdF9iaW86IE5vbmUsXG4gICAgICAgICAgICAgb3BlbjogTm9uZSxcbiAgICAgICAgICAgICByZWxlYXNlOiBOb25lLFxuKyAgICAgICAgICAgIHBvc3RfcmVsZWFzZTogTm9uZSxcbiAgICAgICAgICAgICBpb2N0bDogTm9uZSxcbiAgICAgICAgICAgICBjb21wYXRfaW9jdGw6IE5vbmUsXG4gICAgICAgICAgICAgY2hlY2tfZXZlbnRzOiBOb25lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MTAuNTI3NTYzNzYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTg0NTI2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgQXNzZXNzbWVudDogUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzIFwibm8sXCIgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkZpcnN0LCBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzLiBJdCdzIGVzc2VudGlhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgY2xlYW51cCBvZiBsb29wIGRldmljZXMuIFdlJ3ZlIGdvdCBgYmxvY2svYmRldi5jYCBhZGRpbmcgYSBgcG9zdF9yZWxlYXNlYCBjYWxsLCBgZHJpdmVycy9ibG9jay9sb29wLmNgIHJld29ya2luZyB0aGUgbG9vcCBkZXZpY2UncyBsaWZlY3ljbGUgd2l0aCB3b3JrcXVldWVzLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdXBkYXRlcyB0byB0aGUgYGJsa2Rldi5oYCBpbmNsdWRlIGFuZCB0aGUgUnVzdCBzaWRlIChgZ2VuX2Rpc2sucnNgKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBkZWZlcnJpbmcgdGhlIGNsZWFudXAsIHVzaW5nIHdvcmtxdWV1ZXMgdG8gYXZvaWQgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBkdXJpbmcgZGV2aWNlIHJlbGVhc2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxvX2Nscl93b3JrYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGFuZCBgbG9fcG9zdF9yZWxlYXNlYCBhcmUgYWxsIGFib3V0IHRoaXMgZGVmZXJyZWQgY2xlYW51cCBtZWNoYW5pc20gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuTm93LCB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBsaWtlIHVzZS1hZnRlci1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gTE9DS0RFUCBkZWFscyB3aXRoIGxvY2sgb3JkZXJpbmcgYW5kIGRlYWRsb2NrIGRldGVjdGlvbi5cblxuTG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncy4gYGxvYCBpcyBiZWluZyB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgIGluIGBsb29wX2FkZGAsIGFuZCB3ZSBoYXZlIGBJTklUX1dPUktgIGluaXRpYWxpemluZyB0aGUgYHdvcmtfc3RydWN0YC4gV2UgZXhwbGljaXRseSBzZXQgYHBvc3RfcmVsZWFzZWAgdG8gYE5vbmVgIGluIHRoZSBSdXN0IHNpZGUgb3IgaXQncyBpbXBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gQywgd2l0aCBhIE5VTEwgY2hlY2sgYmVmb3JlIGNhbGxpbmcgaXQsIGFzIGluIHRoZSBgYmRldl9yZWxlYXNlKClgIGZ1bmN0aW9uLiBUaGUgd29yayBmdW5jdGlvbiBgX19sb29wX2Nscl9mZGAgaXMgcmV0cmlldmluZyBpdHMgbG9vcF9kZXZpY2UgdXNpbmcgY29udGFpbmVyX29mLCB3aGljaCBtZWFucyBubyBwb2ludGVycyBhcmUgYmVpbmcgdXNlZCBiZWZvcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gbmV3IGBjb3B5X3RvX3VzZXJgLCBubyBpb2N0bCBvdXRwdXQgc3RydWN0cyBiZWluZyBjaGFuZ2VkLCBubyBidWZmZXIgbGVuZ3RocyBiZWluZyBjaGFuZ2VkLiBUaGUgcGF0Y2ggaXMgdmVyeSBmb2N1c2VkIG9uIGRlZmVycmVkIGNsZWFudXAgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQncyBhYm91dCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgcHJvcGVybHkgd2l0aG91dCBjYXVzaW5nIGRlYWRsb2Nrcy5cblxuSSBkaWQgYSBzZWNvbmQgbG9vayBhdCBgX19sb29wX2Nscl9mZGAgaW4gYGxvb3AuY2AsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSwgY2hlY2tpbmcgdmFyaWFibGVzLCBldGMuIFRoZSB1c2Ugb2YgYGxpbWAgdG8gc2V0IHRoZSBsb2dpY2FsIGFuZCBwaHlzaWNhbCBibG9jayBzaXplcyB3YXMgYWxyZWFkeSB0aGVyZTsgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyBuZXcgd2l0aCB0aG9zZSB2YXJpYWJsZXMuIFRoZXkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGVpciB1c2FnZS5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBjbGVhbnVwIHBhdGNoLCBub3RoaW5nIHRvIGRvIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLiBBbnkgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3IgbG9ja2luZyBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucy4gSSBkb24ndCBzZWUgYW55IG5ldyBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGFueXRoaW5nIGhlcmUuIFNvLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuSSBuZWVkIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIEknbGwgbmVlZCB0byBmb3JtdWxhdGUgYSBjbGVhciBleHBsYW5hdGlvbiwgcGVyaGFwcyBjb250cmFzdGluZyBLQVNBTiAvIExPQ0tERVAgd2l0aCBLTVNBTiwgdG8ganVzdGlmeSBteSBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwNywiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTI6NDk6MjIuNzEyMDkzMjE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gYW5kIGRlYWRsb2NrIGlzc3VlIGR1cmluZyBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93bi4gSXQgaW50cm9kdWNlcyBhIGBwb3N0X3JlbGVhc2VgIGhvb2sgaW4gYHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIGV4ZWN1dGVzIGBfX2xvb3BfY2xyX2ZkKClgIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoYGxvX2Nscl93b3JrYCkgdG8gYXZvaWQgaG9sZGluZyBgb3Blbl9tdXRleGAgd2hpbGUgZmx1c2hpbmcgb3V0c3RhbmRpbmcgSS9PIGFuZCB1bmZyZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIGluIGBsb19wb3N0X3JlbGVhc2UoKWAgYW5kIGBsb29wX3JlbW92ZSgpYC5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIG5ldyBgbG9fY2xyX3dvcmtgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIG5ldyBjYWxsYmFjayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBkZWZhdWx0cyB0byBOVUxMIGFjcm9zcyBzdGF0aWMgZGVjbGFyYXRpb25zIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOb25lYCBpbiBSdXN0IGJpbmRpbmdzLlxcbi0gVXNlci1zcGFjZSBkYXRhIGNvcGllcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnk6IE5vIGRhdGEgY29waWVkIHRvIHVzZXItc3BhY2UsIGlvY3RsIG91dHB1dHMsIHBhY2tldCBoZWFkZXJzLCBvciBicmFuY2hpbmcgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gQnVnIEFwcGxpY2FiaWxpdHk6IEFueSBzeW5jaHJvbml6YXRpb24gYnVncywgd29ya3F1ZXVlIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgb3JkZXIgcmVncmVzc2lvbnMgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4gYW5kIExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgZGVhZGxvY2sgaXNzdWUgZHVyaW5nIGxvb3AgZGV2aWNlIHJlbGVhc2UgYW5kIHRlYXJkb3duLiBJdCBpbnRyb2R1Y2VzIGEgYHBvc3RfcmVsZWFzZWAgaG9vayBpbiBgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgZXhlY3V0ZXMgYF9fbG9vcF9jbHJfZmQoKWAgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB0byBhdm9pZCBob2xkaW5nIGBvcGVuX211dGV4YCB3aGlsZSBmbHVzaGluZyBvdXRzdGFuZGluZyBJL08gYW5kIHVuZnJlZXppbmcgdGhlIHF1ZXVlLCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24gaW4gYGxvX3Bvc3RfcmVsZWFzZSgpYCBhbmQgYGxvb3BfcmVtb3ZlKClgLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgbmV3IGBsb19jbHJfd29ya2AgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbmV3IGNhbGxiYWNrIGluIGBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgIGRlZmF1bHRzIHRvIE5VTEwgYWNyb3NzIHN0YXRpYyBkZWNsYXJhdGlvbnMgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5vbmVgIGluIFJ1c3QgYmluZGluZ3MuXFxuLSBVc2VyLXNwYWNlIGRhdGEgY29waWVzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeTogTm8gZGF0YSBjb3BpZWQgdG8gdXNlci1zcGFjZSwgaW9jdGwgb3V0cHV0cywgcGFja2V0IGhlYWRlcnMsIG9yIGJyYW5jaGluZyBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBCdWcgQXBwbGljYWJpbGl0eTogQW55IHN5bmNocm9uaXphdGlvbiBidWdzLCB3b3JrcXVldWUgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBvcmRlciByZWdyZXNzaW9ucyBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkwd24[1] Phase: Succeeded StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 12:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 12:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2] Phase: Succeeded StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 12:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 12:49:30 +0000 UTC FinishedAt: 2026-09-09 12:49:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkwd24/series-workflowkwd24-convert-artifact-2048971265/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 12:49:40 +0000 UTC FinishedAt: 2026-09-09 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 12:49:40 +0000 UTC FinishedAt: 2026-09-09 13:06:01 +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:*e59ae68e-b5ac-4a47-910d-da1dfa5fc377,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-workflowkwd24/series-workflowkwd24-convert-artifact-2048971265/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": "63bc13cf-c35d-4e8b-adfa-4035cda92433", "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-workflowkwd24/series-workflowkwd24-build-action-4034408239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 12:49:40 +0000 UTC FinishedAt: 2026-09-09 13:05:51 +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:*e59ae68e-b5ac-4a47-910d-da1dfa5fc377,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-workflowkwd24/series-workflowkwd24-convert-artifact-2048971265/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": "63bc13cf-c35d-4e8b-adfa-4035cda92433", "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-workflowkwd24/series-workflowkwd24-build-action-4034408239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 13:06:01 +0000 UTC FinishedAt: 2026-09-09 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 13:06:01 +0000 UTC FinishedAt: 2026-09-09 13:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 13:06:01 +0000 UTC FinishedAt: 2026-09-09 13:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 13:06:01 +0000 UTC FinishedAt: 2026-09-09 13:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkwd24/series-workflowkwd24-convert-artifact-1191489492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 13:06:11 +0000 UTC FinishedAt: 2026-09-09 13:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 13:06:11 +0000 UTC FinishedAt: 2026-09-09 13:07:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63bc13cf-c35d-4e8b-adfa-4035cda92433,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-workflowkwd24/series-workflowkwd24-build-action-4034408239/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-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 13:08:05 +0000 UTC FinishedAt: 2026-09-09 13:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:08:05 +0000 UTC FinishedAt: 2026-09-09 13:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 13:08:05 +0000 UTC FinishedAt: 2026-09-09 13:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 13:08:05 +0000 UTC FinishedAt: 2026-09-09 13:28:46 +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:*e59ae68e-b5ac-4a47-910d-da1dfa5fc377,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-workflowkwd24/series-workflowkwd24-convert-artifact-1191489492/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": "d8f18c59-73ad-4590-8b4f-ed5a465c360f", "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-workflowkwd24/series-workflowkwd24-build-action-815604640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:08:05 +0000 UTC FinishedAt: 2026-09-09 13:28:36 +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:*e59ae68e-b5ac-4a47-910d-da1dfa5fc377,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-workflowkwd24/series-workflowkwd24-convert-artifact-1191489492/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": "d8f18c59-73ad-4590-8b4f-ed5a465c360f", "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-workflowkwd24/series-workflowkwd24-build-action-815604640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 13:28:46 +0000 UTC FinishedAt: 2026-09-09 13:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 13:28:46 +0000 UTC FinishedAt: 2026-09-09 13:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 13:28:46 +0000 UTC FinishedAt: 2026-09-09 13:30:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 13:28:46 +0000 UTC FinishedAt: 2026-09-09 13:30:49 +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:*d8f18c59-73ad-4590-8b4f-ed5a465c360f,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-workflowkwd24/series-workflowkwd24-build-action-815604640/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-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*63bc13cf-c35d-4e8b-adfa-4035cda92433,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8f18c59-73ad-4590-8b4f-ed5a465c360f,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-workflowkwd24/series-workflowkwd24-build-action-4034408239/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-workflowkwd24/series-workflowkwd24-build-action-815604640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 13:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 13:31:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkwd24/series-workflowkwd24-convert-artifact-337659901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 13:30:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 13:30:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:30:59 +0000 UTC FinishedAt: 2026-09-09 13:30:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 13:31:09 +0000 UTC FinishedAt: 2026-09-09 16:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwd24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","lo_post_release","loop_clr_fd","bdev_release","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd660a0e0fee1bc892e16fdb6abdf92676515175","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLOCK"],"series_id":"8e50cb9f-21f0-4f59-935d-ccfd7b7cba1e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 13:31:09 +0000 UTC FinishedAt: 2026-09-09 16:34:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63bc13cf-c35d-4e8b-adfa-4035cda92433,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8f18c59-73ad-4590-8b4f-ed5a465c360f,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-workflowkwd24/series-workflowkwd24-build-action-4034408239/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-workflowkwd24/series-workflowkwd24-build-action-815604640/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-workflowkwd24/series-workflowkwd24-convert-artifact-337659901/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,}