Name: series-workflow7fmjd Phase: Succeeded StartedAt: 2026-09-05 01:46:59 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[0] Phase: Succeeded StartedAt: 2026-09-05 01:46:59 +0000 UTC FinishedAt: 2026-09-05 02:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 01:46:59 +0000 UTC FinishedAt: 2026-09-05 02:35:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "db3cc672-7abd-42a1-88c5-c9071592f55e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZmV0Y2ggdGhlIHBlci1DUFUgcG9pbnRlciBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHJvdXRpbmVzIGluIHVzYm5ldCAodXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlKSBieSBkaXNhYmxpbmcgbG9jYWwgSVJRcyBiZWZvcmUgY2FsbGluZyB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNiYzBhMThlNjJiODczYzc1Mjg1NTlkNzQ1NDc5OTE0MzMzZmJhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5pbmRleCBhMTllY2Y3MThmMzZhLi42YTQ4ZjM4ZTEwNWQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbkBAIC0zMjUsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICYjNDM7MzM4LDEzIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIFxuLVx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiBcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICYjNDM7MTMwMSwxNiBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4tXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZHJpdmVyIGZvciBVU0IgbmV0d29yayBpbnRlcmZhY2VzLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY3JpdGljYWwgY2hhbmdlcyBpbiBpbnRlcnJ1cHQgaGFuZGxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcg4oCTIGFsd2F5cyBhbiBhcmVhIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBhcmUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgd2hpY2ggYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBjb21wb25lbnRzOiBoYW5kbGluZyByZWNlaXZlZCBTS0JzIChzb2NrZXQgYnVmZmVyKSBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24sIHJlc3BlY3RpdmVseS4KClJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBkaWZmcy4gSW4gYm90aCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgcmVvcmRlcmluZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBhcm91bmQgdGhlIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGVzLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpYCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cyBvciBzYXZpbmcgdGhlIGludGVycnVwdCBzdGF0ZSB3aXRoIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgLiBUaGUgcmV2aXNlZCB2ZXJzaW9uIHBsYWNlcyBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCAqYmVmb3JlKiB0aGUgYHRoaXNfY3B1X3B0cmAgY2FsbCBhbmQgYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgYXQgdGhlIGVuZC4gVGhleSBzd2l0Y2hlZCB0aGUgYXRvbWljIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB0aGUgbm9uLWF0b21pYyBvbmVzIChgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbmAgYW5kIGB1NjRfc3RhdHNfdXBkYXRlX2VuZGApLgoKVGhlICp3aHkqIGlzIHRoZSBrZXkgcXVlc3Rpb24uIFRoZSBjb21tZW50IGNsdWVzIHVzIGluLiBUaGUgb3JpZ2luYWwgb3JkZXIgY291bGQgaGF2ZSBsZWQgdG8gYSByYWNlIGNvbmRpdGlvbi4gSWYgYHRoaXNfY3B1X3B0cmAgaXMgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBlbmFibGVkLCBvciBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMsIHRoZSBDUFUgY291bGQgcG90ZW50aWFsbHkgbWlncmF0ZSBvciBiZSBwcmVlbXB0ZWQuIFRoaXMgY291bGQgY2F1c2UgaXQgdG8gYWNjZXNzIGluY29ycmVjdCBwZXItQ1BVIHN0YXRpc3RpY3MgKG9yIGV2ZW4gdGhlIHdyb25nIENQVSYjMzk7cyBzdGF0cyksIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYERFQlVHX1BSRUVNUFRgIG9yIHdvcnNlLiBUaGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBzZW5zaXRpdmUuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGFjdC4gVVNCIG5ldHdvcmsgZGV2aWNlcywgaW5jbHVkaW5nIHRob3NlIHN1cHBvcnRlZCBieSBgdXNibmV0YCwgYXJlIGRlZmluaXRlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIHN5emthbGxlciBhbmQgaXRzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHRoYXQgYmVjYXVzZSBvZiBteSBleHBlcmllbmNlLiBXZSBjYW4gaW5zdGFudGlhdGUgYHVzYm5ldGAgZGV2aWNlcyBzdWNoIGFzIENEQyBFdGhlcm5ldCwgQVNJWCwgZXRjLiBvciByYXcgdXNiIGdhZGdldHMgdGhyb3VnaCB2YXJpb3VzIG1lYW5zOiBVU0IgZ2FkZ2V0LCBSYXcgR2FkZ2V0LCBVU0IgZW11bGF0aW9uLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4gVVNCIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUsIHRoZXJlZm9yZSwgZnV6emFibGUgdXNpbmcgc3l6a2FsbGVyLCBlLmcuIHVzaW5nIGBzeXpfdXNiX2Nvbm5lY3RgLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB1c2JuZXRgIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHVzaW5nIHRvb2xzIHN1Y2ggYXMgYGdyZXBwZXJgIG9yIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgYW5kIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O2xsIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlIHN0YXR1cywganVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNibmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTQwLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTQxOlx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTQyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2MC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2MTpcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYzLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2NDpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcdCYjNDM7PSBtY3M3ODMwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfVVNCX1VTQk5FVClcdCYjNDM7PSB1c2JuZXQub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19VU0JfTkVUX0lOVDUxWDEpXHQmIzQzOz0gaW50NTF4MS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9jZGMuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmttb2RlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjItXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjM6c3RhdGljIGludCBhcWMxMTFfcmVhZF9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI0LVx0XHRcdFx0dTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjctXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6Mjg6XHRyZXQgPSB1c2JuZXRfcmVhZF9jbWRfbm9wbShkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjktXHRcdFx0XHQgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MjpzdGF0aWMgaW50IGFxYzExMV9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQzLVx0XHRcdCAgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ3Olx0cmV0ID0gdXNibmV0X3JlYWRfY21kKGRldiwgY21kLCBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00OC1cdFx0XHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02MC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2MTpzdGF0aWMgaW50IGFxYzExMV9yZWFkMTZfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02Mi1cdFx0XHRcdCAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcxLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjcyOnN0YXRpYyBpbnQgYXFjMTExX3JlYWQxNl9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03My1cdFx0XHQgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04Mi1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo4MzpzdGF0aWMgaW50IF9fYXFjMTExX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04NC1cdFx0XHQgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExMy1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTQ6c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTUtXHRcdFx0XHQgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTI0LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEyNTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjYtXHRcdFx0ICAgIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0MC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0Mi1cdFx0XHRcdCAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNTAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTUxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMTZfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUyLVx0XHRcdCAgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNjAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTYxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNjItXHRcdFx0XHQgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTcwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE3MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZTMyX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3Mi1cdFx0XHQgICAgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODItXHRcdFx0XHQgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODQ6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cdFx0XHRcdCAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg4LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4OTpzdGF0aWMgaW50IGFxYzExMV93cml0ZTE2X2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE5MC1cdFx0XHRcdCAgICB1MTYgaW5kZXgsIHUxNiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjAwPXN0YXRpYyB2b2lkIGFxYzExMV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMDIte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIwMzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjA0LVx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjA2LVx0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIwNzpcdHVzYm5ldF9nZXRfZHJ2aW5mbyhuZXQsIGluZm8pO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwOC1cdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwmIzM0OyV1LiV1LiV1XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMTQ9c3RhdGljIHZvaWQgYXFjMTExX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjE2LXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyMTc6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIxOC1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTIyNz1zdGF0aWMgaW50IGFxYzExMV9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIyOS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjMwOlx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMzEtXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yNjY9c3RhdGljIGludCBhcWMxMTFfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI2OC17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjY5Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNzAtXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0zMjAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MzIxOnN0YXRpYyB2b2lkIGFxYzExMV9zZXRfcGh5X3NwZWVkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggYXV0b25lZywgdTE2IHNwZWVkKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTM2OD1zdGF0aWMgaW50IGFxYzExMV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMzcwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzozNzE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTM3Mi1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFxYzExMV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDE0LVx0LnNldF93b2wgPSBhcWMxMTFfc2V0X3dvbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTU6XHQuZ2V0X21zZ2xldmVsID0gdXNibmV0X2dldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTY6XHQuc2V0X21zZ2xldmVsID0gdXNibmV0X3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MTctXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz00MjI9c3RhdGljIGludCBhcWMxMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSlcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MjMte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyNDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDI1LVx0dTE2IHJlZzE2ID0gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDY0PXN0YXRpYyBpbnQgYXFjMTExX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2NS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NDY2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00NjctXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDc4PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDgwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0ODE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ4Mi1cdHU4IHZsYW5fY3RybCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTUwND1zdGF0aWMgaW50IGFxYzExMV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUwNS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NTA2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MDctXHR1OCB2bGFuX2N0cmwgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz01Mjk9c3RhdGljIHZvaWQgYXFjMTExX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNTMwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo1MzE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUzMi1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTU2Nj1zdGF0aWMgaW50IGFxYzExMV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNTY4LXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo1Njk6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTU3MC1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFxYzExMV9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MTpcdC5uZG9fb3Blblx0XHQ9IHVzYm5ldF9vcGVuLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MjpcdC5uZG9fc3RvcFx0XHQ9IHVzYm5ldF9zdG9wLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MzpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHVzYm5ldF9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0NDpcdC5uZG9fdHhfdGltZW91dFx0XHQ9IHVzYm5ldF90eF90aW1lb3V0LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY0NS1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjU0LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY1NTpzdGF0aWMgaW50IGFxYzExMV9yZWFkX3Blcm1fbWFjKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NTYte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NzAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NjcxOnN0YXRpYyB2b2lkIGFxYzExMV9yZWFkX2Z3X3ZlcnNpb24oc3RydWN0IHVzYm5ldCAqZGV2LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY3Mi1cdFx0XHRcdCAgIHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY4NC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2ODU6c3RhdGljIGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY4Ni17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY5OS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDA6XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcwMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03MDMtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1Mi1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NTM6c3RhdGljIHZvaWQgYXFjMTExX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc3NS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NzY6c3RhdGljIHZvaWQgYXFjMTExX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03Nzcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03OTctXHRpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtXHUwMDNlbmV0KSAhPSBsaW5rKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc5ODpcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc5OS19XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtODAwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjgwMTpzdGF0aWMgdm9pZCBhcWMxMTFfY29uZmlndXJlX3J4KHN0cnVjdCB1c2JuZXQgKmRldixcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04MDItXHRcdFx0XHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6ODgxOnN0YXRpYyB2b2lkIGFxYzExMV9jb25maWd1cmVfY3N1bV9vZmZsb2FkKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy05MDAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6OTAxOnN0YXRpYyBpbnQgYXFjMTExX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTkwMi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTk4OS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5OTA6c3RhdGljIGludCBhcWMxMTFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTk5MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzMtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTAzNDpzdGF0aWMgaW50IGFxYzExMV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDM1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA1Nz1zdGF0aWMgdm9pZCBhcWMxMTFfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHBrdF9kZXNjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDcxLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEwNzI6c3RhdGljIGludCBhcWMxMTFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwNzMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTYyLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjExNjM6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgbmV3X3NrYik7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2NC1cdFx0aWYgKHBrdF9jb3VudCA9PSAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTgwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjExODE6c3RhdGljIHN0cnVjdCBza19idWZmICphcWMxMTFfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExODItXHRcdFx0XHQgICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEyMzYtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTIzNzpcdHVzYm5ldF9zZXRfc2tiX3R4X3N0YXRzKHNrYiwgMSwgMCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTIzOC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTMyMj1zdGF0aWMgaW50IGFxYzExMV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMzIzLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzI0Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMzI1LVx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMyOS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzMwOlx0dXNibmV0X3N1c3BlbmQoaW50ZiwgbWVzc2FnZSk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMzMS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTQxOD1zdGF0aWMgaW50IGFxYzExMV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQxOS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQyMDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQyMS1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0NTYtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQ1NzpcdHJldHVybiB1c2JuZXRfcmVzdW1lKGludGYpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0NTgtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDgxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhcV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0ODMtXHQuaWRfdGFibGVcdD0gcHJvZHVjdHMsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQ4NDpcdC5wcm9iZVx0XHQ9IHVzYm5ldF9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg1LVx0LnN1c3BlbmRcdD0gYXFjMTExX3N1c3BlbmQsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4Ni1cdC5yZXN1bWVcdFx0PSBhcWMxMTFfcmVzdW1lLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE0ODc6XHQuZGlzY29ubmVjdFx0PSB1c2JuZXRfZGlzY29ubmVjdCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg4LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE3OTpcdHZvaWQgKCpyZXN1bWUpKHN0cnVjdCB1c2JuZXQgKmRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE4MDpcdHZvaWQgKCpzdXNwZW5kKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODE6XHRpbnQgKCpyZXNldCkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODItXHR1MTYgcHJlc3ZkX3BoeV9hZHZlcnRpc2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xOTU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTcyYV9pbmZvO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTk5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDA6aW50IF9fbXVzdF9jaGVjayBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAxLVx0XHRcdCAgICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAyLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDM6aW50IGFzaXhfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA0LVx0XHQgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA1LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDY6dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDctXHRcdFx0ICB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMi12b2lkIGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoc3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKmRwKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEzLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTQ6c3RydWN0IHNrX2J1ZmYgKmFzaXhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTUtXHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTYtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxNzppbnQgYXNpeF9yZWFkX3BoeV9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBpbnRlcm5hbCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxOC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjE5OmludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MsIGludCBpbl9wbSk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyMC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjIxOnUxNiBhc2l4X3JlYWRfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjIyOmludCBhc2l4X3dyaXRlX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjMtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyNDp1MTYgYXNpeF9yZWFkX21lZGl1bV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjU6aW50IGFzaXhfd3JpdGVfbWVkaXVtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjI2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjc6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjgtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTMtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxNDppbnQgX19tdXN0X2NoZWNrIGFzaXhfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTUtXHRcdFx0ICAgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTctXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTg6XHRpbnQgKCpmbikoc3RydWN0IHVzYm5ldCAqLCB1OCwgdTgsIHUxNiwgdTE2LCB2b2lkICosIHUxNik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMi1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyMzpcdFx0Zm4gPSB1c2JuZXRfcmVhZF9jbWQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNC1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1Olx0XHRmbiA9IHVzYm5ldF9yZWFkX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzktXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDEtXHRcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDMtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDQ6XHRpbnQgKCpmbikoc3RydWN0IHVzYm5ldCAqLCB1OCwgdTgsIHUxNiwgdTE2LCBjb25zdCB2b2lkICosIHUxNik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00OC1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0OTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTAtXHRlbHNlXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1MTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02Mi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYzOnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjQtXHRcdFx0ICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY2Olx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY3LVx0XHRcdCAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzAtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo3MTpzdGF0aWMgaW50IGFzaXhfc2V0X3N3X21paShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy04MS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjgyOnN0YXRpYyBpbnQgYXNpeF9zZXRfaHdfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtODMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTkxLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6OTI6c3RhdGljIGludCBhc2l4X2NoZWNrX2hvc3RfZW5hYmxlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtOTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM2OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXHUwMDNlYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQxLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQyOmludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI1MD12b2lkIGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoc3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKmRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI2NC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI2NTpzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjYtXHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzE2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzE3Olx0dXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTMxOC1cdHJldHVybiBza2I7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzIwLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzIxOmludCBhc2l4X3JlYWRfcGh5X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIGludGVybmFsKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTMtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozNTQ6aW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncywgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzU1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjQtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozNjU6dTE2IGFzaXhfcmVhZF9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjYte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTM3OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM3OTppbnQgYXNpeF93cml0ZV9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzgwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTEtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozOTI6dTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzkzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MDctXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDg6aW50IGFzaXhfd3JpdGVfbWVkaXVtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MjEtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MjI6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MjMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQ0MT12b2lkIGFzaXhfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDQyLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ0MzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NDQtXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcdTAwMjZkZXYtXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00ODA9c3RhdGljIGludCBfX2FzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgyLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ4MzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00ODQtXHRfX2xlMTYgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTUxNT1zdGF0aWMgaW50IF9fYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTE3LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjUxODpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01MTktXHRfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NDk9aW50IGFzaXhfbWRpb19idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTUwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU1MTpcdHN0cnVjdCB1c2JuZXQgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NTY9aW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NTg6XHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NTktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTc0PXZvaWQgYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NzUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTc2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU3Ny1cdHU4IG9wdDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01OTM9aW50IGFzaXhfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTk0LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU5NTpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01OTYtXHR1OCBvcHQgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTYxOD1pbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyMC17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo2MjE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjIyLVx0dTE2ICplZXByb21fYnVmZjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz02NTM9aW50IGFzaXhfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NTUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjU2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1Ny1cdHUxNiAqZWVwcm9tX2J1ZmY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NzM0PWludCBhc2l4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzM1LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjczNjpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy03MzctXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcdTAwMjZkZXYtXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzU9c3RydWN0IGF4ODgxNzJfaW50X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00Mi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo0MzpzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTUzLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVx1MDAzZW5ldCkgIT0gbGluaykge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU0Olx0XHR1c2JuZXRfbGlua19jaGFuZ2UoZGV2LCBsaW5rLCAxKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01NS1cdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtMaW5rIFN0YXR1cyBpczogJWRcXG5cJiMzNDssIGxpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo1OTpzdGF0aWMgdm9pZCBhc2l4X3NldF9uZXRkZXZfZGV2X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5LS8qIEdldCB0aGUgUEhZIElkZW50aWZpZXIgZnJvbSB0aGUgUEhZU0lEMSBcdTAwMjYgUEhZU0lEMiBNSUkgcmVnaXN0ZXJzICovXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA6c3RhdGljIHUzMiBhc2l4X2dldF9waHlpZChzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzEte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDAtLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTAxOiAgIG93biBzdHJ1Y3R1cmUgc28gd2UgZG9uJiMzOTt0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEwMi0gICBkZXZpY2VzIHRoYXQgbWF5IGJlIGNvbm5lY3RlZCBhdCB0aGUgc2FtZSB0aW1lLiAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTEwMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTA0Olx0LmdldF9kcnZpbmZvXHRcdD0gdXNibmV0X2dldF9kcnZpbmZvLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwNTpcdC5nZXRfbGlua1x0XHQ9IHVzYm5ldF9nZXRfbGluayxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDY6XHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDc6XHQuc2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDgtXHQuZ2V0X3dvbFx0XHQ9IGFzaXhfZ2V0X3dvbCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTEyLVx0LnNldF9lZXByb21cdFx0PSBhc2l4X3NldF9lZXByb20sXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTEzOlx0Lm53YXlfcmVzZXRcdFx0PSB1c2JuZXRfbndheV9yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMTQ6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHVzYm5ldF9nZXRfbGlua19rc2V0dGluZ3NfbWlpLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExNTpcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gdXNibmV0X3NldF9saW5rX2tzZXR0aW5nc19taWksXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTE2LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTExOD1zdGF0aWMgdm9pZCBheDg4MTcyX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMTkte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEyMDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTIxLVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxNTc6c3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1OC17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFVTQl9VU0JORVQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2U6IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGlzLiBJIG5lZWQgdG8gc2VlIHRoZSBleGFjdCBjb25maWcgb3B0aW9ucyDigJMgdGhlIHNwZWNpZmljIHNldHRpbmdzIGF2YWlsYWJsZSDigJMgYW5kLCBjcml0aWNhbGx5LCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGRvZXMgYFVTQl9VU0JORVRgIHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBhbnkgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSBJIGNhbiBldmVuICpjb25zaWRlciogZW5hYmxpbmcgaXQ/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCBtYXAgb3V0IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gS25vd2luZyB0aGUgS2NvbmZpZyBpcyBrZXkgdG8gYSByb2J1c3QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuIDE0NTpcdFx0ICAgIFwmIzM0O0xhcGxpbmtcJiMzNDsgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxuIDE0NjpcdFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXG4gMTQ3Olx0XG4gMTQ4Olx0XHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXG4gMTQ5Olx0XHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXG4gMTUwOlx0XHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXG4gMTUxOlx0XHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXG4gMTU0Olx0XHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXG4gMTU1Olx0XG4gMTU2Olx0XHQgIFRoZSBsaW5rIHdpbGwgYXBwZWFyIHdpdGggYSBuYW1lIGxpa2UgXCYjMzQ7dXNiMFwmIzM0Oywgd2hlbiB0aGUgbGluayBpc1xuIDE1NzpcdFx0ICBhIHR3by1ub2RlIGxpbmssIG9yIFwmIzM0O2V0aDBcJiMzNDsgZm9yIG1vc3QgQ0RDLUV0aGVybmV0IGRldmljZXMuICBUaG9zZVxuIDE1ODpcdFx0ICB0d28tbm9kZSBsaW5rcyBhcmUgbW9zdCBlYXNpbHkgbWFuYWdlZCB3aXRoIEV0aGVybmV0IEJyaWRnaW5nXG4gMTU5Olx0XHQgIChDT05GSUdfQlJJREdFKSBpbnN0ZWFkIG9mIHJvdXRpbmcuXG4gMTYwOlx0XG4gMTYxOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcdTAwM2NodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0L1x1MDAzZS5cbiAxNjI6XHRcbiAxNjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTY0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JuZXQuXG4gMTY1Olx0XG4gMTY2Olx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuIDE2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcJiMzNDtcbiAxNjg6XHRcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuIDE2OTpcdFx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJiMzOTtzIGZpcnN0IGZldyBsaW5lcy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIG1lbnUgc3RydWN0dXJlIG9yIGFueSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBmb3IgYFVTQl9ORVRfRFJJVkVSU2Agb3IgZXZlbiB0aGUgYnJvYWRlciBgVVNCYCBmZWF0dXJlIHNldC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCB3aGF0IHRoZSBwcmVyZXF1aXNpdGVzIG1pZ2h0IGJlIGZvciBlbmFibGluZyB0aGVzZSBkcml2ZXJzLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXTigJlsbCBsZXQgbWUgcXVpY2tseSBncmFzcCBob3cgdGhlc2UgcGFydHMgcGx1ZyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBpbnNwZWN0aW9uIHJlcXVlc3QsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIFVTQm5ldCBEcml2ZXI6IEtleSBTZWN0aW9ucyBmb3IgUmV2aWV3KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDMyMC0zNjAgYW5kIDEyOTAtMTMyNS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcmVxdWVzdC4gVGhvc2UgbGluZSByYW5nZXMgbGlrZWx5IGNvdmVyIGNyaXRpY2FsIGFyZWFzIHdpdGhpbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IGh5cG90aGVzaXplIHdoYXQgbWlnaHQgYmUgdGhlcmUuIExpbmVzIDMyMC0zNjAgY291bGQgZGVhbCB3aXRoIHNvbWUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LCBwZXJoYXBzIGRldmljZSBwcm9iZSBhbmQgY29ubmVjdGlvbiBoYW5kbGluZywgb3IgcG9zc2libHkgaW50ZXJydXB0IHNldHVwIHdpdGhpbiB0aGUgZHJpdmVyLCBnaXZlbiB0aGUgdXN1YWwgbGF5b3V0IG9mIGEgVVNCIGRyaXZlci4gSSBleHBlY3Qgc29tZSBkZXZpY2UgY29uZmlndXJhdGlvbiBvciBiYXNpYyBzZXR1cCwgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLgoKVGhlIGxhdHRlciBzZWN0aW9uLCAxMjkwLTEzMjUsIGlzIGEgYml0IGZ1cnRoZXIgaW50byB0aGUgZmlsZS4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiwgdGhpcyByYW5nZSBjb3VsZCBkZWFsIHdpdGggdGhlIGNvcmUgZGF0YSB0cmFuc2ZlciBsb2dpYyAtIG1heWJlIHRoZSBzZW5kIHBhdGggb3IgcmVjZWl2ZSBwYXRoIGhhbmRsaW5nIGZvciBuZXR3b3JrIHBhY2tldHMuIEkgd291bGQgcHJlZGljdCB0aGF0LCBpZiB0aGUgZm9ybWVyIGlzIGludGVycnVwdCBzZXR1cCwgdGhpcyBzZWN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGxpdmUsIGluY2x1ZGluZyBkYXRhIHRyYW5zZmVyIGNvbXBsZXRpb24gcHJvY2Vzc2luZy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBidWxrIHRyYW5zZmVyLCBpbnRlcnJ1cHQgdHJhbnNmZXIsIG9yIGV2ZW4gaXNvY2hyb25vdXMgdHJhbnNmZXJzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gQWxzbywgZ2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgZHJpdmVyLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBhbmQgaG93IHRoZSBkYXRhIHN0cmVhbXMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGF1dGhvciBzdHJ1Y3R1cmVkIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBlcnJvciBoYW5kbGluZyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3Igd2l0aGluIHRoZXNlIGFyZWFzLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IsIG9mIGNvdXJzZSwgYW55IGdsYXJpbmcgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQmIzM5O3MgdGhlIGNoYWxsZW5nZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxuIDMyMzpcdCAqIFNvbWUgbGluayBwcm90b2NvbHMgYmF0Y2ggcGFja2V0cywgc28gdGhlaXIgcnhfZml4dXAgcGF0aHNcbiAzMjQ6XHQgKiBjYW4gcmV0dXJuIGNsb25lcyBhcyB3ZWxsIGFzIGp1c3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IuXG4gMzI1Olx0ICovXG4gMzI2Olx0dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzI3Olx0e1xuIDMyODpcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gMzI5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDMzMDpcdFx0aW50XHRzdGF0dXM7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMzOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzM0Olx0XHRcdHJldHVybjtcbiAzMzU6XHRcdH1cbiAzMzY6XHRcbiAzMzc6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzg6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzk6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzNDA6XHRcbiAzNDE6XHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiAzNDI6XHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiAzNDU6XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4gMzQ2Olx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiAzNDc6XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiAzNDg6XHRcbiAzNDk6XHRcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7XHUwMDNjIHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXhcXG5cJiMzNDssXG4gMzUwOlx0XHRcdCAgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4gMzUxOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IHNrYl9kYXRhKSk7XG4gMzUyOlx0XG4gMzUzOlx0XHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuIDM1NDpcdFx0XHRyZXR1cm47XG4gMzU1Olx0XG4gMzU2Olx0XHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcbiAzNTc6XHRcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXG4gMzU4Olx0XHRcdG5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LVx1MDAzZW5ldCxcbiAzNTk6XHRcdFx0XHQgIFwmIzM0O25ldGlmX3J4IHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwIGludG8gVVNCbmV0IFRyYW5zbWlzc2lvbiBDb21wbGV0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSBVU0IgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBmaWxlLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGF0YSBwYWNrZXRzIGFyZSBzdWNjZXNzZnVsbHkgc2VudCBvdmVyIHRoZSBVU0IgYnVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBhIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZSwgb3IsIG1vcmUgbGlrZWx5LCB3aGF0IG5lZWRzIHRvIGhhcHBlbiB0byBtYWtlIHRoZSB0cmFuc21pc3Npb24gKmFwcGVhciogdG8gYmUgY29tcGxldGUuIElzIGl0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBSZXNvdXJjZSByZWxlYXNlPyBOb3RpZmljYXRpb24gdG8gdGhlIHVwcGVyIG5ldHdvcmtpbmcgbGF5ZXJzPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIFVTQiBjb250cm9sbGVyIGFuZCB0aGUgbmV0d29yayBzdGFjayBpbiBoZXJlLiBJJiMzOTttIGltYWdpbmluZyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGRlYWx0IHdpdGggaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBib3RoIHN1Y2Nlc3NmdWwgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRyYW5zbWlzc2lvbiBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzKVxuMTI5MjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MzpcdH1cbjEyOTQ6XHRcbjEyOTU6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NjpcdFxuMTI5NzpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTg6XHR7XG4xMjk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTMwMDpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTMwMTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwNDpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjEzMDY6XHRcbjEzMDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuMTMwODpcdFx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDk6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMTA6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMxMTpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzEyOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMxMzpcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4xMzE0Olx0XHR9IGVsc2Uge1xuMTMxNTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzE2Olx0XG4xMzE3Olx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxODpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTk6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzIwOlx0XHRcdFx0YnJlYWs7XG4xMzIxOlx0XG4xMzIyOlx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMjM6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzI0Olx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyNTpcdFx0XHRcdGJyZWFrO1xuMTMyNjpcdFxuMTMyNzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI4Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IFllcCwgbm8gZG91YnQgYWJvdXQgaXQuIFRoaXMgaXMgYHVzYm5ldC5jYCwgdGhlIGhlYXJ0IG9mIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMgaW4gTGludXguIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRldmljZXMgbGlrZSBDREMgRXRoZXJuZXQsIEFTSVgsIHRoZSB3aG9sZSBzaGViYW5nLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IGB1c2JuZXRfc2tiX3JldHVybigpYCwgd2hpY2ggaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzIGFuZCB1cGRhdGVzIHN0YXRzLCBhbmQgYHR4X2NvbXBsZXRlKClgLCB0aGUgVVJCIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIHRyYW5zbWlzc2lvbiwgYWxzbyB3aXRoIHN0YXQgdXBkYXRlcy4gVGhlc2UgYXJlICpkZWZpbml0ZWx5KiBnb2luZyB0byBiZSBoaXQgd2hlbiBhIFVTQiBuZXR3b3JrIGRldmljZSB0cmFuc21pdHMgb3IgcmVjZWl2ZXMuIFRoYXQmIzM5O3MgdHJpdmlhbCB0byB0cmlnZ2VyIGV2ZW4gaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIHN5emthbGxlciB3aXRoIHJhdyBnYWRnZXRzIG9yIGp1c3Qgc3RyYWlnaHQtdXAgVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBzaG90LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuIFdhaXQsIGhvbGQgb24g4oCTIHdoaWNoIHN5bWJvbHMgYXJlIGFjdHVhbGx5IGJlaW5nICptb2RpZmllZCo/IEl0IGxvb2tzIGxpa2UgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB0aGVtc2VsdmVzLiBPa2F5LCBnb29kIHRvIGtub3cuIE5vdywgaXMgYHR4X2NvbXBsZXRlYCBldmVuIGFjY2Vzc2libGU/IExldCYjMzk7cyBzZWUuLi4gYHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilgLiBBaCwgaXQmIzM5O3Mgc3RhdGljIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBUaGF0IG1pZ2h0IGJlIGEgcHJvYmxlbS4gV2UgbmVlZCB0byBjb25maXJtIGl0JiMzOTtzIGEgdmFsaWQgc3ltYm9sIHZpc2libGUgaW4gYHZtbGludXhgLiBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0eF9jb21wbGV0ZWAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgY2FuIGFjdHVhbGx5IGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODY9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTYtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDQ9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQ0MC1cdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVx1MDAzZXVkZXYsIGRldi1cdTAwM2VvdXQsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQ0MTpcdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQyLVx0aWYgKGRldi1cdTAwM2VjYW5fZG1hX3NnKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI0CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDQ2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZyByZWdhcmRpbmcgZnV6emluZyB0aGlzIFVTQiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb21waWxlciAqaGFzKiB0byBrZWVwIGB0eF9jb21wbGV0ZWAgYXJvdW5kIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gd2l0aGluIGB1c2JfZmlsbF9idWxrX3VyYmAuIFRoaXMgbWVhbnMgaXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZSBzeW1ib2wgdGFibGVzIChrYWxsc3ltcy92bWxpbnV4KS4gU2ltaWxhcmx5LCBgdXNibmV0X3NrYl9yZXR1cm5gIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbyB3ZSBjYW4gZGVmaW5pdGVseSB0YXJnZXQgYm90aC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleGFtaW5lIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGJ1dCBhdCBhIG1pbmltdW0gSSYjMzk7bGwgZm9jdXMgb24gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBrZXkgaXMgYENPTkZJR19VU0JfVVNCTkVUYC4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIGFuZCBkZXBlbmRzIG9uIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBgQ09ORklHX1VTQmAgYW5kIGBDT05GSUdfTkVUYC4gTG9va2luZyBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIEkgY2FuIGNvbmZpcm0gdGhhdCBgVVNCX1VTQk5FVGAgYWxzbyByZXF1aXJlcyB0aGUgc2VsZWN0aW9uIG9mIGBNSUlgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGJ1aWxkLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgaW4gbGluZSB3aXRoIG15IG92ZXJhbGwgc3RyYXRlZ3k6CgoxLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHksIHllcyEKMi4gIGBGb2N1c1N5bWJvbHNgOiBDb25maXJtZWQuIGBbJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LCAmIzM0O3R4X2NvbXBsZXRlJiMzNDtdYCBhcmUgdGhlIHByaW1lIHRhcmdldHMuCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtVU0JfVVNCTkVUJiMzNDssICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssICYjMzQ7VVNCJiMzNDssICYjMzQ7TkVUJiMzNDtdYC4gVGhlc2UgY29uZmlncyBhcmUgZXNzZW50aWFsLgo0LiAgYFJlYXNvbmluZ2A6IFdlJiMzOTt2ZSBnb3QgYSBjbGVhciBleHBsYW5hdGlvbiBvZiAqd2h5KiB0aGlzIGlzIGEgZ29vZCB0YXJnZXQgLSBmaXhpbmcgaXNzdWVzIGFjY2Vzc2luZyBwZXItQ1BVIHN0YXRzLCBhbmQgaXRzIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBuZXR3b3JraW5nIGRldmljZXMsIG1lYW5pbmcgaXQgaXMgZnV6emFibGUgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBhbGwgb2Ygd2hpY2ggSSYjMzk7dmUgZXhwbGljaXRseSB2ZXJpZmllZC4KClJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UmIzM5O3JlIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZmV0Y2ggdGhlIHBlci1DUFUgcG9pbnRlciBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBzdGF0aXN0aWMgdXBkYXRlcyBmb3IgUlggYW5kIFRYIHBhY2tldHMuIFRoZSBkaWZmIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpbnZvbHZlcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBgdGhpc19jcHVfcHRyKClgIGNhbGwuIFByZXZpb3VzbHksIHdlIHdlcmUgZmV0Y2hpbmcgdGhlIHBlci1DUFUgc3RhdGlzdGljcyBwb2ludGVyIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy9wcmVlbXB0aW9uIHVzaW5nIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoKWAuIE5vdywgdGhlIGNvZGUgc2F2ZXMgdGhlIGludGVycnVwdCBzdGF0ZSBmaXJzdCB3aXRoIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgLCAqdGhlbiogZmV0Y2hlcyB0aGUgYHN0YXRzNjRgIHBvaW50ZXIgdXNpbmcgYHRoaXNfY3B1X3B0cigpYCwgYW5kICpmaW5hbGx5KiB1c2VzIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKClgL2B1NjRfc3RhdHNfdXBkYXRlX2VuZCgpYCB0byBoYW5kbGUgdGhlIHVwZGF0ZSwgZm9sbG93ZWQgYnkgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2l0aCBgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZS4gSWYgdGhlIHRhc2sgd2VyZSBwcmVlbXB0ZWQgb3IgbWlncmF0ZWQgdG8gYW5vdGhlciBDUFUgKmFmdGVyKiBmZXRjaGluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGJ1dCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cywgb3IgaWYgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZXMgd2hlcmUgcGVyLWNwdSBwb2ludGVycyByZXF1aXJlIHByZWVtcHRpb24gZGlzYWJsZWQsIHRoZSB3cm9uZyBzdGF0aXN0aWNzIGNvdWxkIGJlIHVwZGF0ZWQuIEZldGNoaW5nIHRoZSBwb2ludGVyIHVuZGVyIGludGVycnVwdC9wcmVlbXB0aW9uIGNvbnRyb2wgZ3VhcmFudGVlcyB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGNvcnJlY3QgcGVyLUNQVSBzdHJ1Y3R1cmUsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgaW4gU01QL211bHRpY29yZSBzeXN0ZW1zLiBJdCYjMzk7cyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGZpeC4KCk5vdywgbGV0JiMzOTtzIGNyaXRpY2FsbHkgZXhhbWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgaXNzdWVzLiBBIHF1aWNrIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIGBmbGFnc2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlYCBjYWxsLiBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYnkgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAsIHdoaWNoIHNob3VsZCByZXR1cm4gYSB2YWxpZCBwb2ludGVyLiBUaGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gIGFuZCBgdTY0X3N0YXRzX3VwZGF0ZV9lbmRgIGZ1bmN0aW9ucyB3b3JrIG9uIHRoZSBzeW5jcCBvZiBzdGF0czY0LCBzbyB0aG9zZSBhcmUgYWxsIHZhbGlkLCBhbmQgYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgYGZsYWdzYCB2YWx1ZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBuYXN0eSBzaWRlIGVmZmVjdHMgdGhhdCBJIGNhbiBzZWUgaW1tZWRpYXRlbHkuIFRoZSB2YXJpYWJsZXMgYXJlIGFsbCBzYWZlLiBUaGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgY29weV90b191c2VyIGNhbGxzLCBvciBpbmZvIGxlYWtzIGhlcmUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyB0aGF0IGxvb2sgY29uY2VybmluZy4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgYSBzYWZlIGFuZCBjb3JyZWN0IGNoYW5nZSB0byBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHByb3RlY3QgdGhlIGludGVncml0eSBvZiB0aGUgcGVyLWNwdSBwb2ludGVycyBkdXJpbmcgdGhlIHVwZGF0ZS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgbGlrZSB0aGlzIG5lY2Vzc2l0YXRlcyBhbnkgS01TQU4gY2hlY2tzLiBTdGlsbCwgaXQmIzM5O3MgZ29vZCB0byBkbyBhIHNhbml0eSBjaGVjayB0byB2ZXJpZnkgdGhlIGxpbmVzIG9mIGNvZGUuIEkmIzM5O2xsIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9ucyBsb29rIGFzIGV4cGVjdGVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAzMzA6XHRcdGludFx0c3RhdHVzO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKSkge1xuIDMzMzpcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZkZXYtXHUwMDNlcnhxX3BhdXNlLCBza2IpO1xuIDMzNDpcdFx0XHRyZXR1cm47XG4gMzM1Olx0XHR9XG4gMzM2Olx0XG4gMzM3Olx0XHQvKiBvbmx5IHVwZGF0ZSBpZiB1bnNldCB0byBhbGxvdyBtaW5pZHJpdmVyIHJ4X2ZpeHVwIG92ZXJyaWRlICovXG4gMzM4Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gMzM5Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gMzQwOlx0XG4gMzQxOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMzQyOlx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiAzNDM6XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gMzQ0Olx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gMzQ1Olx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuIDM0NjpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gMzQ3Olx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cdTAwM2VuZXQsIFwmIzM0O1x1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgIHNrYi1cdTAwM2VsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItXHUwMDNlcHJvdG9jb2wpO1xuIDM1MTpcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbiAzNTQ6XHRcdFx0cmV0dXJuO1xuIDM1NTpcdFxuIDM1NjpcdFx0c3RhdHVzID0gbmV0aWZfcnggKHNrYik7XG4gMzU3Olx0XHRpZiAoc3RhdHVzICE9IE5FVF9SWF9TVUNDRVNTKVxuIDM1ODpcdFx0XHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cdTAwM2VuZXQsXG4gMzU5Olx0XHRcdFx0ICBcJiMzNDtuZXRpZl9yeCBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4gMzYwOlx0fVxuIDM2MTpcdEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9za2JfcmV0dXJuKTtcbiAzNjI6XHRcbiAzNjM6XHQvKiBtdXN0IGJlIGNhbGxlZCBpZiBoYXJkX210dSBvciByeF91cmJfc2l6ZSBjaGFuZ2VkICovXG4gMzY0Olx0dm9pZCB1c2JuZXRfdXBkYXRlX21heF9xbGVuKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVVNCbmV0IEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgdG8gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSByZW9yZGVyaW5nIG9mIGhvdyB0aGUgdHJhZmZpYyBzdGF0aXN0aWNzIGFyZSBhY2Nlc3NlZC4gU3BlY2lmaWNhbGx5LCBpdCBzaGlmdHMgdGhlIGZldGNoaW5nIG9mIGB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cylgIHRvICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgY3JpdGljYWwgc2VjdGlvbiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCwgd2hpY2ggaGFkIHRoZSBzdGF0cyByZXRyaWV2YWwgKmJlZm9yZSogdGhlIElSUSBkaXNhYmxpbmcuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMsIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIGhlcmUuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWNjZXNzZWQsIG5vIHJpc2sgb2YgbGVha2luZyBrZXJuZWwgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSwgbm90aGluZyBjb21wbGV4IGJlaW5nIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyBjb25kaXRpb25hbCBsb2dpYyBicmFuY2hpbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGFsbCBjb21tb24gS01TQU4gdHJpZ2dlcnMsIGFuZCBub25lIG9mIHRoZW0gYXJlIHByZXNlbnQuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGNsZWFyIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCBpbnNpZGUgYSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgYmxvY2sgcmF0aGVyIHRoYW4gY2FsbGluZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCBvbiBhIHBvaW50ZXIgb2J0YWluZWQgcHJpb3IgdG8gZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbi5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCBpbnNpZGUgYSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgYmxvY2sgcmF0aGVyIHRoYW4gY2FsbGluZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCBvbiBhIHBvaW50ZXIgb2J0YWluZWQgcHJpb3IgdG8gZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbi5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNC44NjY2Mzc2NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEyMTI4ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNC44NjY2NDMxOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjM1ODExMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2JjMGExOGU2MmI4NzNjNzUyODU1OWQ3NDU0Nzk5MTQzMzNmYmE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gXFxuLVxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiBcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6MzYuMzMxMDI2OTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODE1MDExNTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHJvdXRpbmVzIGluIHVzYm5ldCAodXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlKSBieSBkaXNhYmxpbmcgbG9jYWwgSVJRcyBiZWZvcmUgY2FsbGluZyB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyksIGVuc3VyaW5nIHNhZmUgcGVyLUNQVSBhY2Nlc3MuIFVTQiBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIC8gcmF3LWdhZGdldCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNiYzBhMThlNjJiODczYzc1Mjg1NTlkNzQ1NDc5OTE0MzMzZmJhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNi4zMzEwMzM3NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUzMzEzNDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AsIHdoaWNoIGlzIGEga2V5IGRyaXZlciBmb3IgVVNCIG5ldHdvcmsgaW50ZXJmYWNlcy4gU2VlbXMgbGlrZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY3JpdGljYWwgY2hhbmdlcyBpbiBpbnRlcnJ1cHQgaGFuZGxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcg4oCTIGFsd2F5cyBhbiBhcmVhIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBhcmUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgd2hpY2ggYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBjb21wb25lbnRzOiBoYW5kbGluZyByZWNlaXZlZCBTS0JzIChzb2NrZXQgYnVmZmVyKSBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24sIHJlc3BlY3RpdmVseS5cblxuUmlnaHQsIGxldCdzIGRpc3NlY3QgdGhlIGNvZGUgZGlmZnMuIEluIGJvdGggYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlb3JkZXJpbmcgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgYXJvdW5kIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgICpiZWZvcmUqIGRpc2FibGluZyBpbnRlcnJ1cHRzIG9yIHNhdmluZyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpdGggYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAuIFRoZSByZXZpc2VkIHZlcnNpb24gcGxhY2VzIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgICpiZWZvcmUqIHRoZSBgdGhpc19jcHVfcHRyYCBjYWxsIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpYCBhdCB0aGUgZW5kLiBUaGV5IHN3aXRjaGVkIHRoZSBhdG9taWMgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHRoZSBub24tYXRvbWljIG9uZXMgKGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfZW5kYCkuXG5cblRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY29tbWVudCBjbHVlcyB1cyBpbi4gVGhlIG9yaWdpbmFsIG9yZGVyIGNvdWxkIGhhdmUgbGVkIHRvIGEgcmFjZSBjb25kaXRpb24uIElmIGB0aGlzX2NwdV9wdHJgIGlzIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZW5hYmxlZCwgb3IgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLCB0aGUgQ1BVIGNvdWxkIHBvdGVudGlhbGx5IG1pZ3JhdGUgb3IgYmUgcHJlZW1wdGVkLiBUaGlzIGNvdWxkIGNhdXNlIGl0IHRvIGFjY2VzcyBpbmNvcnJlY3QgcGVyLUNQVSBzdGF0aXN0aWNzIChvciBldmVuIHRoZSB3cm9uZyBDUFUncyBzdGF0cyksIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYERFQlVHX1BSRUVNUFRgIG9yIHdvcnNlLiBUaGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBzZW5zaXRpdmUuXG5cbk5vdywgbGV0J3MgYXNzZXNzIHRoZSBpbXBhY3QuIFVTQiBuZXR3b3JrIGRldmljZXMsIGluY2x1ZGluZyB0aG9zZSBzdXBwb3J0ZWQgYnkgYHVzYm5ldGAsIGFyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcHVydmlldyBvZiBzeXprYWxsZXIgYW5kIGl0cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkga25vdyB0aGF0IGJlY2F1c2Ugb2YgbXkgZXhwZXJpZW5jZS4gV2UgY2FuIGluc3RhbnRpYXRlIGB1c2JuZXRgIGRldmljZXMgc3VjaCBhcyBDREMgRXRoZXJuZXQsIEFTSVgsIGV0Yy4gb3IgcmF3IHVzYiBnYWRnZXRzIHRocm91Z2ggdmFyaW91cyBtZWFuczogVVNCIGdhZGdldCwgUmF3IEdhZGdldCwgVVNCIGVtdWxhdGlvbiwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBzeXprYWxsZXIncyBVU0IgZnV6emluZy4gVVNCIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUsIHRoZXJlZm9yZSwgZnV6emFibGUgdXNpbmcgc3l6a2FsbGVyLCBlLmcuIHVzaW5nIGBzeXpfdXNiX2Nvbm5lY3RgLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHVzYm5ldGAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdXNpbmcgdG9vbHMgc3VjaCBhcyBgZ3JlcHBlcmAgb3IgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBhbmQgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlcy4gVGhhdCdsbCBjb25maXJtIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGVuYWJsZSBzdGF0dXMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6NTMuODY0MTcwNTg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTk1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYm5ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg3NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNDAtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTQxOlxcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXFxcInVzYm5ldFxcXCIsIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxNjE6XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjItXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY0OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcXHQrPSBtY3M3ODMwLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXFx0Kz0gdXNibmV0Lm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL2NkYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYm5ldC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlua21vZGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjM6c3RhdGljIGludCBhcWMxMTFfcmVhZF9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNC1cXHRcXHRcXHRcXHR1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI3LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyODpcXHRyZXQgPSB1c2JuZXRfcmVhZF9jbWRfbm9wbShkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI5LVxcdFxcdFxcdFxcdCAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDEtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyOnN0YXRpYyBpbnQgYXFjMTExX3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQzLVxcdFxcdFxcdCAgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDYtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ3OlxcdHJldCA9IHVzYm5ldF9yZWFkX2NtZChkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ4LVxcdFxcdFxcdCAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjYxOnN0YXRpYyBpbnQgYXFjMTExX3JlYWQxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02Mi1cXHRcXHRcXHRcXHQgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcxLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MjpzdGF0aWMgaW50IGFxYzExMV9yZWFkMTZfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTczLVxcdFxcdFxcdCAgICAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtODItXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjgzOnN0YXRpYyBpbnQgX19hcWMxMTFfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04NC1cXHRcXHRcXHQgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTQ6c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE1LVxcdFxcdFxcdFxcdCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEyNC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTI1OnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjYtXFx0XFx0XFx0ICAgIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDItXFx0XFx0XFx0XFx0ICAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNTE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUyLVxcdFxcdFxcdCAgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE2MC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTYxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTYyLVxcdFxcdFxcdFxcdCAgIHUxNiBpbmRleCwgdTMyICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTcxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3Mi1cXHRcXHRcXHQgICAgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgyLVxcdFxcdFxcdFxcdCAgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTg0OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cXHRcXHRcXHRcXHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg4LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODk6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTkwLVxcdFxcdFxcdFxcdCAgICB1MTYgaW5kZXgsIHUxNiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMDA9c3RhdGljIHZvaWQgYXFjMTExX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjAyLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjAzOlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwNC1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMDYtXFx0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyMDc6XFx0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwOC1cXHRzbnByaW50ZihpbmZvLVxcdTAwM2Vmd192ZXJzaW9uLCBzaXplb2YoaW5mby1cXHUwMDNlZndfdmVyc2lvbiksIFxcXCIldS4ldS4ldVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjE0PXN0YXRpYyB2b2lkIGFxYzExMV9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjE2LXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjE3OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIxOC1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMjc9c3RhdGljIGludCBhcWMxMTFfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIyOS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIzMDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMzEtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjY2PXN0YXRpYyBpbnQgYXFjMTExX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI2OC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjI2OTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNzAtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMzIwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzozMjE6c3RhdGljIHZvaWQgYXFjMTExX3NldF9waHlfc3BlZWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBhdXRvbmVnLCB1MTYgc3BlZWQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MzY4PXN0YXRpYyBpbnQgYXFjMTExX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTM3MC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjM3MTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0zNzItXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXFjMTExX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQxNC1cXHQuc2V0X3dvbCA9IGFxYzExMV9zZXRfd29sLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTU6XFx0LmdldF9tc2dsZXZlbCA9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQxNjpcXHQuc2V0X21zZ2xldmVsID0gdXNibmV0X3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDE3LVxcdC5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDIyPXN0YXRpYyBpbnQgYXFjMTExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQyMy17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyNDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MjUtXFx0dTE2IHJlZzE2ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz00NjQ9c3RhdGljIGludCBhcWMxMTFfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHZvaWQgKnApXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2NS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ2NjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00NjctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDc4PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00ODAte1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0ODE6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDgyLVxcdHU4IHZsYW5fY3RybCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NTA0PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUwNS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjUwNjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MDctXFx0dTggdmxhbl9jdHJsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz01Mjk9c3RhdGljIHZvaWQgYXFjMTExX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUzMC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjUzMTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MzItXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NTY2PXN0YXRpYyBpbnQgYXFjMTExX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTU2OC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjU2OTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01NzAtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXFjMTExX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MTpcXHQubmRvX29wZW5cXHRcXHQ9IHVzYm5ldF9vcGVuLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2NDI6XFx0Lm5kb19zdG9wXFx0XFx0PSB1c2JuZXRfc3RvcCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NjQzOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdXNibmV0X3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0NDpcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHVzYm5ldF90eF90aW1lb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NDUtXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NTQtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY1NTpzdGF0aWMgaW50IGFxYzExMV9yZWFkX3Blcm1fbWFjKHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NzAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY3MTpzdGF0aWMgdm9pZCBhcWMxMTFfcmVhZF9md192ZXJzaW9uKHN0cnVjdCB1c2JuZXQgKmRldixcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjcyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2ODU6c3RhdGljIGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY5OS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NzAwOlxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcwMS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcInVzYm5ldF9nZXRfZW5kcG9pbnRzIGZhaWxlZFxcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03MDMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03NTItXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc1MzpzdGF0aWMgdm9pZCBhcWMxMTFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNzc1LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NzY6c3RhdGljIHZvaWQgYXFjMTExX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNzc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03OTctXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVxcdTAwM2VuZXQpICE9IGxpbmspXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc5ODpcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfTElOS19SRVNFVCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc5OS19XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTgwMC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6ODAxOnN0YXRpYyB2b2lkIGFxYzExMV9jb25maWd1cmVfcngoc3RydWN0IHVzYm5ldCAqZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04MDItXFx0XFx0XFx0XFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjg4MTpzdGF0aWMgdm9pZCBhcWMxMTFfY29uZmlndXJlX2NzdW1fb2ZmbG9hZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTg4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtOTAwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5MDE6c3RhdGljIGludCBhcWMxMTFfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTkwMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtOTg5LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5OTA6c3RhdGljIGludCBhcWMxMTFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy05OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzMtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEwMzQ6c3RhdGljIGludCBhcWMxMTFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTEwNTc9c3RhdGljIHZvaWQgYXFjMTExX3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBwa3RfZGVzYylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMDcyOnN0YXRpYyBpbnQgYXFjMTExX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTA3My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2Mi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIG5ld19za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVxcdFxcdGlmIChwa3RfY291bnQgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTgwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFjMTExX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE4Mi1cXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTIzNi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTIzNzpcXHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjM4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTEzMjI9c3RhdGljIGludCBhcWMxMTFfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEzMjMte1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzI0OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEzMjUtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMyOS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTMzMDpcXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDE4PXN0YXRpYyBpbnQgYXFjMTExX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQxOS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE0MjA6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQyMS1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDU2LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDU3OlxcdHJldHVybiB1c2JuZXRfcmVzdW1lKGludGYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDgxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhcV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4My1cXHQuaWRfdGFibGVcXHQ9IHByb2R1Y3RzLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDg0OlxcdC5wcm9iZVxcdFxcdD0gdXNibmV0X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg1LVxcdC5zdXNwZW5kXFx0PSBhcWMxMTFfc3VzcGVuZCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4Ni1cXHQucmVzdW1lXFx0XFx0PSBhcWMxMTFfcmVzdW1lLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDg3OlxcdC5kaXNjb25uZWN0XFx0PSB1c2JuZXRfZGlzY29ubmVjdCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4OC19O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjI1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xNzg9c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTc5OlxcdHZvaWQgKCpyZXN1bWUpKHN0cnVjdCB1c2JuZXQgKmRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODA6XFx0dm9pZCAoKnN1c3BlbmQpKHN0cnVjdCB1c2JuZXQgKmRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODE6XFx0aW50ICgqcmVzZXQpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4Mi1cXHR1MTYgcHJlc3ZkX3BoeV9hZHZlcnRpc2U7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE5NT1leHRlcm4gY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzJhX2luZm87XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE5OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwMDppbnQgX19tdXN0X2NoZWNrIGFzaXhfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAxLVxcdFxcdFxcdCAgICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwMi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwMzppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA0LVxcdFxcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA2OnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwNy1cXHRcXHRcXHQgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMC1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTItdm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTQ6c3RydWN0IHNrX2J1ZmYgKmFzaXhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjE1LVxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxNi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxNzppbnQgYXNpeF9yZWFkX3BoeV9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBpbnRlcm5hbCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTk6aW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncywgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyMC1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyMTp1MTYgYXNpeF9yZWFkX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjI6aW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUsIGludCBpbl9wbSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjQ6dTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyNTppbnQgYXNpeF93cml0ZV9tZWRpdW1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjI2LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjI3OmludCBhc2l4X3dyaXRlX2dwaW8oc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdmFsdWUsIGludCBzbGVlcCwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE0OmludCBfX211c3RfY2hlY2sgYXNpeF9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTUtXFx0XFx0XFx0ICAgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNy1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE4OlxcdGludCAoKmZuKShzdHJ1Y3QgdXNibmV0ICosIHU4LCB1OCwgdTE2LCB1MTYsIHZvaWQgKiwgdTE2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyLVxcdGlmICghaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjM6XFx0XFx0Zm4gPSB1c2JuZXRfcmVhZF9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1OlxcdFxcdGZuID0gdXNibmV0X3JlYWRfY21kX25vcG07XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQxLVxcdFxcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ0OlxcdGludCAoKmZuKShzdHJ1Y3QgdXNibmV0ICosIHU4LCB1OCwgdTE2LCB1MTYsIGNvbnN0IHZvaWQgKiwgdTE2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ4LVxcdGlmICghaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDk6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1MTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWRfbm9wbTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYzOnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY0LVxcdFxcdFxcdCAgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjUte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY2OlxcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBjbWQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjctXFx0XFx0XFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcwLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjcxOnN0YXRpYyBpbnQgYXNpeF9zZXRfc3dfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTgxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjgyOnN0YXRpYyBpbnQgYXNpeF9zZXRfaHdfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTkxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjkyOnN0YXRpYyBpbnQgYXNpeF9jaGVja19ob3N0X2VuYWJsZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy05My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM3LVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjIzLVxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcXHRcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHJ4LVxcdTAwM2VheF9za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0MS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDI6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjUwPXZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjQtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjY1OnN0cnVjdCBza19idWZmICphc2l4X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zMTYtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzE3OlxcdHVzYm5ldF9zZXRfc2tiX3R4X3N0YXRzKHNrYiwgMSwgMCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzE4LVxcdHJldHVybiBza2I7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zMjAtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzIxOmludCBhc2l4X3JlYWRfcGh5X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIGludGVybmFsKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzU0OmludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzY0LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM2NTp1MTYgYXNpeF9yZWFkX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzc4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM3OTppbnQgYXNpeF93cml0ZV9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTM4MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTEtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzkyOnUxNiBhc2l4X3JlYWRfbWVkaXVtX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA3LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQwODppbnQgYXNpeF93cml0ZV9tZWRpdW1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQyMS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MjI6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQ0MT12b2lkIGFzaXhfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ0Mi17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDQzOlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDQ0LVxcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVxcdTAwMjZkZXYtXFx1MDAzZWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00ODA9c3RhdGljIGludCBfX2FzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00ODIte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ4MzpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ4NC1cXHRfX2xlMTYgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTE1PXN0YXRpYyBpbnQgX19hc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUxNy17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTE4OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTE5LVxcdF9fbGUxNiByZXMgPSBjcHVfdG9fbGUxNih2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTQ5PWludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NTAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU1MTpcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTU1Nj1pbnQgYXNpeF9tZGlvX2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTU4OlxcdHN0cnVjdCB1c2JuZXQgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTc0PXZvaWQgYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTc1LXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NzY6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NzctXFx0dTggb3B0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTkzPWludCBhc2l4X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbylcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01OTQte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU5NTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU5Ni1cXHR1OCBvcHQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjE4PWludCBhc2l4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02MjAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYyMTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyMi1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjUzPWludCBhc2l4X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NTUte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY1NjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1Ny1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NzM0PWludCBhc2l4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTczNS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NzM2OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzM3LVxcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVxcdTAwMjZkZXYtXFx1MDAzZWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzU9c3RydWN0IGF4ODgxNzJfaW50X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQyLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo0MzpzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTUzLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKGRldi1cXHUwMDNlbmV0KSAhPSBsaW5rKSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU0OlxcdFxcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIGxpbmssIDEpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01NS1cXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiTGluayBTdGF0dXMgaXM6ICVkXFxcXG5cXFwiLCBsaW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01OC1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NTk6c3RhdGljIHZvaWQgYXNpeF9zZXRfbmV0ZGV2X2Rldl9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OS0vKiBHZXQgdGhlIFBIWSBJZGVudGlmaWVyIGZyb20gdGhlIFBIWVNJRDEgXFx1MDAyNiBQSFlTSUQyIE1JSSByZWdpc3RlcnMgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA6c3RhdGljIHUzMiBhc2l4X2dldF9waHlpZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDAtLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwMTogICBvd24gc3RydWN0dXJlIHNvIHdlIGRvbid0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDItICAgZGV2aWNlcyB0aGF0IG1heSBiZSBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3Ml9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTA0OlxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gdXNibmV0X2dldF9kcnZpbmZvLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDU6XFx0LmdldF9saW5rXFx0XFx0PSB1c2JuZXRfZ2V0X2xpbmssXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwNjpcXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDc6XFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gdXNibmV0X3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTA4LVxcdC5nZXRfd29sXFx0XFx0PSBhc2l4X2dldF93b2wsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTEyLVxcdC5zZXRfZWVwcm9tXFx0XFx0PSBhc2l4X3NldF9lZXByb20sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExMzpcXHQubndheV9yZXNldFxcdFxcdD0gdXNibmV0X253YXlfcmVzZXQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExNDpcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSB1c2JuZXRfZ2V0X2xpbmtfa3NldHRpbmdzX21paSxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTE1OlxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHVzYm5ldF9zZXRfbGlua19rc2V0dGluZ3NfbWlpLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMTg9c3RhdGljIHZvaWQgYXg4ODE3Ml9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTExOS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEyMDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMjEtXFx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXFx1MDAyNmRldi1cXHUwMDNlZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNTYtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE1NzpzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1OC17XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM0OjUzLjkxNDc2ODI0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzMwMTc5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQl9VU0JORVQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uLiBMZXQncyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlOiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG1hdHRlciBpcy4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbnMg4oCTIHRoZSBzcGVjaWZpYyBzZXR0aW5ncyBhdmFpbGFibGUg4oCTIGFuZCwgY3JpdGljYWxseSwgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZSBkb2VzIGBVU0JfVVNCTkVUYCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgYW55IHByZWNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBiZWZvcmUgSSBjYW4gZXZlbiAqY29uc2lkZXIqIGVuYWJsaW5nIGl0PyBUaW1lIHRvIGdldCBncmFudWxhciBhbmQgbWFwIG91dCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEtub3dpbmcgdGhlIEtjb25maWcgaXMga2V5IHRvIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1Ni4yNDc3ODgyMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXFxuIDEzMTpcXHRcXG4gMTMyOlxcdGNvbmZpZyBVU0JfVVNCTkVUXFxuIDEzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuIDEzNDpcXHRcXHRzZWxlY3QgTUlJXFxuIDEzNTpcXHRcXHRoZWxwXFxuIDEzNjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcXG4gMTM3OlxcdFxcdCAgd2l0aCBcXFwibWluaWRyaXZlcnNcXFwiIGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXFxuIDEzODpcXHRcXHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xcbiAxMzk6XFx0XFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXFxcInVzYm5ldFxcXCIsIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXFxcIm5ldHdvcmtcXFwiIG9yIFxcXCJkYXRhIHRyYW5zZmVyXFxcIlxcbiAxNDQ6XFx0XFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcXG4gMTQ1OlxcdFxcdCAgICBcXFwiTGFwbGlua1xcXCIgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxcbiAxNDY6XFx0XFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cXG4gMTQ5OlxcdFxcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcXG4gMTUwOlxcdFxcdCAgICBvdGhlcnMpLCBhbmQgZGV2aWNlcyB0aGF0IGludGVyb3BlcmF0ZSB1c2luZyB0aGUgc3RhbmRhcmRcXG4gMTUxOlxcdFxcdCAgICBDREMtRXRoZXJuZXQgc3BlY2lmaWNhdGlvbiAoaW5jbHVkaW5nIG1hbnkgY2FibGUgbW9kZW1zKS5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICAtIE5ldHdvcmsgYWRhcHRlciBoYXJkd2FyZSAobGlrZSB0aG9zZSBmb3IgMTAvMTAwIEV0aGVybmV0KSB3aGljaFxcbiAxNTQ6XFx0XFx0ICAgIHVzZXMgdGhpcyBkcml2ZXIgZnJhbWV3b3JrLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHQgIFRoZSBsaW5rIHdpbGwgYXBwZWFyIHdpdGggYSBuYW1lIGxpa2UgXFxcInVzYjBcXFwiLCB3aGVuIHRoZSBsaW5rIGlzXFxuIDE1NzpcXHRcXHQgIGEgdHdvLW5vZGUgbGluaywgb3IgXFxcImV0aDBcXFwiIGZvciBtb3N0IENEQy1FdGhlcm5ldCBkZXZpY2VzLiAgVGhvc2VcXG4gMTU4OlxcdFxcdCAgdHdvLW5vZGUgbGlua3MgYXJlIG1vc3QgZWFzaWx5IG1hbmFnZWQgd2l0aCBFdGhlcm5ldCBCcmlkZ2luZ1xcbiAxNTk6XFx0XFx0ICAoQ09ORklHX0JSSURHRSkgaW5zdGVhZCBvZiByb3V0aW5nLlxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldC9cXHUwMDNlLlxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibmV0LlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuIDE2NzpcXHRcXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDE2ODpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gMTY5OlxcdFxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1Ni4yNDc4OTQ1OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDQ3ODIxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgVVNCIG5ldHdvcmtpbmcgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSdzIGZpcnN0IGZldyBsaW5lcy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbW1lZGlhdGUgbWVudSBzdHJ1Y3R1cmUgb3IgYW55IGRlcGVuZGVuY2llcyBkZWZpbmVkIGZvciBgVVNCX05FVF9EUklWRVJTYCBvciBldmVuIHRoZSBicm9hZGVyIGBVU0JgIGZlYXR1cmUgc2V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgdGhlIHByZXJlcXVpc2l0ZXMgbWlnaHQgYmUgZm9yIGVuYWJsaW5nIHRoZXNlIGRyaXZlcnMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdOKAmWxsIGxldCBtZSBxdWlja2x5IGdyYXNwIGhvdyB0aGVzZSBwYXJ0cyBwbHVnIGludG8gdGhlIGxhcmdlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6NTkuMjk1NzE4NTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1OS4yOTU4MTA2NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDI1MTUwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgaW5zcGVjdGlvbiByZXF1ZXN0LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFVTQm5ldCBEcml2ZXI6IEtleSBTZWN0aW9ucyBmb3IgUmV2aWV3KipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBleGFtaW5lIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMzIwLTM2MCBhbmQgMTI5MC0xMzI1LiBUaGF0J3MgYSByZWFzb25hYmxlIHJlcXVlc3QuIFRob3NlIGxpbmUgcmFuZ2VzIGxpa2VseSBjb3ZlciBjcml0aWNhbCBhcmVhcyB3aXRoaW4gdGhlIFVTQiBuZXR3b3JrIGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIGltbWVkaWF0ZWx5IGh5cG90aGVzaXplIHdoYXQgbWlnaHQgYmUgdGhlcmUuIExpbmVzIDMyMC0zNjAgY291bGQgZGVhbCB3aXRoIHNvbWUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LCBwZXJoYXBzIGRldmljZSBwcm9iZSBhbmQgY29ubmVjdGlvbiBoYW5kbGluZywgb3IgcG9zc2libHkgaW50ZXJydXB0IHNldHVwIHdpdGhpbiB0aGUgZHJpdmVyLCBnaXZlbiB0aGUgdXN1YWwgbGF5b3V0IG9mIGEgVVNCIGRyaXZlci4gSSBleHBlY3Qgc29tZSBkZXZpY2UgY29uZmlndXJhdGlvbiBvciBiYXNpYyBzZXR1cCwgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLlxuXG5UaGUgbGF0dGVyIHNlY3Rpb24sIDEyOTAtMTMyNSwgaXMgYSBiaXQgZnVydGhlciBpbnRvIHRoZSBmaWxlLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLCB0aGlzIHJhbmdlIGNvdWxkIGRlYWwgd2l0aCB0aGUgY29yZSBkYXRhIHRyYW5zZmVyIGxvZ2ljIC0gbWF5YmUgdGhlIHNlbmQgcGF0aCBvciByZWNlaXZlIHBhdGggaGFuZGxpbmcgZm9yIG5ldHdvcmsgcGFja2V0cy4gSSB3b3VsZCBwcmVkaWN0IHRoYXQsIGlmIHRoZSBmb3JtZXIgaXMgaW50ZXJydXB0IHNldHVwLCB0aGlzIHNlY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgbGl2ZSwgaW5jbHVkaW5nIGRhdGEgdHJhbnNmZXIgY29tcGxldGlvbiBwcm9jZXNzaW5nLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGJ1bGsgdHJhbnNmZXIsIGludGVycnVwdCB0cmFuc2Zlciwgb3IgZXZlbiBpc29jaHJvbm91cyB0cmFuc2ZlcnMsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBBbHNvLCBnaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBkcml2ZXIsIGl0J3MgdmVyeSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBhbmQgaG93IHRoZSBkYXRhIHN0cmVhbXMgYXJlIG1hbmFnZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gY29uZmlybSBteSBoeXBvdGhlc2VzLiBJdCdsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBhdXRob3Igc3RydWN0dXJlZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhleSd2ZSBpbXBsZW1lbnRlZC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUncyBiZWhhdmlvciB3aXRoaW4gdGhlc2UgYXJlYXMsIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciwgb2YgY291cnNlLCBhbnkgZ2xhcmluZyBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4gVGhhdCdzIHRoZSBjaGFsbGVuZ2UuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNTowMy4zMjA5NjM0NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cXG4gMzIzOlxcdCAqIFNvbWUgbGluayBwcm90b2NvbHMgYmF0Y2ggcGFja2V0cywgc28gdGhlaXIgcnhfZml4dXAgcGF0aHNcXG4gMzI0OlxcdCAqIGNhbiByZXR1cm4gY2xvbmVzIGFzIHdlbGwgYXMganVzdCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYi5cXG4gMzI1OlxcdCAqL1xcbiAzMjY6XFx0dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDMyNzpcXHR7XFxuIDMyODpcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gMzI5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDMzMDpcXHRcXHRpbnRcXHRzdGF0dXM7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSkge1xcbiAzMzM6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlcnhxX3BhdXNlLCBza2IpO1xcbiAzMzQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzU6XFx0XFx0fVxcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHQvKiBvbmx5IHVwZGF0ZSBpZiB1bnNldCB0byBhbGxvdyBtaW5pZHJpdmVyIHJ4X2ZpeHVwIG92ZXJyaWRlICovXFxuIDMzODpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAwKVxcbiAzMzk6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVxcdTAwM2VuZXQpO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIDM0MjpcXHRcXHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDM6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0NTpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDY6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ3OlxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gMzUwOlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbiAzNTE6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG4gMzU0OlxcdFxcdFxcdHJldHVybjtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0c3RhdHVzID0gbmV0aWZfcnggKHNrYik7XFxuIDM1NzpcXHRcXHRpZiAoc3RhdHVzICE9IE5FVF9SWF9TVUNDRVNTKVxcbiAzNTg6XFx0XFx0XFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXFx1MDAzZW5ldCxcXG4gMzU5OlxcdFxcdFxcdFxcdCAgXFxcIm5ldGlmX3J4IHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDMuMzIxMTI4OTU5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzM3NTg0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBVU0JuZXQgVHJhbnNtaXNzaW9uIENvbXBsZXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSBVU0IgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIGZpbGUuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIHBhY2tldHMgYXJlIHN1Y2Nlc3NmdWxseSBzZW50IG92ZXIgdGhlIFVTQiBidXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIGEgdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlLCBvciwgbW9yZSBsaWtlbHksIHdoYXQgbmVlZHMgdG8gaGFwcGVuIHRvIG1ha2UgdGhlIHRyYW5zbWlzc2lvbiAqYXBwZWFyKiB0byBiZSBjb21wbGV0ZS4gSXMgaXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IFJlc291cmNlIHJlbGVhc2U/IE5vdGlmaWNhdGlvbiB0byB0aGUgdXBwZXIgbmV0d29ya2luZyBsYXllcnM/IEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGNvbnRyb2xsZXIgYW5kIHRoZSBuZXR3b3JrIHN0YWNrIGluIGhlcmUuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGRlYWx0IHdpdGggaGVyZS4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGJvdGggc3VjY2Vzc2Z1bCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdHJhbnNtaXNzaW9uIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjA1Ljc5NDg5MDQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VmbGFncylcXG4xMjkyOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VmbGFncyk7XFxuMTI5MzpcXHR9XFxuMTI5NDpcXHRcXG4xMjk1OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI5NjpcXHRcXG4xMjk3OlxcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4xMjk4OlxcdHtcXG4xMjk5OlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuMTMwMDpcXHRcXHRzdHJ1Y3Qgc2tiX2RhdGFcXHRcXHQqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi1cXHUwMDNlY2I7XFxuMTMwMTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyA9PSAwKSB7XFxuMTMwNDpcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4xMzA1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTMwNjpcXHRcXG4xMzA3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4xMzA4OlxcdFxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuMTMwOTpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMxMDpcXHRcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cXHUwMDNlcGFja2V0cyk7XFxuMTMxMTpcXHRcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuMTMxMjpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbjEzMTM6XFx0XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbjEzMTQ6XFx0XFx0fSBlbHNlIHtcXG4xMzE1OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG4xMzE2OlxcdFxcbjEzMTc6XFx0XFx0XFx0c3dpdGNoICh1cmItXFx1MDAzZXN0YXR1cykge1xcbjEzMTg6XFx0XFx0XFx0Y2FzZSAtRVBJUEU6XFxuMTMxOTpcXHRcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XFxuMTMyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0XFx0Lyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqL1xcbjEzMjM6XFx0XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXHRcXHQvLyBhc3luYyB1bmxpbmtcXG4xMzI0OlxcdFxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXHRcXHQvLyBoYXJkd2FyZSBnb25lXFxuMTMyNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0XFx0LyogbGlrZSByeCwgdHggZ2V0cyBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGh1Yl93cVxcbjEzMjg6XFx0XFx0XFx0ICogZGVsYXlzIGFuZCBzbyBpdCB1c2VzIHRoZSBzYW1lIHRocm90dGxpbmcgbWVjaGFuaXNtLlxcbjEzMjk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjA1Ljc5NTAxNzY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM2NzI3OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBZZXAsIG5vIGRvdWJ0IGFib3V0IGl0LiBUaGlzIGlzIGB1c2JuZXQuY2AsIHRoZSBoZWFydCBvZiBVU0IgbmV0d29ya2luZyBkcml2ZXJzIGluIExpbnV4LiBXZSdyZSB0YWxraW5nIGFib3V0IGRldmljZXMgbGlrZSBDREMgRXRoZXJuZXQsIEFTSVgsIHRoZSB3aG9sZSBzaGViYW5nLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgYHVzYm5ldF9za2JfcmV0dXJuKClgLCB3aGljaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMgYW5kIHVwZGF0ZXMgc3RhdHMsIGFuZCBgdHhfY29tcGxldGUoKWAsIHRoZSBVUkIgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgdHJhbnNtaXNzaW9uLCBhbHNvIHdpdGggc3RhdCB1cGRhdGVzLiBUaGVzZSBhcmUgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIGhpdCB3aGVuIGEgVVNCIG5ldHdvcmsgZGV2aWNlIHRyYW5zbWl0cyBvciByZWNlaXZlcy4gVGhhdCdzIHRyaXZpYWwgdG8gdHJpZ2dlciBldmVuIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyB0aGluayBzeXprYWxsZXIgd2l0aCByYXcgZ2FkZ2V0cyBvciBqdXN0IHN0cmFpZ2h0LXVwIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgc2hvdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gZm9jdXMgb24gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gV2FpdCwgaG9sZCBvbiDigJMgd2hpY2ggc3ltYm9scyBhcmUgYWN0dWFsbHkgYmVpbmcgKm1vZGlmaWVkKj8gSXQgbG9va3MgbGlrZSBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHRoZW1zZWx2ZXMuIE9rYXksIGdvb2QgdG8ga25vdy4gTm93LCBpcyBgdHhfY29tcGxldGVgIGV2ZW4gYWNjZXNzaWJsZT8gTGV0J3Mgc2VlLi4uIGBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpYC4gQWgsIGl0J3Mgc3RhdGljIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBUaGF0IG1pZ2h0IGJlIGEgcHJvYmxlbS4gV2UgbmVlZCB0byBjb25maXJtIGl0J3MgYSB2YWxpZCBzeW1ib2wgdmlzaWJsZSBpbiBgdm1saW51eGAuIEknbGwgcnVuIGBncmVwcGVyYCBvciBjaGVjayB0aGUgY2FsbGVycyBvZiBgdHhfY29tcGxldGVgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGNhbiBhY3R1YWxseSBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDkuODMxNzQ4ODgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgzMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODY9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5Ni1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDQ9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQwLVxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVxcdTAwM2V1ZGV2LCBkZXYtXFx1MDAzZW91dCxcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQ0MTpcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4sIHR4X2NvbXBsZXRlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQyLVxcdGlmIChkZXYtXFx1MDAzZWNhbl9kbWFfc2cpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDkuODgxNTgxMzUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MjE2Mzk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29yayBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nIHJlZ2FyZGluZyBmdXp6aW5nIHRoaXMgVVNCIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbXBpbGVyICpoYXMqIHRvIGtlZXAgYHR4X2NvbXBsZXRlYCBhcm91bmQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiB3aXRoaW4gYHVzYl9maWxsX2J1bGtfdXJiYC4gVGhpcyBtZWFucyBpdCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZXMgKGthbGxzeW1zL3ZtbGludXgpLiBTaW1pbGFybHksIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIHNvIHdlIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBib3RoLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4YW1pbmUgYHVzYm5ldF9zdGFydF94bWl0YCwgYnV0IGF0IGEgbWluaW11bSBJJ2xsIGZvY3VzIG9uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGtleSBpcyBgQ09ORklHX1VTQl9VU0JORVRgLiBUaGlzIGlzIHdoYXQgZW5hYmxlcyB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycywgYW5kIGRlcGVuZHMgb24gYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgLCB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIGBDT05GSUdfVVNCYCBhbmQgYENPTkZJR19ORVRgLiBMb29raW5nIGludG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCwgSSBjYW4gY29uZmlybSB0aGF0IGBVU0JfVVNCTkVUYCBhbHNvIHJlcXVpcmVzIHRoZSBzZWxlY3Rpb24gb2YgYE1JSWAuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUgYnVpbGQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIGluIGxpbmUgd2l0aCBteSBvdmVyYWxsIHN0cmF0ZWd5OlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHksIHllcyFcbjIuICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBgW1widXNibmV0X3NrYl9yZXR1cm5cIiwgXCJ0eF9jb21wbGV0ZVwiXWAgYXJlIHRoZSBwcmltZSB0YXJnZXRzLlxuMy4gIGBFbmFibGVDb25maWdzYDogYFtcIlVTQl9VU0JORVRcIiwgXCJVU0JfTkVUX0RSSVZFUlNcIiwgXCJVU0JcIiwgXCJORVRcIl1gLiBUaGVzZSBjb25maWdzIGFyZSBlc3NlbnRpYWwuXG40LiAgYFJlYXNvbmluZ2A6IFdlJ3ZlIGdvdCBhIGNsZWFyIGV4cGxhbmF0aW9uIG9mICp3aHkqIHRoaXMgaXMgYSBnb29kIHRhcmdldCAtIGZpeGluZyBpc3N1ZXMgYWNjZXNzaW5nIHBlci1DUFUgc3RhdHMsIGFuZCBpdHMgYWNjZXNzaWJpbGl0eSB2aWEgVVNCIG5ldHdvcmtpbmcgZGV2aWNlcywgbWVhbmluZyBpdCBpcyBmdXp6YWJsZSB2aWEgVVNCIGdhZGdldC9lbXVsYXRpb24sIGFsbCBvZiB3aGljaCBJJ3ZlIGV4cGxpY2l0bHkgdmVyaWZpZWQuXG5cblJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UncmUgcmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI0LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNToxNC40MDMyMjM0OThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkxNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYm5ldF9za2JfcmV0dXJuXCIsXG4gICAgXCJ0eF9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB1cGRhdGUgcm91dGluZXMgaW4gdXNibmV0ICh1c2JuZXRfc2tiX3JldHVybiBhbmQgdHhfY29tcGxldGUpIGJ5IGRpc2FibGluZyBsb2NhbCBJUlFzIGJlZm9yZSBjYWxsaW5nIHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MTQuNDgxMTQ2MjU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwNjc3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjE0LjQ4MTYxMDEzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNTA2MzAyMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5pbmRleCBhMTllY2Y3MThmMzZhLi42YTQ4ZjM4ZTEwNWQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbkBAIC0zMjUsNyArMzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuICAqL1xuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludFx0c3RhdHVzO1xuIFxuQEAgLTMzOCwxMCArMzM4LDEzIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIFxuLVx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTMwMSwxNiBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MTQuNDgxNjExMTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNzIyODA1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgc3RhdGlzdGljIHVwZGF0ZXMgZm9yIFJYIGFuZCBUWCBwYWNrZXRzLiBUaGUgZGlmZiBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhlIHBsYWNlbWVudCBvZiB0aGUgYHRoaXNfY3B1X3B0cigpYCBjYWxsLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIGZldGNoaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbiB1c2luZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKClgLiBOb3csIHRoZSBjb2RlIHNhdmVzIHRoZSBpbnRlcnJ1cHQgc3RhdGUgZmlyc3Qgd2l0aCBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCwgKnRoZW4qIGZldGNoZXMgdGhlIGBzdGF0czY0YCBwb2ludGVyIHVzaW5nIGB0aGlzX2NwdV9wdHIoKWAsIGFuZCAqZmluYWxseSogdXNlcyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC9gdTY0X3N0YXRzX3VwZGF0ZV9lbmQoKWAgdG8gaGFuZGxlIHRoZSB1cGRhdGUsIGZvbGxvd2VkIGJ5IHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpdGggYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZS4gSWYgdGhlIHRhc2sgd2VyZSBwcmVlbXB0ZWQgb3IgbWlncmF0ZWQgdG8gYW5vdGhlciBDUFUgKmFmdGVyKiBmZXRjaGluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGJ1dCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cywgb3IgaWYgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZXMgd2hlcmUgcGVyLWNwdSBwb2ludGVycyByZXF1aXJlIHByZWVtcHRpb24gZGlzYWJsZWQsIHRoZSB3cm9uZyBzdGF0aXN0aWNzIGNvdWxkIGJlIHVwZGF0ZWQuIEZldGNoaW5nIHRoZSBwb2ludGVyIHVuZGVyIGludGVycnVwdC9wcmVlbXB0aW9uIGNvbnRyb2wgZ3VhcmFudGVlcyB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGNvcnJlY3QgcGVyLUNQVSBzdHJ1Y3R1cmUsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgaW4gU01QL211bHRpY29yZSBzeXN0ZW1zLiBJdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcgZml4LlxuXG5Ob3csIGxldCdzIGNyaXRpY2FsbHkgZXhhbWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgaXNzdWVzLiBBIHF1aWNrIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIGBmbGFnc2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlYCBjYWxsLiBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYnkgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgLCB3aGljaCBzaG91bGQgcmV0dXJuIGEgdmFsaWQgcG9pbnRlci4gVGhlIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfZW5kYCBmdW5jdGlvbnMgd29yayBvbiB0aGUgc3luY3Agb2Ygc3RhdHM2NCwgc28gdGhvc2UgYXJlIGFsbCB2YWxpZCwgYW5kIGBsb2NhbF9pcnFfcmVzdG9yZShmbGFncylgIHVzZXMgdGhlIGluaXRpYWxpemVkIGBmbGFnc2AgdmFsdWUuIFNvLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gcG90ZW50aWFsIGZvciBtZW1vcnkgbGVha3Mgb3Igb3RoZXIgbmFzdHkgc2lkZSBlZmZlY3RzIHRoYXQgSSBjYW4gc2VlIGltbWVkaWF0ZWx5LiBUaGUgdmFyaWFibGVzIGFyZSBhbGwgc2FmZS4gVGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGNvcHlfdG9fdXNlciBjYWxscywgb3IgaW5mbyBsZWFrcyBoZXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnJhbmNoZXMgdGhhdCBsb29rIGNvbmNlcm5pbmcuXG5cbkknbSBjb25maWRlbnQgdGhpcyBpcyBhIHNhZmUgYW5kIGNvcnJlY3QgY2hhbmdlIHRvIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuIEl0J3MgZ29vZCBwcmFjdGljZSB0byBwcm90ZWN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBlci1jcHUgcG9pbnRlcnMgZHVyaW5nIHRoZSB1cGRhdGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQgZG9lc24ndCBhcHBlYXIgbGlrZSB0aGlzIG5lY2Vzc2l0YXRlcyBhbnkgS01TQU4gY2hlY2tzLiBTdGlsbCwgaXQncyBnb29kIHRvIGRvIGEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUgbGluZXMgb2YgY29kZS4gSSdsbCBwcm9iYWJseSBydW4gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgbG9vayBhcyBleHBlY3RlZCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MjEuNjUzODk0MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzMwOlxcdFxcdGludFxcdHN0YXR1cztcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfcGF1c2UsIHNrYik7XFxuIDMzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDMzNTpcXHRcXHR9XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cXG4gMzM4OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIDMzOTpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQyOlxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuIDM0NDpcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gMzQ1OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuIDM0NjpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDc6XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM1MTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU3OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1ODpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTk6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNjA6XFx0fVxcbiAzNjE6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHQvKiBtdXN0IGJlIGNhbGxlZCBpZiBoYXJkX210dSBvciByeF91cmJfc2l6ZSBjaGFuZ2VkICovXFxuIDM2NDpcXHR2b2lkIHVzYm5ldF91cGRhdGVfbWF4X3FsZW4oc3RydWN0IHVzYm5ldCAqZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNToyMS42NTQwMTM5NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzMzg3ODkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBVU0JuZXQgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIHRvIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyByZWFsbHkganVzdCBhIHJlb3JkZXJpbmcgb2YgaG93IHRoZSB0cmFmZmljIHN0YXRpc3RpY3MgYXJlIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyB0aGUgZmV0Y2hpbmcgb2YgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHRvICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgY3JpdGljYWwgc2VjdGlvbiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCwgd2hpY2ggaGFkIHRoZSBzdGF0cyByZXRyaWV2YWwgKmJlZm9yZSogdGhlIElSUSBkaXNhYmxpbmcuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIEtNU0FOIGlzc3VlcywgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyBoZXJlLiBUaGVyZSdzIG5vIGhpbnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWNjZXNzZWQsIG5vIHJpc2sgb2YgbGVha2luZyBrZXJuZWwgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSwgbm90aGluZyBjb21wbGV4IGJlaW5nIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyBjb25kaXRpb25hbCBsb2dpYyBicmFuY2hpbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGFsbCBjb21tb24gS01TQU4gdHJpZ2dlcnMsIGFuZCBub25lIG9mIHRoZW0gYXJlIHByZXNlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRpdmVseSBmYWxzZSBpbiB0aGlzIGNhc2UuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoaXMgY2xlYXIgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjI0Ljk4Nzg5NTI2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIGluc2lkZSBhIGBsb2NhbF9pcnFfc2F2ZWAvYGxvY2FsX2lycV9yZXN0b3JlYCBibG9jayByYXRoZXIgdGhhbiBjYWxsaW5nIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgIG9uIGEgcG9pbnRlciBvYnRhaW5lZCBwcmlvciB0byBkaXNhYmxpbmcgaW50ZXJydXB0cy9wcmVlbXB0aW9uLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow7fmjd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 01:46:59 +0000 UTC FinishedAt: 2026-09-05 02:35:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "db3cc672-7abd-42a1-88c5-c9071592f55e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZmV0Y2ggdGhlIHBlci1DUFUgcG9pbnRlciBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHJvdXRpbmVzIGluIHVzYm5ldCAodXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlKSBieSBkaXNhYmxpbmcgbG9jYWwgSVJRcyBiZWZvcmUgY2FsbGluZyB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNiYzBhMThlNjJiODczYzc1Mjg1NTlkNzQ1NDc5OTE0MzMzZmJhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5pbmRleCBhMTllY2Y3MThmMzZhLi42YTQ4ZjM4ZTEwNWQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbkBAIC0zMjUsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICYjNDM7MzM4LDEzIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIFxuLVx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiBcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICYjNDM7MTMwMSwxNiBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4tXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZHJpdmVyIGZvciBVU0IgbmV0d29yayBpbnRlcmZhY2VzLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY3JpdGljYWwgY2hhbmdlcyBpbiBpbnRlcnJ1cHQgaGFuZGxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcg4oCTIGFsd2F5cyBhbiBhcmVhIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBhcmUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgd2hpY2ggYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBjb21wb25lbnRzOiBoYW5kbGluZyByZWNlaXZlZCBTS0JzIChzb2NrZXQgYnVmZmVyKSBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24sIHJlc3BlY3RpdmVseS4KClJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBkaWZmcy4gSW4gYm90aCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLCB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgcmVvcmRlcmluZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBhcm91bmQgdGhlIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGVzLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpYCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cyBvciBzYXZpbmcgdGhlIGludGVycnVwdCBzdGF0ZSB3aXRoIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgLiBUaGUgcmV2aXNlZCB2ZXJzaW9uIHBsYWNlcyBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCAqYmVmb3JlKiB0aGUgYHRoaXNfY3B1X3B0cmAgY2FsbCBhbmQgYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgYXQgdGhlIGVuZC4gVGhleSBzd2l0Y2hlZCB0aGUgYXRvbWljIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB0aGUgbm9uLWF0b21pYyBvbmVzIChgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbmAgYW5kIGB1NjRfc3RhdHNfdXBkYXRlX2VuZGApLgoKVGhlICp3aHkqIGlzIHRoZSBrZXkgcXVlc3Rpb24uIFRoZSBjb21tZW50IGNsdWVzIHVzIGluLiBUaGUgb3JpZ2luYWwgb3JkZXIgY291bGQgaGF2ZSBsZWQgdG8gYSByYWNlIGNvbmRpdGlvbi4gSWYgYHRoaXNfY3B1X3B0cmAgaXMgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBlbmFibGVkLCBvciBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMsIHRoZSBDUFUgY291bGQgcG90ZW50aWFsbHkgbWlncmF0ZSBvciBiZSBwcmVlbXB0ZWQuIFRoaXMgY291bGQgY2F1c2UgaXQgdG8gYWNjZXNzIGluY29ycmVjdCBwZXItQ1BVIHN0YXRpc3RpY3MgKG9yIGV2ZW4gdGhlIHdyb25nIENQVSYjMzk7cyBzdGF0cyksIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYERFQlVHX1BSRUVNUFRgIG9yIHdvcnNlLiBUaGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBzZW5zaXRpdmUuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGFjdC4gVVNCIG5ldHdvcmsgZGV2aWNlcywgaW5jbHVkaW5nIHRob3NlIHN1cHBvcnRlZCBieSBgdXNibmV0YCwgYXJlIGRlZmluaXRlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIHN5emthbGxlciBhbmQgaXRzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHRoYXQgYmVjYXVzZSBvZiBteSBleHBlcmllbmNlLiBXZSBjYW4gaW5zdGFudGlhdGUgYHVzYm5ldGAgZGV2aWNlcyBzdWNoIGFzIENEQyBFdGhlcm5ldCwgQVNJWCwgZXRjLiBvciByYXcgdXNiIGdhZGdldHMgdGhyb3VnaCB2YXJpb3VzIG1lYW5zOiBVU0IgZ2FkZ2V0LCBSYXcgR2FkZ2V0LCBVU0IgZW11bGF0aW9uLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4gVVNCIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUsIHRoZXJlZm9yZSwgZnV6emFibGUgdXNpbmcgc3l6a2FsbGVyLCBlLmcuIHVzaW5nIGBzeXpfdXNiX2Nvbm5lY3RgLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB1c2JuZXRgIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHVzaW5nIHRvb2xzIHN1Y2ggYXMgYGdyZXBwZXJgIG9yIGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgYW5kIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O2xsIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlIHN0YXR1cywganVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNibmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTQwLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTQxOlx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTQyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2MC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2MTpcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYzLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2NDpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcdCYjNDM7PSBtY3M3ODMwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfVVNCX1VTQk5FVClcdCYjNDM7PSB1c2JuZXQub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19VU0JfTkVUX0lOVDUxWDEpXHQmIzQzOz0gaW50NTF4MS5vXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9jZGMuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmttb2RlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjItXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjM6c3RhdGljIGludCBhcWMxMTFfcmVhZF9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI0LVx0XHRcdFx0dTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjctXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6Mjg6XHRyZXQgPSB1c2JuZXRfcmVhZF9jbWRfbm9wbShkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjktXHRcdFx0XHQgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MjpzdGF0aWMgaW50IGFxYzExMV9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQzLVx0XHRcdCAgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ3Olx0cmV0ID0gdXNibmV0X3JlYWRfY21kKGRldiwgY21kLCBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00OC1cdFx0XHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02MC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2MTpzdGF0aWMgaW50IGFxYzExMV9yZWFkMTZfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02Mi1cdFx0XHRcdCAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcxLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjcyOnN0YXRpYyBpbnQgYXFjMTExX3JlYWQxNl9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03My1cdFx0XHQgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04Mi1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo4MzpzdGF0aWMgaW50IF9fYXFjMTExX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04NC1cdFx0XHQgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExMy1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTQ6c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTUtXHRcdFx0XHQgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTI0LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEyNTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjYtXHRcdFx0ICAgIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0MC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0Mi1cdFx0XHRcdCAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNTAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTUxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMTZfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUyLVx0XHRcdCAgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNjAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTYxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNjItXHRcdFx0XHQgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTcwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE3MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZTMyX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3Mi1cdFx0XHQgICAgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODItXHRcdFx0XHQgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODQ6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cdFx0XHRcdCAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg4LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4OTpzdGF0aWMgaW50IGFxYzExMV93cml0ZTE2X2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE5MC1cdFx0XHRcdCAgICB1MTYgaW5kZXgsIHUxNiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjAwPXN0YXRpYyB2b2lkIGFxYzExMV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMDIte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIwMzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjA0LVx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjA2LVx0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIwNzpcdHVzYm5ldF9nZXRfZHJ2aW5mbyhuZXQsIGluZm8pO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwOC1cdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwmIzM0OyV1LiV1LiV1XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMTQ9c3RhdGljIHZvaWQgYXFjMTExX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjE2LXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyMTc6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIxOC1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTIyNz1zdGF0aWMgaW50IGFxYzExMV9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIyOS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjMwOlx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMzEtXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yNjY9c3RhdGljIGludCBhcWMxMTFfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI2OC17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjY5Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNzAtXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0zMjAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MzIxOnN0YXRpYyB2b2lkIGFxYzExMV9zZXRfcGh5X3NwZWVkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggYXV0b25lZywgdTE2IHNwZWVkKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTM2OD1zdGF0aWMgaW50IGFxYzExMV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMzcwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzozNzE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTM3Mi1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFxYzExMV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDE0LVx0LnNldF93b2wgPSBhcWMxMTFfc2V0X3dvbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTU6XHQuZ2V0X21zZ2xldmVsID0gdXNibmV0X2dldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTY6XHQuc2V0X21zZ2xldmVsID0gdXNibmV0X3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MTctXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz00MjI9c3RhdGljIGludCBhcWMxMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSlcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MjMte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyNDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDI1LVx0dTE2IHJlZzE2ID0gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDY0PXN0YXRpYyBpbnQgYXFjMTExX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2NS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NDY2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00NjctXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDc4PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDgwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0ODE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ4Mi1cdHU4IHZsYW5fY3RybCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTUwND1zdGF0aWMgaW50IGFxYzExMV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUwNS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NTA2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MDctXHR1OCB2bGFuX2N0cmwgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz01Mjk9c3RhdGljIHZvaWQgYXFjMTExX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNTMwLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo1MzE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUzMi1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTU2Nj1zdGF0aWMgaW50IGFxYzExMV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNTY4LXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo1Njk6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTU3MC1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTY0MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFxYzExMV9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MTpcdC5uZG9fb3Blblx0XHQ9IHVzYm5ldF9vcGVuLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MjpcdC5uZG9fc3RvcFx0XHQ9IHVzYm5ldF9zdG9wLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MzpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHVzYm5ldF9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0NDpcdC5uZG9fdHhfdGltZW91dFx0XHQ9IHVzYm5ldF90eF90aW1lb3V0LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY0NS1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjU0LVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY1NTpzdGF0aWMgaW50IGFxYzExMV9yZWFkX3Blcm1fbWFjKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NTYte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NzAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NjcxOnN0YXRpYyB2b2lkIGFxYzExMV9yZWFkX2Z3X3ZlcnNpb24oc3RydWN0IHVzYm5ldCAqZGV2LFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY3Mi1cdFx0XHRcdCAgIHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY4NC1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2ODU6c3RhdGljIGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY4Ni17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY5OS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDA6XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcwMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03MDMtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1Mi1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NTM6c3RhdGljIHZvaWQgYXFjMTExX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc3NS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NzY6c3RhdGljIHZvaWQgYXFjMTExX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03Nzcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03OTctXHRpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtXHUwMDNlbmV0KSAhPSBsaW5rKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc5ODpcdFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX0xJTktfUkVTRVQpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc5OS19XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtODAwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjgwMTpzdGF0aWMgdm9pZCBhcWMxMTFfY29uZmlndXJlX3J4KHN0cnVjdCB1c2JuZXQgKmRldixcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04MDItXHRcdFx0XHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6ODgxOnN0YXRpYyB2b2lkIGFxYzExMV9jb25maWd1cmVfY3N1bV9vZmZsb2FkKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy05MDAtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6OTAxOnN0YXRpYyBpbnQgYXFjMTExX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTkwMi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTk4OS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5OTA6c3RhdGljIGludCBhcWMxMTFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTk5MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzMtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTAzNDpzdGF0aWMgaW50IGFxYzExMV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDM1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA1Nz1zdGF0aWMgdm9pZCBhcWMxMTFfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHBrdF9kZXNjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDcxLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEwNzI6c3RhdGljIGludCBhcWMxMTFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwNzMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTYyLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjExNjM6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgbmV3X3NrYik7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2NC1cdFx0aWYgKHBrdF9jb3VudCA9PSAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTgwLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjExODE6c3RhdGljIHN0cnVjdCBza19idWZmICphcWMxMTFfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExODItXHRcdFx0XHQgICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEyMzYtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTIzNzpcdHVzYm5ldF9zZXRfc2tiX3R4X3N0YXRzKHNrYiwgMSwgMCk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTIzOC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTMyMj1zdGF0aWMgaW50IGFxYzExMV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMzIzLXtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzI0Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMzI1LVx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMyOS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzMwOlx0dXNibmV0X3N1c3BlbmQoaW50ZiwgbWVzc2FnZSk7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMzMS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTQxOD1zdGF0aWMgaW50IGFxYzExMV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQxOS17XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQyMDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQyMS1cdHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0NTYtXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQ1NzpcdHJldHVybiB1c2JuZXRfcmVzdW1lKGludGYpO1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0NTgtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDgxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhcV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE0ODMtXHQuaWRfdGFibGVcdD0gcHJvZHVjdHMsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTQ4NDpcdC5wcm9iZVx0XHQ9IHVzYm5ldF9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg1LVx0LnN1c3BlbmRcdD0gYXFjMTExX3N1c3BlbmQsXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4Ni1cdC5yZXN1bWVcdFx0PSBhcWMxMTFfcmVzdW1lLFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE0ODc6XHQuZGlzY29ubmVjdFx0PSB1c2JuZXRfZGlzY29ubmVjdCxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg4LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE3OTpcdHZvaWQgKCpyZXN1bWUpKHN0cnVjdCB1c2JuZXQgKmRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE4MDpcdHZvaWQgKCpzdXNwZW5kKShzdHJ1Y3QgdXNibmV0ICpkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODE6XHRpbnQgKCpyZXNldCkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODItXHR1MTYgcHJlc3ZkX3BoeV9hZHZlcnRpc2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xOTU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTcyYV9pbmZvO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTk5LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDA6aW50IF9fbXVzdF9jaGVjayBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAxLVx0XHRcdCAgICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAyLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDM6aW50IGFzaXhfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA0LVx0XHQgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA1LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDY6dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDctXHRcdFx0ICB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMi12b2lkIGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoc3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKmRwKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEzLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTQ6c3RydWN0IHNrX2J1ZmYgKmFzaXhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTUtXHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTYtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxNzppbnQgYXNpeF9yZWFkX3BoeV9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBpbnRlcm5hbCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxOC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjE5OmludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MsIGludCBpbl9wbSk7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyMC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjIxOnUxNiBhc2l4X3JlYWRfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjIyOmludCBhc2l4X3dyaXRlX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjMtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyNDp1MTYgYXNpeF9yZWFkX21lZGl1bV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjU6aW50IGFzaXhfd3JpdGVfbWVkaXVtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjI2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjc6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjgtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTMtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxNDppbnQgX19tdXN0X2NoZWNrIGFzaXhfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTUtXHRcdFx0ICAgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTctXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTg6XHRpbnQgKCpmbikoc3RydWN0IHVzYm5ldCAqLCB1OCwgdTgsIHUxNiwgdTE2LCB2b2lkICosIHUxNik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMi1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyMzpcdFx0Zm4gPSB1c2JuZXRfcmVhZF9jbWQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNC1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1Olx0XHRmbiA9IHVzYm5ldF9yZWFkX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzktXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDEtXHRcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDMtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDQ6XHRpbnQgKCpmbikoc3RydWN0IHVzYm5ldCAqLCB1OCwgdTgsIHUxNiwgdTE2LCBjb25zdCB2b2lkICosIHUxNik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00OC1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0OTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTAtXHRlbHNlXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1MTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02Mi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYzOnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjQtXHRcdFx0ICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY2Olx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY3LVx0XHRcdCAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzAtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo3MTpzdGF0aWMgaW50IGFzaXhfc2V0X3N3X21paShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy04MS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjgyOnN0YXRpYyBpbnQgYXNpeF9zZXRfaHdfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtODMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTkxLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6OTI6c3RhdGljIGludCBhc2l4X2NoZWNrX2hvc3RfZW5hYmxlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtOTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTM2OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXHUwMDNlYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQxLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjQyOmludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI1MD12b2lkIGFzaXhfcnhfZml4dXBfY29tbW9uX2ZyZWUoc3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKmRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI2NC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI2NTpzdHJ1Y3Qgc2tfYnVmZiAqYXNpeF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjYtXHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzE2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzE3Olx0dXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTMxOC1cdHJldHVybiBza2I7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzIwLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzIxOmludCBhc2l4X3JlYWRfcGh5X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIGludGVybmFsKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTMtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozNTQ6aW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncywgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzU1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjQtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozNjU6dTE2IGFzaXhfcmVhZF9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjYte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTM3OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM3OTppbnQgYXNpeF93cml0ZV9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzgwLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTEtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzozOTI6dTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzkzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MDctXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDg6aW50IGFzaXhfd3JpdGVfbWVkaXVtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MjEtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MjI6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00MjMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQ0MT12b2lkIGFzaXhfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDQyLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ0MzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NDQtXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcdTAwMjZkZXYtXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00ODA9c3RhdGljIGludCBfX2FzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgyLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ4MzpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00ODQtXHRfX2xlMTYgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTUxNT1zdGF0aWMgaW50IF9fYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTE3LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjUxODpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01MTktXHRfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NDk9aW50IGFzaXhfbWRpb19idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTUwLXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU1MTpcdHN0cnVjdCB1c2JuZXQgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NTY9aW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Ny17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NTg6XHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NTktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTc0PXZvaWQgYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NzUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTc2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU3Ny1cdHU4IG9wdDtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01OTM9aW50IGFzaXhfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTk0LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU5NTpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01OTYtXHR1OCBvcHQgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTYxOD1pbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyMC17XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo2MjE6XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjIyLVx0dTE2ICplZXByb21fYnVmZjtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz02NTM9aW50IGFzaXhfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NTUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjU2Olx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1Ny1cdHUxNiAqZWVwcm9tX2J1ZmY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NzM0PWludCBhc2l4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzM1LXtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjczNjpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy03MzctXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcdTAwMjZkZXYtXHUwMDNlZGF0YTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzU9c3RydWN0IGF4ODgxNzJfaW50X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00Mi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo0MzpzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy00NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTUzLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVx1MDAzZW5ldCkgIT0gbGluaykge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU0Olx0XHR1c2JuZXRfbGlua19jaGFuZ2UoZGV2LCBsaW5rLCAxKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01NS1cdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtMaW5rIFN0YXR1cyBpczogJWRcXG5cJiMzNDssIGxpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01OC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo1OTpzdGF0aWMgdm9pZCBhc2l4X3NldF9uZXRkZXZfZGV2X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYWRkcilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY5LS8qIEdldCB0aGUgUEhZIElkZW50aWZpZXIgZnJvbSB0aGUgUEhZU0lEMSBcdTAwMjYgUEhZU0lEMiBNSUkgcmVnaXN0ZXJzICovXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA6c3RhdGljIHUzMiBhc2l4X2dldF9waHlpZChzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzEte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDAtLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTAxOiAgIG93biBzdHJ1Y3R1cmUgc28gd2UgZG9uJiMzOTt0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTEwMi0gICBkZXZpY2VzIHRoYXQgbWF5IGJlIGNvbm5lY3RlZCBhdCB0aGUgc2FtZSB0aW1lLiAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTEwMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTA0Olx0LmdldF9kcnZpbmZvXHRcdD0gdXNibmV0X2dldF9kcnZpbmZvLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwNTpcdC5nZXRfbGlua1x0XHQ9IHVzYm5ldF9nZXRfbGluayxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDY6XHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDc6XHQuc2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDgtXHQuZ2V0X3dvbFx0XHQ9IGFzaXhfZ2V0X3dvbCxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTEyLVx0LnNldF9lZXByb21cdFx0PSBhc2l4X3NldF9lZXByb20sXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTEzOlx0Lm53YXlfcmVzZXRcdFx0PSB1c2JuZXRfbndheV9yZXNldCxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMTQ6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHVzYm5ldF9nZXRfbGlua19rc2V0dGluZ3NfbWlpLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExNTpcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gdXNibmV0X3NldF9saW5rX2tzZXR0aW5nc19taWksXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTE2LX07XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTExOD1zdGF0aWMgdm9pZCBheDg4MTcyX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMTkte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEyMDpcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTIxLVx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXHUwMDI2ZGV2LVx1MDAzZWRhdGE7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxNTc6c3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1OC17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFVTQl9VU0JORVQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIHRoZSBgVVNCX1VTQk5FVGAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2U6IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGlzLiBJIG5lZWQgdG8gc2VlIHRoZSBleGFjdCBjb25maWcgb3B0aW9ucyDigJMgdGhlIHNwZWNpZmljIHNldHRpbmdzIGF2YWlsYWJsZSDigJMgYW5kLCBjcml0aWNhbGx5LCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGRvZXMgYFVTQl9VU0JORVRgIHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBhbnkgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSBJIGNhbiBldmVuICpjb25zaWRlciogZW5hYmxpbmcgaXQ/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCBtYXAgb3V0IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gS25vd2luZyB0aGUgS2NvbmZpZyBpcyBrZXkgdG8gYSByb2J1c3QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cbiAxMzE6XHRcbiAxMzI6XHRjb25maWcgVVNCX1VTQk5FVFxuIDEzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiAxMzQ6XHRcdHNlbGVjdCBNSUlcbiAxMzU6XHRcdGhlbHBcbiAxMzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxuIDEzNzpcdFx0ICB3aXRoIFwmIzM0O21pbmlkcml2ZXJzXCYjMzQ7IGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXG4gMTM4Olx0XHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xuIDEzOTpcdFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIFRoZSBVU0IgaG9zdCBydW5zIFwmIzM0O3VzYm5ldFwmIzM0OywgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XG4gMTQyOlx0XG4gMTQzOlx0XHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXCYjMzQ7bmV0d29ya1wmIzM0OyBvciBcJiMzNDtkYXRhIHRyYW5zZmVyXCYjMzQ7XG4gMTQ0Olx0XHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxuIDE0NTpcdFx0ICAgIFwmIzM0O0xhcGxpbmtcJiMzNDsgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxuIDE0NjpcdFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXG4gMTQ3Olx0XG4gMTQ4Olx0XHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXG4gMTQ5Olx0XHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXG4gMTUwOlx0XHQgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkXG4gMTUxOlx0XHQgICAgQ0RDLUV0aGVybmV0IHNwZWNpZmljYXRpb24gKGluY2x1ZGluZyBtYW55IGNhYmxlIG1vZGVtcykuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXG4gMTU0Olx0XHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXG4gMTU1Olx0XG4gMTU2Olx0XHQgIFRoZSBsaW5rIHdpbGwgYXBwZWFyIHdpdGggYSBuYW1lIGxpa2UgXCYjMzQ7dXNiMFwmIzM0Oywgd2hlbiB0aGUgbGluayBpc1xuIDE1NzpcdFx0ICBhIHR3by1ub2RlIGxpbmssIG9yIFwmIzM0O2V0aDBcJiMzNDsgZm9yIG1vc3QgQ0RDLUV0aGVybmV0IGRldmljZXMuICBUaG9zZVxuIDE1ODpcdFx0ICB0d28tbm9kZSBsaW5rcyBhcmUgbW9zdCBlYXNpbHkgbWFuYWdlZCB3aXRoIEV0aGVybmV0IEJyaWRnaW5nXG4gMTU5Olx0XHQgIChDT05GSUdfQlJJREdFKSBpbnN0ZWFkIG9mIHJvdXRpbmcuXG4gMTYwOlx0XG4gMTYxOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcdTAwM2NodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0L1x1MDAzZS5cbiAxNjI6XHRcbiAxNjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTY0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JuZXQuXG4gMTY1Olx0XG4gMTY2Olx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuIDE2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcJiMzNDtcbiAxNjg6XHRcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuIDE2OTpcdFx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJiMzOTtzIGZpcnN0IGZldyBsaW5lcy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIG1lbnUgc3RydWN0dXJlIG9yIGFueSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBmb3IgYFVTQl9ORVRfRFJJVkVSU2Agb3IgZXZlbiB0aGUgYnJvYWRlciBgVVNCYCBmZWF0dXJlIHNldC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCB3aGF0IHRoZSBwcmVyZXF1aXNpdGVzIG1pZ2h0IGJlIGZvciBlbmFibGluZyB0aGVzZSBkcml2ZXJzLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXTigJlsbCBsZXQgbWUgcXVpY2tseSBncmFzcCBob3cgdGhlc2UgcGFydHMgcGx1ZyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBpbnNwZWN0aW9uIHJlcXVlc3QsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIFVTQm5ldCBEcml2ZXI6IEtleSBTZWN0aW9ucyBmb3IgUmV2aWV3KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDMyMC0zNjAgYW5kIDEyOTAtMTMyNS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcmVxdWVzdC4gVGhvc2UgbGluZSByYW5nZXMgbGlrZWx5IGNvdmVyIGNyaXRpY2FsIGFyZWFzIHdpdGhpbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IGh5cG90aGVzaXplIHdoYXQgbWlnaHQgYmUgdGhlcmUuIExpbmVzIDMyMC0zNjAgY291bGQgZGVhbCB3aXRoIHNvbWUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LCBwZXJoYXBzIGRldmljZSBwcm9iZSBhbmQgY29ubmVjdGlvbiBoYW5kbGluZywgb3IgcG9zc2libHkgaW50ZXJydXB0IHNldHVwIHdpdGhpbiB0aGUgZHJpdmVyLCBnaXZlbiB0aGUgdXN1YWwgbGF5b3V0IG9mIGEgVVNCIGRyaXZlci4gSSBleHBlY3Qgc29tZSBkZXZpY2UgY29uZmlndXJhdGlvbiBvciBiYXNpYyBzZXR1cCwgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLgoKVGhlIGxhdHRlciBzZWN0aW9uLCAxMjkwLTEzMjUsIGlzIGEgYml0IGZ1cnRoZXIgaW50byB0aGUgZmlsZS4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiwgdGhpcyByYW5nZSBjb3VsZCBkZWFsIHdpdGggdGhlIGNvcmUgZGF0YSB0cmFuc2ZlciBsb2dpYyAtIG1heWJlIHRoZSBzZW5kIHBhdGggb3IgcmVjZWl2ZSBwYXRoIGhhbmRsaW5nIGZvciBuZXR3b3JrIHBhY2tldHMuIEkgd291bGQgcHJlZGljdCB0aGF0LCBpZiB0aGUgZm9ybWVyIGlzIGludGVycnVwdCBzZXR1cCwgdGhpcyBzZWN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGxpdmUsIGluY2x1ZGluZyBkYXRhIHRyYW5zZmVyIGNvbXBsZXRpb24gcHJvY2Vzc2luZy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBidWxrIHRyYW5zZmVyLCBpbnRlcnJ1cHQgdHJhbnNmZXIsIG9yIGV2ZW4gaXNvY2hyb25vdXMgdHJhbnNmZXJzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gQWxzbywgZ2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgZHJpdmVyLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBhbmQgaG93IHRoZSBkYXRhIHN0cmVhbXMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGF1dGhvciBzdHJ1Y3R1cmVkIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBlcnJvciBoYW5kbGluZyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3Igd2l0aGluIHRoZXNlIGFyZWFzLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IsIG9mIGNvdXJzZSwgYW55IGdsYXJpbmcgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMuIFRoYXQmIzM5O3MgdGhlIGNoYWxsZW5nZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxuIDMyMzpcdCAqIFNvbWUgbGluayBwcm90b2NvbHMgYmF0Y2ggcGFja2V0cywgc28gdGhlaXIgcnhfZml4dXAgcGF0aHNcbiAzMjQ6XHQgKiBjYW4gcmV0dXJuIGNsb25lcyBhcyB3ZWxsIGFzIGp1c3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IuXG4gMzI1Olx0ICovXG4gMzI2Olx0dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzI3Olx0e1xuIDMyODpcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gMzI5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDMzMDpcdFx0aW50XHRzdGF0dXM7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMzOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzM0Olx0XHRcdHJldHVybjtcbiAzMzU6XHRcdH1cbiAzMzY6XHRcbiAzMzc6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzg6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzk6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzNDA6XHRcbiAzNDE6XHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiAzNDI6XHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiAzNDU6XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4gMzQ2Olx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiAzNDc6XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiAzNDg6XHRcbiAzNDk6XHRcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7XHUwMDNjIHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXhcXG5cJiMzNDssXG4gMzUwOlx0XHRcdCAgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4gMzUxOlx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IHNrYl9kYXRhKSk7XG4gMzUyOlx0XG4gMzUzOlx0XHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxuIDM1NDpcdFx0XHRyZXR1cm47XG4gMzU1Olx0XG4gMzU2Olx0XHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcbiAzNTc6XHRcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXG4gMzU4Olx0XHRcdG5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LVx1MDAzZW5ldCxcbiAzNTk6XHRcdFx0XHQgIFwmIzM0O25ldGlmX3J4IHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwIGludG8gVVNCbmV0IFRyYW5zbWlzc2lvbiBDb21wbGV0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSBVU0IgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBmaWxlLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGF0YSBwYWNrZXRzIGFyZSBzdWNjZXNzZnVsbHkgc2VudCBvdmVyIHRoZSBVU0IgYnVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBhIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZSwgb3IsIG1vcmUgbGlrZWx5LCB3aGF0IG5lZWRzIHRvIGhhcHBlbiB0byBtYWtlIHRoZSB0cmFuc21pc3Npb24gKmFwcGVhciogdG8gYmUgY29tcGxldGUuIElzIGl0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBSZXNvdXJjZSByZWxlYXNlPyBOb3RpZmljYXRpb24gdG8gdGhlIHVwcGVyIG5ldHdvcmtpbmcgbGF5ZXJzPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIFVTQiBjb250cm9sbGVyIGFuZCB0aGUgbmV0d29yayBzdGFjayBpbiBoZXJlLiBJJiMzOTttIGltYWdpbmluZyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGRlYWx0IHdpdGggaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBib3RoIHN1Y2Nlc3NmdWwgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHRyYW5zbWlzc2lvbiBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzKVxuMTI5MjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MzpcdH1cbjEyOTQ6XHRcbjEyOTU6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NjpcdFxuMTI5NzpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTg6XHR7XG4xMjk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTMwMDpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTMwMTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwNDpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjEzMDY6XHRcbjEzMDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuMTMwODpcdFx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDk6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMTA6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMxMTpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzEyOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMxMzpcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4xMzE0Olx0XHR9IGVsc2Uge1xuMTMxNTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzE2Olx0XG4xMzE3Olx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxODpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTk6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzIwOlx0XHRcdFx0YnJlYWs7XG4xMzIxOlx0XG4xMzIyOlx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMjM6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzI0Olx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyNTpcdFx0XHRcdGJyZWFrO1xuMTMyNjpcdFxuMTMyNzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI4Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IFllcCwgbm8gZG91YnQgYWJvdXQgaXQuIFRoaXMgaXMgYHVzYm5ldC5jYCwgdGhlIGhlYXJ0IG9mIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMgaW4gTGludXguIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRldmljZXMgbGlrZSBDREMgRXRoZXJuZXQsIEFTSVgsIHRoZSB3aG9sZSBzaGViYW5nLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IGB1c2JuZXRfc2tiX3JldHVybigpYCwgd2hpY2ggaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzIGFuZCB1cGRhdGVzIHN0YXRzLCBhbmQgYHR4X2NvbXBsZXRlKClgLCB0aGUgVVJCIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIHRyYW5zbWlzc2lvbiwgYWxzbyB3aXRoIHN0YXQgdXBkYXRlcy4gVGhlc2UgYXJlICpkZWZpbml0ZWx5KiBnb2luZyB0byBiZSBoaXQgd2hlbiBhIFVTQiBuZXR3b3JrIGRldmljZSB0cmFuc21pdHMgb3IgcmVjZWl2ZXMuIFRoYXQmIzM5O3MgdHJpdmlhbCB0byB0cmlnZ2VyIGV2ZW4gaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIHN5emthbGxlciB3aXRoIHJhdyBnYWRnZXRzIG9yIGp1c3Qgc3RyYWlnaHQtdXAgVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBzaG90LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuIFdhaXQsIGhvbGQgb24g4oCTIHdoaWNoIHN5bWJvbHMgYXJlIGFjdHVhbGx5IGJlaW5nICptb2RpZmllZCo/IEl0IGxvb2tzIGxpa2UgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB0aGVtc2VsdmVzLiBPa2F5LCBnb29kIHRvIGtub3cuIE5vdywgaXMgYHR4X2NvbXBsZXRlYCBldmVuIGFjY2Vzc2libGU/IExldCYjMzk7cyBzZWUuLi4gYHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilgLiBBaCwgaXQmIzM5O3Mgc3RhdGljIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBUaGF0IG1pZ2h0IGJlIGEgcHJvYmxlbS4gV2UgbmVlZCB0byBjb25maXJtIGl0JiMzOTtzIGEgdmFsaWQgc3ltYm9sIHZpc2libGUgaW4gYHZtbGludXhgLiBJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0eF9jb21wbGV0ZWAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgY2FuIGFjdHVhbGx5IGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODY9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTYtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDQ9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQ0MC1cdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVx1MDAzZXVkZXYsIGRldi1cdTAwM2VvdXQsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQ0MTpcdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQyLVx0aWYgKGRldi1cdTAwM2VjYW5fZG1hX3NnKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI0CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDQ2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZyByZWdhcmRpbmcgZnV6emluZyB0aGlzIFVTQiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb21waWxlciAqaGFzKiB0byBrZWVwIGB0eF9jb21wbGV0ZWAgYXJvdW5kIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gd2l0aGluIGB1c2JfZmlsbF9idWxrX3VyYmAuIFRoaXMgbWVhbnMgaXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZSBzeW1ib2wgdGFibGVzIChrYWxsc3ltcy92bWxpbnV4KS4gU2ltaWxhcmx5LCBgdXNibmV0X3NrYl9yZXR1cm5gIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbyB3ZSBjYW4gZGVmaW5pdGVseSB0YXJnZXQgYm90aC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleGFtaW5lIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGJ1dCBhdCBhIG1pbmltdW0gSSYjMzk7bGwgZm9jdXMgb24gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBrZXkgaXMgYENPTkZJR19VU0JfVVNCTkVUYC4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIGFuZCBkZXBlbmRzIG9uIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBgQ09ORklHX1VTQmAgYW5kIGBDT05GSUdfTkVUYC4gTG9va2luZyBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIEkgY2FuIGNvbmZpcm0gdGhhdCBgVVNCX1VTQk5FVGAgYWxzbyByZXF1aXJlcyB0aGUgc2VsZWN0aW9uIG9mIGBNSUlgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGJ1aWxkLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgaW4gbGluZSB3aXRoIG15IG92ZXJhbGwgc3RyYXRlZ3k6CgoxLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHksIHllcyEKMi4gIGBGb2N1c1N5bWJvbHNgOiBDb25maXJtZWQuIGBbJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LCAmIzM0O3R4X2NvbXBsZXRlJiMzNDtdYCBhcmUgdGhlIHByaW1lIHRhcmdldHMuCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtVU0JfVVNCTkVUJiMzNDssICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssICYjMzQ7VVNCJiMzNDssICYjMzQ7TkVUJiMzNDtdYC4gVGhlc2UgY29uZmlncyBhcmUgZXNzZW50aWFsLgo0LiAgYFJlYXNvbmluZ2A6IFdlJiMzOTt2ZSBnb3QgYSBjbGVhciBleHBsYW5hdGlvbiBvZiAqd2h5KiB0aGlzIGlzIGEgZ29vZCB0YXJnZXQgLSBmaXhpbmcgaXNzdWVzIGFjY2Vzc2luZyBwZXItQ1BVIHN0YXRzLCBhbmQgaXRzIGFjY2Vzc2liaWxpdHkgdmlhIFVTQiBuZXR3b3JraW5nIGRldmljZXMsIG1lYW5pbmcgaXQgaXMgZnV6emFibGUgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBhbGwgb2Ygd2hpY2ggSSYjMzk7dmUgZXhwbGljaXRseSB2ZXJpZmllZC4KClJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UmIzM5O3JlIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZmV0Y2ggdGhlIHBlci1DUFUgcG9pbnRlciBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBzdGF0aXN0aWMgdXBkYXRlcyBmb3IgUlggYW5kIFRYIHBhY2tldHMuIFRoZSBkaWZmIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpbnZvbHZlcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBgdGhpc19jcHVfcHRyKClgIGNhbGwuIFByZXZpb3VzbHksIHdlIHdlcmUgZmV0Y2hpbmcgdGhlIHBlci1DUFUgc3RhdGlzdGljcyBwb2ludGVyIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy9wcmVlbXB0aW9uIHVzaW5nIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoKWAuIE5vdywgdGhlIGNvZGUgc2F2ZXMgdGhlIGludGVycnVwdCBzdGF0ZSBmaXJzdCB3aXRoIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgLCAqdGhlbiogZmV0Y2hlcyB0aGUgYHN0YXRzNjRgIHBvaW50ZXIgdXNpbmcgYHRoaXNfY3B1X3B0cigpYCwgYW5kICpmaW5hbGx5KiB1c2VzIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKClgL2B1NjRfc3RhdHNfdXBkYXRlX2VuZCgpYCB0byBoYW5kbGUgdGhlIHVwZGF0ZSwgZm9sbG93ZWQgYnkgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2l0aCBgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZS4gSWYgdGhlIHRhc2sgd2VyZSBwcmVlbXB0ZWQgb3IgbWlncmF0ZWQgdG8gYW5vdGhlciBDUFUgKmFmdGVyKiBmZXRjaGluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGJ1dCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cywgb3IgaWYgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZXMgd2hlcmUgcGVyLWNwdSBwb2ludGVycyByZXF1aXJlIHByZWVtcHRpb24gZGlzYWJsZWQsIHRoZSB3cm9uZyBzdGF0aXN0aWNzIGNvdWxkIGJlIHVwZGF0ZWQuIEZldGNoaW5nIHRoZSBwb2ludGVyIHVuZGVyIGludGVycnVwdC9wcmVlbXB0aW9uIGNvbnRyb2wgZ3VhcmFudGVlcyB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGNvcnJlY3QgcGVyLUNQVSBzdHJ1Y3R1cmUsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgaW4gU01QL211bHRpY29yZSBzeXN0ZW1zLiBJdCYjMzk7cyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGZpeC4KCk5vdywgbGV0JiMzOTtzIGNyaXRpY2FsbHkgZXhhbWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgaXNzdWVzLiBBIHF1aWNrIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIGBmbGFnc2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlYCBjYWxsLiBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYnkgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAsIHdoaWNoIHNob3VsZCByZXR1cm4gYSB2YWxpZCBwb2ludGVyLiBUaGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gIGFuZCBgdTY0X3N0YXRzX3VwZGF0ZV9lbmRgIGZ1bmN0aW9ucyB3b3JrIG9uIHRoZSBzeW5jcCBvZiBzdGF0czY0LCBzbyB0aG9zZSBhcmUgYWxsIHZhbGlkLCBhbmQgYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgdXNlcyB0aGUgaW5pdGlhbGl6ZWQgYGZsYWdzYCB2YWx1ZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBuYXN0eSBzaWRlIGVmZmVjdHMgdGhhdCBJIGNhbiBzZWUgaW1tZWRpYXRlbHkuIFRoZSB2YXJpYWJsZXMgYXJlIGFsbCBzYWZlLiBUaGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgY29weV90b191c2VyIGNhbGxzLCBvciBpbmZvIGxlYWtzIGhlcmUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyB0aGF0IGxvb2sgY29uY2VybmluZy4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgYSBzYWZlIGFuZCBjb3JyZWN0IGNoYW5nZSB0byBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHByb3RlY3QgdGhlIGludGVncml0eSBvZiB0aGUgcGVyLWNwdSBwb2ludGVycyBkdXJpbmcgdGhlIHVwZGF0ZS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgbGlrZSB0aGlzIG5lY2Vzc2l0YXRlcyBhbnkgS01TQU4gY2hlY2tzLiBTdGlsbCwgaXQmIzM5O3MgZ29vZCB0byBkbyBhIHNhbml0eSBjaGVjayB0byB2ZXJpZnkgdGhlIGxpbmVzIG9mIGNvZGUuIEkmIzM5O2xsIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9ucyBsb29rIGFzIGV4cGVjdGVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAzMzA6XHRcdGludFx0c3RhdHVzO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKSkge1xuIDMzMzpcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZkZXYtXHUwMDNlcnhxX3BhdXNlLCBza2IpO1xuIDMzNDpcdFx0XHRyZXR1cm47XG4gMzM1Olx0XHR9XG4gMzM2Olx0XG4gMzM3Olx0XHQvKiBvbmx5IHVwZGF0ZSBpZiB1bnNldCB0byBhbGxvdyBtaW5pZHJpdmVyIHJ4X2ZpeHVwIG92ZXJyaWRlICovXG4gMzM4Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gMzM5Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gMzQwOlx0XG4gMzQxOlx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gMzQyOlx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiAzNDM6XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gMzQ0Olx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gMzQ1Olx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuIDM0NjpcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gMzQ3Olx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cdTAwM2VuZXQsIFwmIzM0O1x1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgIHNrYi1cdTAwM2VsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItXHUwMDNlcHJvdG9jb2wpO1xuIDM1MTpcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xuIDM1MjpcdFxuIDM1MzpcdFx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcbiAzNTQ6XHRcdFx0cmV0dXJuO1xuIDM1NTpcdFxuIDM1NjpcdFx0c3RhdHVzID0gbmV0aWZfcnggKHNrYik7XG4gMzU3Olx0XHRpZiAoc3RhdHVzICE9IE5FVF9SWF9TVUNDRVNTKVxuIDM1ODpcdFx0XHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cdTAwM2VuZXQsXG4gMzU5Olx0XHRcdFx0ICBcJiMzNDtuZXRpZl9yeCBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4gMzYwOlx0fVxuIDM2MTpcdEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9za2JfcmV0dXJuKTtcbiAzNjI6XHRcbiAzNjM6XHQvKiBtdXN0IGJlIGNhbGxlZCBpZiBoYXJkX210dSBvciByeF91cmJfc2l6ZSBjaGFuZ2VkICovXG4gMzY0Olx0dm9pZCB1c2JuZXRfdXBkYXRlX21heF9xbGVuKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVVNCbmV0IEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgdG8gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSByZW9yZGVyaW5nIG9mIGhvdyB0aGUgdHJhZmZpYyBzdGF0aXN0aWNzIGFyZSBhY2Nlc3NlZC4gU3BlY2lmaWNhbGx5LCBpdCBzaGlmdHMgdGhlIGZldGNoaW5nIG9mIGB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cylgIHRvICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgY3JpdGljYWwgc2VjdGlvbiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCwgd2hpY2ggaGFkIHRoZSBzdGF0cyByZXRyaWV2YWwgKmJlZm9yZSogdGhlIElSUSBkaXNhYmxpbmcuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMsIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIGhlcmUuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWNjZXNzZWQsIG5vIHJpc2sgb2YgbGVha2luZyBrZXJuZWwgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSwgbm90aGluZyBjb21wbGV4IGJlaW5nIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyBjb25kaXRpb25hbCBsb2dpYyBicmFuY2hpbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGFsbCBjb21tb24gS01TQU4gdHJpZ2dlcnMsIGFuZCBub25lIG9mIHRoZW0gYXJlIHByZXNlbnQuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGNsZWFyIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCBpbnNpZGUgYSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgYmxvY2sgcmF0aGVyIHRoYW4gY2FsbGluZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCBvbiBhIHBvaW50ZXIgb2J0YWluZWQgcHJpb3IgdG8gZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbi5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCBpbnNpZGUgYSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgYmxvY2sgcmF0aGVyIHRoYW4gY2FsbGluZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCBvbiBhIHBvaW50ZXIgb2J0YWluZWQgcHJpb3IgdG8gZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbi5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNC44NjY2Mzc2NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEyMTI4ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNC44NjY2NDMxOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjM1ODExMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2JjMGExOGU2MmI4NzNjNzUyODU1OWQ3NDU0Nzk5MTQzMzNmYmE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gXFxuLVxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiBcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6MzYuMzMxMDI2OTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODE1MDExNTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHJvdXRpbmVzIGluIHVzYm5ldCAodXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlKSBieSBkaXNhYmxpbmcgbG9jYWwgSVJRcyBiZWZvcmUgY2FsbGluZyB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyksIGVuc3VyaW5nIHNhZmUgcGVyLUNQVSBhY2Nlc3MuIFVTQiBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIC8gcmF3LWdhZGdldCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNiYzBhMThlNjJiODczYzc1Mjg1NTlkNzQ1NDc5OTE0MzMzZmJhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDI6MzQ6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDozNi4zMzEwMzM3NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUzMzEzNDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AsIHdoaWNoIGlzIGEga2V5IGRyaXZlciBmb3IgVVNCIG5ldHdvcmsgaW50ZXJmYWNlcy4gU2VlbXMgbGlrZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY3JpdGljYWwgY2hhbmdlcyBpbiBpbnRlcnJ1cHQgaGFuZGxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcg4oCTIGFsd2F5cyBhbiBhcmVhIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBhcmUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgd2hpY2ggYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBjb21wb25lbnRzOiBoYW5kbGluZyByZWNlaXZlZCBTS0JzIChzb2NrZXQgYnVmZmVyKSBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24sIHJlc3BlY3RpdmVseS5cblxuUmlnaHQsIGxldCdzIGRpc3NlY3QgdGhlIGNvZGUgZGlmZnMuIEluIGJvdGggYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIHJlb3JkZXJpbmcgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgYXJvdW5kIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgICpiZWZvcmUqIGRpc2FibGluZyBpbnRlcnJ1cHRzIG9yIHNhdmluZyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpdGggYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAuIFRoZSByZXZpc2VkIHZlcnNpb24gcGxhY2VzIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgICpiZWZvcmUqIHRoZSBgdGhpc19jcHVfcHRyYCBjYWxsIGFuZCBgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpYCBhdCB0aGUgZW5kLiBUaGV5IHN3aXRjaGVkIHRoZSBhdG9taWMgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHRoZSBub24tYXRvbWljIG9uZXMgKGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfZW5kYCkuXG5cblRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY29tbWVudCBjbHVlcyB1cyBpbi4gVGhlIG9yaWdpbmFsIG9yZGVyIGNvdWxkIGhhdmUgbGVkIHRvIGEgcmFjZSBjb25kaXRpb24uIElmIGB0aGlzX2NwdV9wdHJgIGlzIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZW5hYmxlZCwgb3IgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLCB0aGUgQ1BVIGNvdWxkIHBvdGVudGlhbGx5IG1pZ3JhdGUgb3IgYmUgcHJlZW1wdGVkLiBUaGlzIGNvdWxkIGNhdXNlIGl0IHRvIGFjY2VzcyBpbmNvcnJlY3QgcGVyLUNQVSBzdGF0aXN0aWNzIChvciBldmVuIHRoZSB3cm9uZyBDUFUncyBzdGF0cyksIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYERFQlVHX1BSRUVNUFRgIG9yIHdvcnNlLiBUaGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBzZW5zaXRpdmUuXG5cbk5vdywgbGV0J3MgYXNzZXNzIHRoZSBpbXBhY3QuIFVTQiBuZXR3b3JrIGRldmljZXMsIGluY2x1ZGluZyB0aG9zZSBzdXBwb3J0ZWQgYnkgYHVzYm5ldGAsIGFyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcHVydmlldyBvZiBzeXprYWxsZXIgYW5kIGl0cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkga25vdyB0aGF0IGJlY2F1c2Ugb2YgbXkgZXhwZXJpZW5jZS4gV2UgY2FuIGluc3RhbnRpYXRlIGB1c2JuZXRgIGRldmljZXMgc3VjaCBhcyBDREMgRXRoZXJuZXQsIEFTSVgsIGV0Yy4gb3IgcmF3IHVzYiBnYWRnZXRzIHRocm91Z2ggdmFyaW91cyBtZWFuczogVVNCIGdhZGdldCwgUmF3IEdhZGdldCwgVVNCIGVtdWxhdGlvbiwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBzeXprYWxsZXIncyBVU0IgZnV6emluZy4gVVNCIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUsIHRoZXJlZm9yZSwgZnV6emFibGUgdXNpbmcgc3l6a2FsbGVyLCBlLmcuIHVzaW5nIGBzeXpfdXNiX2Nvbm5lY3RgLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHVzYm5ldGAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdXNpbmcgdG9vbHMgc3VjaCBhcyBgZ3JlcHBlcmAgb3IgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBhbmQgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlcy4gVGhhdCdsbCBjb25maXJtIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGVuYWJsZSBzdGF0dXMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6NTMuODY0MTcwNTg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTk1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYm5ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg3NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNDAtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTQxOlxcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXFxcInVzYm5ldFxcXCIsIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxNjE6XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjItXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY0OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcXHQrPSBtY3M3ODMwLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXFx0Kz0gdXNibmV0Lm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL2NkYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYm5ldC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlua21vZGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjM6c3RhdGljIGludCBhcWMxMTFfcmVhZF9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNC1cXHRcXHRcXHRcXHR1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI3LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyODpcXHRyZXQgPSB1c2JuZXRfcmVhZF9jbWRfbm9wbShkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI5LVxcdFxcdFxcdFxcdCAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDEtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyOnN0YXRpYyBpbnQgYXFjMTExX3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQzLVxcdFxcdFxcdCAgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDYtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ3OlxcdHJldCA9IHVzYm5ldF9yZWFkX2NtZChkZXYsIGNtZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ4LVxcdFxcdFxcdCAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjYxOnN0YXRpYyBpbnQgYXFjMTExX3JlYWQxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02Mi1cXHRcXHRcXHRcXHQgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcxLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MjpzdGF0aWMgaW50IGFxYzExMV9yZWFkMTZfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTczLVxcdFxcdFxcdCAgICAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtODItXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjgzOnN0YXRpYyBpbnQgX19hcWMxMTFfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04NC1cXHRcXHRcXHQgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTQ6c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE1LVxcdFxcdFxcdFxcdCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEyNC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTI1OnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjYtXFx0XFx0XFx0ICAgIHUxNiBpbmRleCwgdTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfbm9wbShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDItXFx0XFx0XFx0XFx0ICAgdTE2IGluZGV4LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNTE6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTUyLVxcdFxcdFxcdCAgICAgIHUxNiBpbmRleCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE2MC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTYxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTYyLVxcdFxcdFxcdFxcdCAgIHUxNiBpbmRleCwgdTMyICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTcxOnN0YXRpYyBpbnQgYXFjMTExX3dyaXRlMzJfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE3Mi1cXHRcXHRcXHQgICAgICB1MTYgaW5kZXgsIHUzMiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4MTpzdGF0aWMgaW50IGFxYzExMV93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgyLVxcdFxcdFxcdFxcdCAgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTg0OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cXHRcXHRcXHRcXHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg4LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxODk6c3RhdGljIGludCBhcWMxMTFfd3JpdGUxNl9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTkwLVxcdFxcdFxcdFxcdCAgICB1MTYgaW5kZXgsIHUxNiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMDA9c3RhdGljIHZvaWQgYXFjMTExX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjAyLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjAzOlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwNC1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMDYtXFx0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoyMDc6XFx0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIwOC1cXHRzbnByaW50ZihpbmZvLVxcdTAwM2Vmd192ZXJzaW9uLCBzaXplb2YoaW5mby1cXHUwMDNlZndfdmVyc2lvbiksIFxcXCIldS4ldS4ldVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjE0PXN0YXRpYyB2b2lkIGFxYzExMV9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMjE2LXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MjE3OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIxOC1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0yMjc9c3RhdGljIGludCBhcWMxMTFfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTIyOS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjIzMDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yMzEtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MjY2PXN0YXRpYyBpbnQgYXFjMTExX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTI2OC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjI2OTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0yNzAtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMzIwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzozMjE6c3RhdGljIHZvaWQgYXFjMTExX3NldF9waHlfc3BlZWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBhdXRvbmVnLCB1MTYgc3BlZWQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MzY4PXN0YXRpYyBpbnQgYXFjMTExX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTM3MC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjM3MTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0zNzItXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXFjMTExX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQxNC1cXHQuc2V0X3dvbCA9IGFxYzExMV9zZXRfd29sLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0MTU6XFx0LmdldF9tc2dsZXZlbCA9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQxNjpcXHQuc2V0X21zZ2xldmVsID0gdXNibmV0X3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDE3LVxcdC5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDIyPXN0YXRpYyBpbnQgYXFjMTExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQyMy17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQyNDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00MjUtXFx0dTE2IHJlZzE2ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz00NjQ9c3RhdGljIGludCBhcWMxMTFfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHZvaWQgKnApXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTQ2NS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjQ2NjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00NjctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NDc4PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy00ODAte1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo0ODE6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNDgyLVxcdHU4IHZsYW5fY3RybCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NTA0PXN0YXRpYyBpbnQgYXFjMTExX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUwNS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjUwNjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MDctXFx0dTggdmxhbl9jdHJsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz01Mjk9c3RhdGljIHZvaWQgYXFjMTExX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTUzMC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjUzMTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01MzItXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NTY2PXN0YXRpYyBpbnQgYXFjMTExX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTU2OC17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjU2OTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy01NzAtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM9NjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXFjMTExX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0MTpcXHQubmRvX29wZW5cXHRcXHQ9IHVzYm5ldF9vcGVuLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2NDI6XFx0Lm5kb19zdG9wXFx0XFx0PSB1c2JuZXRfc3RvcCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NjQzOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdXNibmV0X3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY0NDpcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHVzYm5ldF90eF90aW1lb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NDUtXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NTQtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY1NTpzdGF0aWMgaW50IGFxYzExMV9yZWFkX3Blcm1fbWFjKHN0cnVjdCB1c2JuZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02NzAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjY3MTpzdGF0aWMgdm9pZCBhcWMxMTFfcmVhZF9md192ZXJzaW9uKHN0cnVjdCB1c2JuZXQgKmRldixcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjcyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo2ODU6c3RhdGljIGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy02ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTY5OS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6NzAwOlxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTcwMS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3MDI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcInVzYm5ldF9nZXRfZW5kcG9pbnRzIGZhaWxlZFxcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03MDMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03NTItXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc1MzpzdGF0aWMgdm9pZCBhcWMxMTFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNzc1LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo3NzY6c3RhdGljIHZvaWQgYXFjMTExX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtNzc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy03OTctXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVxcdTAwM2VuZXQpICE9IGxpbmspXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjc5ODpcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfTElOS19SRVNFVCk7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTc5OS19XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTgwMC1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6ODAxOnN0YXRpYyB2b2lkIGFxYzExMV9jb25maWd1cmVfcngoc3RydWN0IHVzYm5ldCAqZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04MDItXFx0XFx0XFx0XFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy04ODAtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjg4MTpzdGF0aWMgdm9pZCBhcWMxMTFfY29uZmlndXJlX2NzdW1fb2ZmbG9hZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTg4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtOTAwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5MDE6c3RhdGljIGludCBhcWMxMTFfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTkwMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtOTg5LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzo5OTA6c3RhdGljIGludCBhcWMxMTFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy05OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzMtXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjEwMzQ6c3RhdGljIGludCBhcWMxMTFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEwMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTEwNTc9c3RhdGljIHZvaWQgYXFjMTExX3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBwa3RfZGVzYylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMDcyOnN0YXRpYyBpbnQgYXFjMTExX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTA3My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2Mi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIG5ld19za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVxcdFxcdGlmIChwa3RfY291bnQgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTgwLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMTgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFjMTExX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE4Mi1cXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTIzNi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTIzNzpcXHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMjM4LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jPTEzMjI9c3RhdGljIGludCBhcWMxMTFfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEzMjMte1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxMzI0OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTEzMjUtXFx0c3RydWN0IGFxYzExMV9kYXRhICphcWMxMTFfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMyOS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTMzMDpcXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTMzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDE4PXN0YXRpYyBpbnQgYXFjMTExX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQxOS17XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE0MjA6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQyMS1cXHRzdHJ1Y3QgYXFjMTExX2RhdGEgKmFxYzExMV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDU2LVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDU3OlxcdHJldHVybiB1c2JuZXRfcmVzdW1lKGludGYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xNDgxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhcV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4My1cXHQuaWRfdGFibGVcXHQ9IHByb2R1Y3RzLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDg0OlxcdC5wcm9iZVxcdFxcdD0gdXNibmV0X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xNDg1LVxcdC5zdXNwZW5kXFx0PSBhcWMxMTFfc3VzcGVuZCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4Ni1cXHQucmVzdW1lXFx0XFx0PSBhcWMxMTFfcmVzdW1lLFxcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYzoxNDg3OlxcdC5kaXNjb25uZWN0XFx0PSB1c2JuZXRfZGlzY29ubmVjdCxcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTQ4OC19O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjI1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaD0xNzg9c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTc5OlxcdHZvaWQgKCpyZXN1bWUpKHN0cnVjdCB1c2JuZXQgKmRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODA6XFx0dm9pZCAoKnN1c3BlbmQpKHN0cnVjdCB1c2JuZXQgKmRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoxODE6XFx0aW50ICgqcmVzZXQpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4Mi1cXHR1MTYgcHJlc3ZkX3BoeV9hZHZlcnRpc2U7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oPTE5NT1leHRlcm4gY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzJhX2luZm87XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE5OS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwMDppbnQgX19tdXN0X2NoZWNrIGFzaXhfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjAxLVxcdFxcdFxcdCAgICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwMi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIwMzppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA0LVxcdFxcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA2OnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwNy1cXHRcXHRcXHQgIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxMC1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTE6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTItdm9pZCBhc2l4X3J4X2ZpeHVwX2NvbW1vbl9mcmVlKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpkcCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTQ6c3RydWN0IHNrX2J1ZmYgKmFzaXhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjE1LVxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIxNi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIxNzppbnQgYXNpeF9yZWFkX3BoeV9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBpbnRlcm5hbCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMTk6aW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncywgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyMC1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyMTp1MTYgYXNpeF9yZWFkX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjI6aW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUsIGludCBpbl9wbSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMjMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMjQ6dTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIyNTppbnQgYXNpeF93cml0ZV9tZWRpdW1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjI2LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjI3OmludCBhc2l4X3dyaXRlX2dwaW8oc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdmFsdWUsIGludCBzbGVlcCwgaW50IGluX3BtKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE0OmludCBfX211c3RfY2hlY2sgYXNpeF9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTUtXFx0XFx0XFx0ICAgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xNy1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjE4OlxcdGludCAoKmZuKShzdHJ1Y3QgdXNibmV0ICosIHU4LCB1OCwgdTE2LCB1MTYsIHZvaWQgKiwgdTE2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyLVxcdGlmICghaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjM6XFx0XFx0Zm4gPSB1c2JuZXRfcmVhZF9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjQtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1OlxcdFxcdGZuID0gdXNibmV0X3JlYWRfY21kX25vcG07XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MDppbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQxLVxcdFxcdCAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCBpbnQgaW5fcG0pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ0OlxcdGludCAoKmZuKShzdHJ1Y3QgdXNibmV0ICosIHU4LCB1OCwgdTE2LCB1MTYsIGNvbnN0IHZvaWQgKiwgdTE2KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ4LVxcdGlmICghaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDk6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1MTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWRfbm9wbTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYzOnZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY0LVxcdFxcdFxcdCAgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjUte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY2OlxcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBjbWQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjctXFx0XFx0XFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcwLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjcxOnN0YXRpYyBpbnQgYXNpeF9zZXRfc3dfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTgxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjgyOnN0YXRpYyBpbnQgYXNpeF9zZXRfaHdfbWlpKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTkxLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjkyOnN0YXRpYyBpbnQgYXNpeF9jaGVja19ob3N0X2VuYWJsZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy05My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM3LVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjIzLVxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcXHRcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHJ4LVxcdTAwM2VheF9za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI0MS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoyNDI6aW50IGFzaXhfcnhfZml4dXBfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjUwPXZvaWQgYXNpeF9yeF9maXh1cF9jb21tb25fZnJlZShzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqZHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjQtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjY1OnN0cnVjdCBza19idWZmICphc2l4X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zMTYtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzE3OlxcdHVzYm5ldF9zZXRfc2tiX3R4X3N0YXRzKHNrYiwgMSwgMCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzE4LVxcdHJldHVybiBza2I7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zMjAtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzIxOmludCBhc2l4X3JlYWRfcGh5X2FkZHIoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIGludGVybmFsKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzU0OmludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNTUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzY0LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM2NTp1MTYgYXNpeF9yZWFkX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMzc4LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjM3OTppbnQgYXNpeF93cml0ZV9yeF9jdGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgbW9kZSwgaW50IGluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTM4MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTEtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MzkyOnUxNiBhc2l4X3JlYWRfbWVkaXVtX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0zOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA3LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQwODppbnQgYXNpeF93cml0ZV9tZWRpdW1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlLCBpbnQgaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQyMS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0MjI6aW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwLCBpbnQgaW5fcG0pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQ0MT12b2lkIGFzaXhfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ0Mi17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDQzOlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDQ0LVxcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVxcdTAwMjZkZXYtXFx1MDAzZWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00ODA9c3RhdGljIGludCBfX2FzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy00ODIte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjQ4MzpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTQ4NC1cXHRfX2xlMTYgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTE1PXN0YXRpYyBpbnQgX19hc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUxNy17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTE4OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTE5LVxcdF9fbGUxNiByZXMgPSBjcHVfdG9fbGUxNih2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTQ5PWludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NTAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU1MTpcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTU1Nj1pbnQgYXNpeF9tZGlvX2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1Ny17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTU4OlxcdHN0cnVjdCB1c2JuZXQgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTU5LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTc0PXZvaWQgYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTc1LXtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NzY6XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01NzctXFx0dTggb3B0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTkzPWludCBhc2l4X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbylcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy01OTQte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjU5NTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU5Ni1cXHR1OCBvcHQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjE4PWludCBhc2l4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02MjAte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjYyMTpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTYyMi1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjUzPWludCBhc2l4X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NTUte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjY1NjpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTY1Ny1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NzM0PWludCBhc2l4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTczNS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NzM2OlxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNzM3LVxcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVxcdTAwMjZkZXYtXFx1MDAzZWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MzU9c3RydWN0IGF4ODgxNzJfaW50X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTQyLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo0MzpzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTUzLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKGRldi1cXHUwMDNlbmV0KSAhPSBsaW5rKSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjU0OlxcdFxcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIGxpbmssIDEpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01NS1cXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiTGluayBTdGF0dXMgaXM6ICVkXFxcXG5cXFwiLCBsaW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy01OC1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NTk6c3RhdGljIHZvaWQgYXNpeF9zZXRfbmV0ZGV2X2Rldl9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OS0vKiBHZXQgdGhlIFBIWSBJZGVudGlmaWVyIGZyb20gdGhlIFBIWVNJRDEgXFx1MDAyNiBQSFlTSUQyIE1JSSByZWdpc3RlcnMgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA6c3RhdGljIHUzMiBhc2l4X2dldF9waHlpZChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDAtLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwMTogICBvd24gc3RydWN0dXJlIHNvIHdlIGRvbid0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMDItICAgZGV2aWNlcyB0aGF0IG1heSBiZSBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3Ml9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTA0OlxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gdXNibmV0X2dldF9kcnZpbmZvLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDU6XFx0LmdldF9saW5rXFx0XFx0PSB1c2JuZXRfZ2V0X2xpbmssXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEwNjpcXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzoxMDc6XFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gdXNibmV0X3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTA4LVxcdC5nZXRfd29sXFx0XFx0PSBhc2l4X2dldF93b2wsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtMTEyLVxcdC5zZXRfZWVwcm9tXFx0XFx0PSBhc2l4X3NldF9lZXByb20sXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExMzpcXHQubndheV9yZXNldFxcdFxcdD0gdXNibmV0X253YXlfcmVzZXQsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjExNDpcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSB1c2JuZXRfZ2V0X2xpbmtfa3NldHRpbmdzX21paSxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6MTE1OlxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHVzYm5ldF9zZXRfbGlua19rc2V0dGluZ3NfbWlpLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0xMTg9c3RhdGljIHZvaWQgYXg4ODE3Ml9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTExOS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjEyMDpcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xMjEtXFx0c3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopXFx1MDAyNmRldi1cXHUwMDNlZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0xNTYtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjE1NzpzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTE1OC17XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM0OjUzLjkxNDc2ODI0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzMwMTc5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQl9VU0JORVQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uLiBMZXQncyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlOiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG1hdHRlciBpcy4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbnMg4oCTIHRoZSBzcGVjaWZpYyBzZXR0aW5ncyBhdmFpbGFibGUg4oCTIGFuZCwgY3JpdGljYWxseSwgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZSBkb2VzIGBVU0JfVVNCTkVUYCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgYW55IHByZWNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBiZWZvcmUgSSBjYW4gZXZlbiAqY29uc2lkZXIqIGVuYWJsaW5nIGl0PyBUaW1lIHRvIGdldCBncmFudWxhciBhbmQgbWFwIG91dCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEtub3dpbmcgdGhlIEtjb25maWcgaXMga2V5IHRvIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1Ni4yNDc3ODgyMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXFxuIDEzMTpcXHRcXG4gMTMyOlxcdGNvbmZpZyBVU0JfVVNCTkVUXFxuIDEzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuIDEzNDpcXHRcXHRzZWxlY3QgTUlJXFxuIDEzNTpcXHRcXHRoZWxwXFxuIDEzNjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcXG4gMTM3OlxcdFxcdCAgd2l0aCBcXFwibWluaWRyaXZlcnNcXFwiIGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlXFxuIDEzODpcXHRcXHQgIHRoYXQgc3VwcG9ydHMgZGVlcCBxdWV1ZXMgZm9yIGVmZmljaWVudCB0cmFuc2ZlcnMuICAoVGhpcyBnaXZlc1xcbiAxMzk6XFx0XFx0ICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXFxcInVzYm5ldFxcXCIsIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHQgIC0gQW5vdGhlciBVU0IgaG9zdCwgd2hlbiB1c2luZyBVU0IgXFxcIm5ldHdvcmtcXFwiIG9yIFxcXCJkYXRhIHRyYW5zZmVyXFxcIlxcbiAxNDQ6XFx0XFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcXG4gMTQ1OlxcdFxcdCAgICBcXFwiTGFwbGlua1xcXCIgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseVxcbiAxNDY6XFx0XFx0ICAgIG9uIHNwZWNpYWxpemVkIGNoaXBzIGZyb20gbWFueSBzdXBwbGllcnMuXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cXG4gMTQ5OlxcdFxcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcXG4gMTUwOlxcdFxcdCAgICBvdGhlcnMpLCBhbmQgZGV2aWNlcyB0aGF0IGludGVyb3BlcmF0ZSB1c2luZyB0aGUgc3RhbmRhcmRcXG4gMTUxOlxcdFxcdCAgICBDREMtRXRoZXJuZXQgc3BlY2lmaWNhdGlvbiAoaW5jbHVkaW5nIG1hbnkgY2FibGUgbW9kZW1zKS5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICAtIE5ldHdvcmsgYWRhcHRlciBoYXJkd2FyZSAobGlrZSB0aG9zZSBmb3IgMTAvMTAwIEV0aGVybmV0KSB3aGljaFxcbiAxNTQ6XFx0XFx0ICAgIHVzZXMgdGhpcyBkcml2ZXIgZnJhbWV3b3JrLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHQgIFRoZSBsaW5rIHdpbGwgYXBwZWFyIHdpdGggYSBuYW1lIGxpa2UgXFxcInVzYjBcXFwiLCB3aGVuIHRoZSBsaW5rIGlzXFxuIDE1NzpcXHRcXHQgIGEgdHdvLW5vZGUgbGluaywgb3IgXFxcImV0aDBcXFwiIGZvciBtb3N0IENEQy1FdGhlcm5ldCBkZXZpY2VzLiAgVGhvc2VcXG4gMTU4OlxcdFxcdCAgdHdvLW5vZGUgbGlua3MgYXJlIG1vc3QgZWFzaWx5IG1hbmFnZWQgd2l0aCBFdGhlcm5ldCBCcmlkZ2luZ1xcbiAxNTk6XFx0XFx0ICAoQ09ORklHX0JSSURHRSkgaW5zdGVhZCBvZiByb3V0aW5nLlxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcXHUwMDNjaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldC9cXHUwMDNlLlxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibmV0LlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuIDE2NzpcXHRcXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDE2ODpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gMTY5OlxcdFxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1Ni4yNDc4OTQ1OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDQ3ODIxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgVVNCIG5ldHdvcmtpbmcgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSdzIGZpcnN0IGZldyBsaW5lcy4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbW1lZGlhdGUgbWVudSBzdHJ1Y3R1cmUgb3IgYW55IGRlcGVuZGVuY2llcyBkZWZpbmVkIGZvciBgVVNCX05FVF9EUklWRVJTYCBvciBldmVuIHRoZSBicm9hZGVyIGBVU0JgIGZlYXR1cmUgc2V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgYW5kIHdoYXQgdGhlIHByZXJlcXVpc2l0ZXMgbWlnaHQgYmUgZm9yIGVuYWJsaW5nIHRoZXNlIGRyaXZlcnMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdOKAmWxsIGxldCBtZSBxdWlja2x5IGdyYXNwIGhvdyB0aGVzZSBwYXJ0cyBwbHVnIGludG8gdGhlIGxhcmdlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzQ6NTkuMjk1NzE4NTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNDo1OS4yOTU4MTA2NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDI1MTUwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgaW5zcGVjdGlvbiByZXF1ZXN0LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFVTQm5ldCBEcml2ZXI6IEtleSBTZWN0aW9ucyBmb3IgUmV2aWV3KipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBleGFtaW5lIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMzIwLTM2MCBhbmQgMTI5MC0xMzI1LiBUaGF0J3MgYSByZWFzb25hYmxlIHJlcXVlc3QuIFRob3NlIGxpbmUgcmFuZ2VzIGxpa2VseSBjb3ZlciBjcml0aWNhbCBhcmVhcyB3aXRoaW4gdGhlIFVTQiBuZXR3b3JrIGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIGltbWVkaWF0ZWx5IGh5cG90aGVzaXplIHdoYXQgbWlnaHQgYmUgdGhlcmUuIExpbmVzIDMyMC0zNjAgY291bGQgZGVhbCB3aXRoIHNvbWUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LCBwZXJoYXBzIGRldmljZSBwcm9iZSBhbmQgY29ubmVjdGlvbiBoYW5kbGluZywgb3IgcG9zc2libHkgaW50ZXJydXB0IHNldHVwIHdpdGhpbiB0aGUgZHJpdmVyLCBnaXZlbiB0aGUgdXN1YWwgbGF5b3V0IG9mIGEgVVNCIGRyaXZlci4gSSBleHBlY3Qgc29tZSBkZXZpY2UgY29uZmlndXJhdGlvbiBvciBiYXNpYyBzZXR1cCwgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uLlxuXG5UaGUgbGF0dGVyIHNlY3Rpb24sIDEyOTAtMTMyNSwgaXMgYSBiaXQgZnVydGhlciBpbnRvIHRoZSBmaWxlLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLCB0aGlzIHJhbmdlIGNvdWxkIGRlYWwgd2l0aCB0aGUgY29yZSBkYXRhIHRyYW5zZmVyIGxvZ2ljIC0gbWF5YmUgdGhlIHNlbmQgcGF0aCBvciByZWNlaXZlIHBhdGggaGFuZGxpbmcgZm9yIG5ldHdvcmsgcGFja2V0cy4gSSB3b3VsZCBwcmVkaWN0IHRoYXQsIGlmIHRoZSBmb3JtZXIgaXMgaW50ZXJydXB0IHNldHVwLCB0aGlzIHNlY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgbGl2ZSwgaW5jbHVkaW5nIGRhdGEgdHJhbnNmZXIgY29tcGxldGlvbiBwcm9jZXNzaW5nLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGJ1bGsgdHJhbnNmZXIsIGludGVycnVwdCB0cmFuc2Zlciwgb3IgZXZlbiBpc29jaHJvbm91cyB0cmFuc2ZlcnMsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBBbHNvLCBnaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBkcml2ZXIsIGl0J3MgdmVyeSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBhbmQgaG93IHRoZSBkYXRhIHN0cmVhbXMgYXJlIG1hbmFnZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgdG8gY29uZmlybSBteSBoeXBvdGhlc2VzLiBJdCdsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBhdXRob3Igc3RydWN0dXJlZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhleSd2ZSBpbXBsZW1lbnRlZC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUncyBiZWhhdmlvciB3aXRoaW4gdGhlc2UgYXJlYXMsIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciwgb2YgY291cnNlLCBhbnkgZ2xhcmluZyBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4gVGhhdCdzIHRoZSBjaGFsbGVuZ2UuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNTowMy4zMjA5NjM0NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cXG4gMzIzOlxcdCAqIFNvbWUgbGluayBwcm90b2NvbHMgYmF0Y2ggcGFja2V0cywgc28gdGhlaXIgcnhfZml4dXAgcGF0aHNcXG4gMzI0OlxcdCAqIGNhbiByZXR1cm4gY2xvbmVzIGFzIHdlbGwgYXMganVzdCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYi5cXG4gMzI1OlxcdCAqL1xcbiAzMjY6XFx0dm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDMyNzpcXHR7XFxuIDMyODpcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gMzI5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDMzMDpcXHRcXHRpbnRcXHRzdGF0dXM7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSkge1xcbiAzMzM6XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlcnhxX3BhdXNlLCBza2IpO1xcbiAzMzQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzU6XFx0XFx0fVxcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHQvKiBvbmx5IHVwZGF0ZSBpZiB1bnNldCB0byBhbGxvdyBtaW5pZHJpdmVyIHJ4X2ZpeHVwIG92ZXJyaWRlICovXFxuIDMzODpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAwKVxcbiAzMzk6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVxcdTAwM2VuZXQpO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIDM0MjpcXHRcXHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDM6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0NTpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDY6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ3OlxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gMzUwOlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cXHUwMDNlcHJvdG9jb2wpO1xcbiAzNTE6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0aWYgKHNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSlcXG4gMzU0OlxcdFxcdFxcdHJldHVybjtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0c3RhdHVzID0gbmV0aWZfcnggKHNrYik7XFxuIDM1NzpcXHRcXHRpZiAoc3RhdHVzICE9IE5FVF9SWF9TVUNDRVNTKVxcbiAzNTg6XFx0XFx0XFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXFx1MDAzZW5ldCxcXG4gMzU5OlxcdFxcdFxcdFxcdCAgXFxcIm5ldGlmX3J4IHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDMuMzIxMTI4OTU5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzM3NTg0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBVU0JuZXQgVHJhbnNtaXNzaW9uIENvbXBsZXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSBVU0IgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIGZpbGUuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIHBhY2tldHMgYXJlIHN1Y2Nlc3NmdWxseSBzZW50IG92ZXIgdGhlIFVTQiBidXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIGEgdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlLCBvciwgbW9yZSBsaWtlbHksIHdoYXQgbmVlZHMgdG8gaGFwcGVuIHRvIG1ha2UgdGhlIHRyYW5zbWlzc2lvbiAqYXBwZWFyKiB0byBiZSBjb21wbGV0ZS4gSXMgaXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IFJlc291cmNlIHJlbGVhc2U/IE5vdGlmaWNhdGlvbiB0byB0aGUgdXBwZXIgbmV0d29ya2luZyBsYXllcnM/IEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGNvbnRyb2xsZXIgYW5kIHRoZSBuZXR3b3JrIHN0YWNrIGluIGhlcmUuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGRlYWx0IHdpdGggaGVyZS4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGJvdGggc3VjY2Vzc2Z1bCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdHJhbnNtaXNzaW9uIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjA1Ljc5NDg5MDQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VmbGFncylcXG4xMjkyOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VmbGFncyk7XFxuMTI5MzpcXHR9XFxuMTI5NDpcXHRcXG4xMjk1OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI5NjpcXHRcXG4xMjk3OlxcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4xMjk4OlxcdHtcXG4xMjk5OlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuMTMwMDpcXHRcXHRzdHJ1Y3Qgc2tiX2RhdGFcXHRcXHQqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi1cXHUwMDNlY2I7XFxuMTMwMTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyA9PSAwKSB7XFxuMTMwNDpcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4xMzA1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTMwNjpcXHRcXG4xMzA3OlxcdFxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4xMzA4OlxcdFxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuMTMwOTpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMxMDpcXHRcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cXHUwMDNlcGFja2V0cyk7XFxuMTMxMTpcXHRcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuMTMxMjpcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbjEzMTM6XFx0XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbjEzMTQ6XFx0XFx0fSBlbHNlIHtcXG4xMzE1OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG4xMzE2OlxcdFxcbjEzMTc6XFx0XFx0XFx0c3dpdGNoICh1cmItXFx1MDAzZXN0YXR1cykge1xcbjEzMTg6XFx0XFx0XFx0Y2FzZSAtRVBJUEU6XFxuMTMxOTpcXHRcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XFxuMTMyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0XFx0Lyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqL1xcbjEzMjM6XFx0XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXHRcXHQvLyBhc3luYyB1bmxpbmtcXG4xMzI0OlxcdFxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXHRcXHQvLyBoYXJkd2FyZSBnb25lXFxuMTMyNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0XFx0LyogbGlrZSByeCwgdHggZ2V0cyBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGh1Yl93cVxcbjEzMjg6XFx0XFx0XFx0ICogZGVsYXlzIGFuZCBzbyBpdCB1c2VzIHRoZSBzYW1lIHRocm90dGxpbmcgbWVjaGFuaXNtLlxcbjEzMjk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjA1Ljc5NTAxNzY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM2NzI3OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBZZXAsIG5vIGRvdWJ0IGFib3V0IGl0LiBUaGlzIGlzIGB1c2JuZXQuY2AsIHRoZSBoZWFydCBvZiBVU0IgbmV0d29ya2luZyBkcml2ZXJzIGluIExpbnV4LiBXZSdyZSB0YWxraW5nIGFib3V0IGRldmljZXMgbGlrZSBDREMgRXRoZXJuZXQsIEFTSVgsIHRoZSB3aG9sZSBzaGViYW5nLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgYHVzYm5ldF9za2JfcmV0dXJuKClgLCB3aGljaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMgYW5kIHVwZGF0ZXMgc3RhdHMsIGFuZCBgdHhfY29tcGxldGUoKWAsIHRoZSBVUkIgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgdHJhbnNtaXNzaW9uLCBhbHNvIHdpdGggc3RhdCB1cGRhdGVzLiBUaGVzZSBhcmUgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIGhpdCB3aGVuIGEgVVNCIG5ldHdvcmsgZGV2aWNlIHRyYW5zbWl0cyBvciByZWNlaXZlcy4gVGhhdCdzIHRyaXZpYWwgdG8gdHJpZ2dlciBldmVuIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyB0aGluayBzeXprYWxsZXIgd2l0aCByYXcgZ2FkZ2V0cyBvciBqdXN0IHN0cmFpZ2h0LXVwIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgc2hvdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gZm9jdXMgb24gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gV2FpdCwgaG9sZCBvbiDigJMgd2hpY2ggc3ltYm9scyBhcmUgYWN0dWFsbHkgYmVpbmcgKm1vZGlmaWVkKj8gSXQgbG9va3MgbGlrZSBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHRoZW1zZWx2ZXMuIE9rYXksIGdvb2QgdG8ga25vdy4gTm93LCBpcyBgdHhfY29tcGxldGVgIGV2ZW4gYWNjZXNzaWJsZT8gTGV0J3Mgc2VlLi4uIGBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpYC4gQWgsIGl0J3Mgc3RhdGljIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBUaGF0IG1pZ2h0IGJlIGEgcHJvYmxlbS4gV2UgbmVlZCB0byBjb25maXJtIGl0J3MgYSB2YWxpZCBzeW1ib2wgdmlzaWJsZSBpbiBgdm1saW51eGAuIEknbGwgcnVuIGBncmVwcGVyYCBvciBjaGVjayB0aGUgY2FsbGVycyBvZiBgdHhfY29tcGxldGVgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGNhbiBhY3R1YWxseSBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDkuODMxNzQ4ODgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgzMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0eF9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODY9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5Ni1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDQ9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQwLVxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVxcdTAwM2V1ZGV2LCBkZXYtXFx1MDAzZW91dCxcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQ0MTpcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4sIHR4X2NvbXBsZXRlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDQyLVxcdGlmIChkZXYtXFx1MDAzZWNhbl9kbWFfc2cpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MDkuODgxNTgxMzUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MjE2Mzk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29yayBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nIHJlZ2FyZGluZyBmdXp6aW5nIHRoaXMgVVNCIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbXBpbGVyICpoYXMqIHRvIGtlZXAgYHR4X2NvbXBsZXRlYCBhcm91bmQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiB3aXRoaW4gYHVzYl9maWxsX2J1bGtfdXJiYC4gVGhpcyBtZWFucyBpdCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZXMgKGthbGxzeW1zL3ZtbGludXgpLiBTaW1pbGFybHksIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIHNvIHdlIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBib3RoLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4YW1pbmUgYHVzYm5ldF9zdGFydF94bWl0YCwgYnV0IGF0IGEgbWluaW11bSBJJ2xsIGZvY3VzIG9uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGtleSBpcyBgQ09ORklHX1VTQl9VU0JORVRgLiBUaGlzIGlzIHdoYXQgZW5hYmxlcyB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycywgYW5kIGRlcGVuZHMgb24gYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgLCB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIGBDT05GSUdfVVNCYCBhbmQgYENPTkZJR19ORVRgLiBMb29raW5nIGludG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCwgSSBjYW4gY29uZmlybSB0aGF0IGBVU0JfVVNCTkVUYCBhbHNvIHJlcXVpcmVzIHRoZSBzZWxlY3Rpb24gb2YgYE1JSWAuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUgYnVpbGQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIGluIGxpbmUgd2l0aCBteSBvdmVyYWxsIHN0cmF0ZWd5OlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHksIHllcyFcbjIuICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBgW1widXNibmV0X3NrYl9yZXR1cm5cIiwgXCJ0eF9jb21wbGV0ZVwiXWAgYXJlIHRoZSBwcmltZSB0YXJnZXRzLlxuMy4gIGBFbmFibGVDb25maWdzYDogYFtcIlVTQl9VU0JORVRcIiwgXCJVU0JfTkVUX0RSSVZFUlNcIiwgXCJVU0JcIiwgXCJORVRcIl1gLiBUaGVzZSBjb25maWdzIGFyZSBlc3NlbnRpYWwuXG40LiAgYFJlYXNvbmluZ2A6IFdlJ3ZlIGdvdCBhIGNsZWFyIGV4cGxhbmF0aW9uIG9mICp3aHkqIHRoaXMgaXMgYSBnb29kIHRhcmdldCAtIGZpeGluZyBpc3N1ZXMgYWNjZXNzaW5nIHBlci1DUFUgc3RhdHMsIGFuZCBpdHMgYWNjZXNzaWJpbGl0eSB2aWEgVVNCIG5ldHdvcmtpbmcgZGV2aWNlcywgbWVhbmluZyBpdCBpcyBmdXp6YWJsZSB2aWEgVVNCIGdhZGdldC9lbXVsYXRpb24sIGFsbCBvZiB3aGljaCBJJ3ZlIGV4cGxpY2l0bHkgdmVyaWZpZWQuXG5cblJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UncmUgcmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI0LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNToxNC40MDMyMjM0OThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkxNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYm5ldF9za2JfcmV0dXJuXCIsXG4gICAgXCJ0eF9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSByb3V0aW5lcyBpbiB1c2JuZXQgKHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSkgYnkgZGlzYWJsaW5nIGxvY2FsIElSUXMgYmVmb3JlIGNhbGxpbmcgdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpLCBlbnN1cmluZyBzYWZlIHBlci1DUFUgYWNjZXNzLiBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAvIHJhdy1nYWRnZXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB1cGRhdGUgcm91dGluZXMgaW4gdXNibmV0ICh1c2JuZXRfc2tiX3JldHVybiBhbmQgdHhfY29tcGxldGUpIGJ5IGRpc2FibGluZyBsb2NhbCBJUlFzIGJlZm9yZSBjYWxsaW5nIHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKSwgZW5zdXJpbmcgc2FmZSBwZXItQ1BVIGFjY2Vzcy4gVVNCIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gLyByYXctZ2FkZ2V0IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MTQuNDgxMTQ2MjU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwNjc3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjE0LjQ4MTYxMDEzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNTA2MzAyMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjYmMwYTE4ZTYyYjg3M2M3NTI4NTU5ZDc0NTQ3OTkxNDMzM2ZiYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjM0OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5pbmRleCBhMTllY2Y3MThmMzZhLi42YTQ4ZjM4ZTEwNWQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbkBAIC0zMjUsNyArMzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuICAqL1xuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludFx0c3RhdHVzO1xuIFxuQEAgLTMzOCwxMCArMzM4LDEzIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIFxuLVx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTMwMSwxNiBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MTQuNDgxNjExMTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNzIyODA1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgc3RhdGlzdGljIHVwZGF0ZXMgZm9yIFJYIGFuZCBUWCBwYWNrZXRzLiBUaGUgZGlmZiBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhlIHBsYWNlbWVudCBvZiB0aGUgYHRoaXNfY3B1X3B0cigpYCBjYWxsLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIGZldGNoaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMvcHJlZW1wdGlvbiB1c2luZyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKClgLiBOb3csIHRoZSBjb2RlIHNhdmVzIHRoZSBpbnRlcnJ1cHQgc3RhdGUgZmlyc3Qgd2l0aCBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCwgKnRoZW4qIGZldGNoZXMgdGhlIGBzdGF0czY0YCBwb2ludGVyIHVzaW5nIGB0aGlzX2NwdV9wdHIoKWAsIGFuZCAqZmluYWxseSogdXNlcyBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC9gdTY0X3N0YXRzX3VwZGF0ZV9lbmQoKWAgdG8gaGFuZGxlIHRoZSB1cGRhdGUsIGZvbGxvd2VkIGJ5IHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpdGggYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZS4gSWYgdGhlIHRhc2sgd2VyZSBwcmVlbXB0ZWQgb3IgbWlncmF0ZWQgdG8gYW5vdGhlciBDUFUgKmFmdGVyKiBmZXRjaGluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGJ1dCAqYmVmb3JlKiBkaXNhYmxpbmcgaW50ZXJydXB0cywgb3IgaWYgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZXMgd2hlcmUgcGVyLWNwdSBwb2ludGVycyByZXF1aXJlIHByZWVtcHRpb24gZGlzYWJsZWQsIHRoZSB3cm9uZyBzdGF0aXN0aWNzIGNvdWxkIGJlIHVwZGF0ZWQuIEZldGNoaW5nIHRoZSBwb2ludGVyIHVuZGVyIGludGVycnVwdC9wcmVlbXB0aW9uIGNvbnRyb2wgZ3VhcmFudGVlcyB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGNvcnJlY3QgcGVyLUNQVSBzdHJ1Y3R1cmUsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgaW4gU01QL211bHRpY29yZSBzeXN0ZW1zLiBJdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcgZml4LlxuXG5Ob3csIGxldCdzIGNyaXRpY2FsbHkgZXhhbWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgaXNzdWVzLiBBIHF1aWNrIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpcyBjcnVjaWFsLiBJdCBsb29rcyBsaWtlIGBmbGFnc2AgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlYCBjYWxsLiBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYnkgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgLCB3aGljaCBzaG91bGQgcmV0dXJuIGEgdmFsaWQgcG9pbnRlci4gVGhlIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfZW5kYCBmdW5jdGlvbnMgd29yayBvbiB0aGUgc3luY3Agb2Ygc3RhdHM2NCwgc28gdGhvc2UgYXJlIGFsbCB2YWxpZCwgYW5kIGBsb2NhbF9pcnFfcmVzdG9yZShmbGFncylgIHVzZXMgdGhlIGluaXRpYWxpemVkIGBmbGFnc2AgdmFsdWUuIFNvLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gcG90ZW50aWFsIGZvciBtZW1vcnkgbGVha3Mgb3Igb3RoZXIgbmFzdHkgc2lkZSBlZmZlY3RzIHRoYXQgSSBjYW4gc2VlIGltbWVkaWF0ZWx5LiBUaGUgdmFyaWFibGVzIGFyZSBhbGwgc2FmZS4gVGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGNvcHlfdG9fdXNlciBjYWxscywgb3IgaW5mbyBsZWFrcyBoZXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnJhbmNoZXMgdGhhdCBsb29rIGNvbmNlcm5pbmcuXG5cbkknbSBjb25maWRlbnQgdGhpcyBpcyBhIHNhZmUgYW5kIGNvcnJlY3QgY2hhbmdlIHRvIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuIEl0J3MgZ29vZCBwcmFjdGljZSB0byBwcm90ZWN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBlci1jcHUgcG9pbnRlcnMgZHVyaW5nIHRoZSB1cGRhdGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQgZG9lc24ndCBhcHBlYXIgbGlrZSB0aGlzIG5lY2Vzc2l0YXRlcyBhbnkgS01TQU4gY2hlY2tzLiBTdGlsbCwgaXQncyBnb29kIHRvIGRvIGEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUgbGluZXMgb2YgY29kZS4gSSdsbCBwcm9iYWJseSBydW4gYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgbG9vayBhcyBleHBlY3RlZCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6MzU6MjEuNjUzODk0MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzMwOlxcdFxcdGludFxcdHN0YXR1cztcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfcGF1c2UsIHNrYik7XFxuIDMzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDMzNTpcXHRcXHR9XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cXG4gMzM4OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIDMzOTpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQyOlxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuIDM0NDpcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gMzQ1OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuIDM0NjpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDc6XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM1MTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU3OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1ODpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTk6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNjA6XFx0fVxcbiAzNjE6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHQvKiBtdXN0IGJlIGNhbGxlZCBpZiBoYXJkX210dSBvciByeF91cmJfc2l6ZSBjaGFuZ2VkICovXFxuIDM2NDpcXHR2b2lkIHVzYm5ldF91cGRhdGVfbWF4X3FsZW4oc3RydWN0IHVzYm5ldCAqZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjozNToyMS42NTQwMTM5NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzMzg3ODkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBVU0JuZXQgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIHRvIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyByZWFsbHkganVzdCBhIHJlb3JkZXJpbmcgb2YgaG93IHRoZSB0cmFmZmljIHN0YXRpc3RpY3MgYXJlIGFjY2Vzc2VkLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyB0aGUgZmV0Y2hpbmcgb2YgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHRvICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmVgL2Bsb2NhbF9pcnFfcmVzdG9yZWAgY3JpdGljYWwgc2VjdGlvbiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlYCwgd2hpY2ggaGFkIHRoZSBzdGF0cyByZXRyaWV2YWwgKmJlZm9yZSogdGhlIElSUSBkaXNhYmxpbmcuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIEtNU0FOIGlzc3VlcywgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyBoZXJlLiBUaGVyZSdzIG5vIGhpbnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWNjZXNzZWQsIG5vIHJpc2sgb2YgbGVha2luZyBrZXJuZWwgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSwgbm90aGluZyBjb21wbGV4IGJlaW5nIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyBjb25kaXRpb25hbCBsb2dpYyBicmFuY2hpbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGFsbCBjb21tb24gS01TQU4gdHJpZ2dlcnMsIGFuZCBub25lIG9mIHRoZW0gYXJlIHByZXNlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRpdmVseSBmYWxzZSBpbiB0aGlzIGNhc2UuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoaXMgY2xlYXIgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjM1OjI0Ljk4Nzg5NTI2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCB0byBmZXRjaCB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIGluc2lkZSBhIGBsb2NhbF9pcnFfc2F2ZWAvYGxvY2FsX2lycV9yZXN0b3JlYCBibG9jayByYXRoZXIgdGhhbiBjYWxsaW5nIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgIG9uIGEgcG9pbnRlciBvYnRhaW5lZCBwcmlvciB0byBkaXNhYmxpbmcgaW50ZXJydXB0cy9wcmVlbXB0aW9uLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGxvY2tpbmcvY29uY3VycmVuY3kgZml4IGZvciBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRpbmcuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmbGFnc2AsIGBzdGF0czY0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLCBubyBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGZldGNoIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlYC9gbG9jYWxfaXJxX3Jlc3RvcmVgIGJsb2NrIHJhdGhlciB0aGFuIGNhbGxpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAgb24gYSBwb2ludGVyIG9idGFpbmVkIHByaW9yIHRvIGRpc2FibGluZyBpbnRlcnJ1cHRzL3ByZWVtcHRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgbG9ja2luZy9jb25jdXJyZW5jeSBmaXggZm9yIHBlci1DUFUgc3RhdGlzdGljcyB1cGRhdGluZy4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZsYWdzYCwgYHN0YXRzNjRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UsIG5vIG5ldyBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow7fmjd[1] Phase: Succeeded StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 02:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 02:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2] Phase: Succeeded StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 02:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 02:35:35 +0000 UTC FinishedAt: 2026-09-05 02:35:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow7fmjd/series-workflow7fmjd-convert-artifact-3565467701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 02:35:45 +0000 UTC FinishedAt: 2026-09-05 02:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 02:35:45 +0000 UTC FinishedAt: 2026-09-05 02:52:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b680e90d-a8fb-4d25-b37e-c0c4a099ba56,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-workflow7fmjd/series-workflow7fmjd-convert-artifact-3565467701/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": "6da7dbdf-4445-4d6a-81a4-e0c889bca61a", "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-workflow7fmjd/series-workflow7fmjd-build-action-703755291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 02:35:45 +0000 UTC FinishedAt: 2026-09-05 02:52:03 +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:*b680e90d-a8fb-4d25-b37e-c0c4a099ba56,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-workflow7fmjd/series-workflow7fmjd-convert-artifact-3565467701/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": "6da7dbdf-4445-4d6a-81a4-e0c889bca61a", "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-workflow7fmjd/series-workflow7fmjd-build-action-703755291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 02:52:13 +0000 UTC FinishedAt: 2026-09-05 02:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 02:52:13 +0000 UTC FinishedAt: 2026-09-05 02:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 02:52:13 +0000 UTC FinishedAt: 2026-09-05 02:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 02:52:13 +0000 UTC FinishedAt: 2026-09-05 02:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow7fmjd/series-workflow7fmjd-convert-artifact-1928809872/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 02:52:23 +0000 UTC FinishedAt: 2026-09-05 02:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 02:52:24 +0000 UTC FinishedAt: 2026-09-05 02:54:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6da7dbdf-4445-4d6a-81a4-e0c889bca61a,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-workflow7fmjd/series-workflow7fmjd-build-action-703755291/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-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 02:54:27 +0000 UTC FinishedAt: 2026-09-05 02:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 02:54:27 +0000 UTC FinishedAt: 2026-09-05 02:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 02:54:27 +0000 UTC FinishedAt: 2026-09-05 03:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 02:54:27 +0000 UTC FinishedAt: 2026-09-05 03:10:26 +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:*b680e90d-a8fb-4d25-b37e-c0c4a099ba56,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-workflow7fmjd/series-workflow7fmjd-convert-artifact-1928809872/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": "3e712e9d-a551-47ad-8a24-9609130d2f3e", "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-workflow7fmjd/series-workflow7fmjd-build-action-2239580684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 02:54:27 +0000 UTC FinishedAt: 2026-09-05 03:10:16 +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:*b680e90d-a8fb-4d25-b37e-c0c4a099ba56,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-workflow7fmjd/series-workflow7fmjd-convert-artifact-1928809872/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": "3e712e9d-a551-47ad-8a24-9609130d2f3e", "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-workflow7fmjd/series-workflow7fmjd-build-action-2239580684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 03:10:26 +0000 UTC FinishedAt: 2026-09-05 03:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 03:10:26 +0000 UTC FinishedAt: 2026-09-05 03:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 03:10:26 +0000 UTC FinishedAt: 2026-09-05 03:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 03:10:26 +0000 UTC FinishedAt: 2026-09-05 03:12:11 +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:*3e712e9d-a551-47ad-8a24-9609130d2f3e,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-workflow7fmjd/series-workflow7fmjd-build-action-2239580684/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-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"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:*6da7dbdf-4445-4d6a-81a4-e0c889bca61a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e712e9d-a551-47ad-8a24-9609130d2f3e,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-workflow7fmjd/series-workflow7fmjd-build-action-703755291/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-workflow7fmjd/series-workflow7fmjd-build-action-2239580684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 03:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 03:12:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"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-workflow7fmjd/series-workflow7fmjd-convert-artifact-3283101065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 03:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 03:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 03:12:21 +0000 UTC FinishedAt: 2026-09-05 03:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 03:12:31 +0000 UTC FinishedAt: 2026-09-05 04:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7fmjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"db3cc672-7abd-42a1-88c5-c9071592f55e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 03:12:31 +0000 UTC FinishedAt: 2026-09-05 04:07:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6da7dbdf-4445-4d6a-81a4-e0c889bca61a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e712e9d-a551-47ad-8a24-9609130d2f3e,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-workflow7fmjd/series-workflow7fmjd-build-action-703755291/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-workflow7fmjd/series-workflow7fmjd-build-action-2239580684/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-workflow7fmjd/series-workflow7fmjd-convert-artifact-3283101065/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,}